微控制器的內部存儲器很小,不足以長時間保存傳感器生成的數據,要么您必須使用一些外部存儲設備,要么可以使用互聯網將數據保存在某些云上。此外,當傳感器部署在人無法到達或難以頻繁訪問的極端條件站點時,有時會變得難以管理。為了糾正這類問題,我們總是研究我們希望從任何地方實時監控傳感器數據的方式,而無需任何物理存在。
實時數據庫可以用在這種情況下,我們只需要連接一些可以連接到互聯網并能夠與云服務器交換數據的控制器。服務器數據可用于監控實時系統行為、數據庫分析、統計分析和處理以及未來用例的解釋。有許多物聯網硬件平臺和云平臺可用于實現此目的。
我們將使用溫度和濕度傳感器 DHT11和NodeMCU ESP8266 模塊在 Google 的 Firebase 數據庫服務器上實時記錄溫度和濕度。
我們將項目分為兩個部分。首先,我們將從組裝硬件組件并將固件上傳到其中開始。其次,我們將使用 Firebase 與 NodeMCU 進行設置以交換實時數據。如果您是 ESP8266 或 Firebase 的新手,請按照我們之前使用 Firebase 控制 LED 的教程進行操作。
所需組件
NodeMCU ESP8266 模塊
DHT11溫濕度傳感器
電路原理圖
DHT11溫濕度傳感器
DHT11 模塊具有帶校準數字信號輸出的濕度和溫度復合體,這意味著 DHT11 傳感器模塊是用于感測濕度和溫度的組合模塊,可提供校準的數字輸出信號。DHT11 為我們提供了非常精確的濕度和溫度值,并確保了高可靠性和長期穩定性。該傳感器具有電阻型濕度測量元件和 NTC 型溫度測量元件,內置 8 位微控制器,具有快速響應和成本效益,采用 4 針單排封裝。
我們之前使用ESP12E 更新網絡服務器上的 DHT11 讀數,除此之外,您可以檢查所有基于 DHT11 的項目,我們使用 DHT11 與許多其他微控制器(如 Arduino、PIC、Raspberry 和使用它們構建的氣象站)進行接口。
編程 NodeMCU ESP8266 實時溫度和濕度監測
最后給出了帶有工作視頻的完整程序。在這里,我們將解釋代碼的幾個重要部分。
首先包括使用 ESP8266 和 firebase 的庫。
#include
按照以下鏈接下載并安裝庫:
https://github.com/FirebaseExtended/firebase-arduino/blob/master/src/Firebase.h
https://github.com/bblanchon/ArduinoJson
編譯時,如果您收到未安裝 ArduinoJson.h 庫的錯誤,請使用上面給出的鏈接安裝它。
我們將對 NodeMCU 進行編程,使其每隔 5 秒從 DHT11 傳感器讀取讀數并將其推送到 Firebase。我們將設置推送數據的路徑。現在有兩個參數,即。濕度和溫度在相同的父路徑和不同的子路徑中發送。
這兩個參數對于與 firebase 通信非常重要。設置這些參數將啟用 ESP8266 和 firebase 之間的數據交換。要為您的項目查找這些參數,請按照我們之前關于Firebase 設置的教程進行操作。
#define FIREBASE_HOST "your-project.firebaseio.com" // 來自 firebase id 的項目名稱地址 #define FIREBASE_AUTH "Uejx9ROxxxxxxxxxxxxxxxxxxxxxxxxxxxfQDDkhN" // 從 firebase 生成的密鑰
成功找到憑據后,只需在上面的代碼中替換即可。
輸入您的 Wi-Fi SSID 和密碼以連接您的網絡。
#define WIFI_SSID "network_name" // 輸入你的家庭或公共wifi名稱 #define WIFI_PASSWORD "password" //wifi ssid的密碼
在 NodeMCU 中定義 DHT 數據引腳。您可以在 NodeMCU 中使用任何數字 GPIO 引腳。
#define DHTPIN D4
DHT 庫適用于所有 DHT 變體,并帶有您想要用于 DHT11 或 DHT22 的 DHT 傳感器的選項。只需選擇正確的 DHT 傳感器并繼續。
#define DHTTYPE DHT11 // 選擇 dht 類型為 DHT 11 或 DHT22 DHT dht(DHTPIN, DHTTYPE);
連接到所選的 Wi-Fi 網絡并連接到 firebase 數據庫服務器。
WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
開始讀取 NodeMCU 的 D4 引腳。
dht.begin();
從 DHT 傳感器獲取濕度和溫度讀數并保存為浮點值。
浮動 h = dht.readHumidity(); // 讀取溫度或濕度大約需要 250 毫秒! 浮動 t = dht.readTemperature(); // 將溫度讀取為攝氏度(默認值)
只需檢查 DHT 傳感器是否正確接線或未損壞,控制器可以從中讀取讀數。如果讀數未顯示,則可能傳感器已損壞,只需顯示錯誤消息并返回再次檢查,而不繼續進行。
if (isnan(h) || isnan(t)) { // 檢查是否有任何讀取失敗并提前退出(重試)。 Serial.println(F("讀取 DHT 傳感器失??!")); 返回; }
在串行監視器中打印傳感器數據以進行調試,并以字符串形式保存溫度和濕度值以將其發送到 Firebase。另請注意,來自 DHT11 傳感器的兩次讀數之間所需的最小延遲為 2 秒,因此請始終使用大于 2 秒的延遲。要了解有關 DHT11 的更多信息,您可以查看官方數據表。
Serial.print("濕度:"); 序列號.print(h); String fireHumid = String(h) + String("%"); //將整數濕度轉換為字符串濕度 Serial.print("% Temperature: "); 序列號.print(t); Serial.println("°C"); String fireTemp = String(t) + String("°C"); 延遲(4000);
最后,將溫度和濕度數據發送到路徑“your-project.firebaseio.com/DHT11/Humidity/”的firebase。
Firebase.pushString("/DHT11/Humidity", fireHumid); //設置路徑并發送讀數Firebase.pushString("/DHT11/Temperature", fireTemp); //設置路徑并發送讀數
您可以查看您的 Firebase 帳戶中的所有數據。只需轉到Firebase中“我的控制臺”中“您的項目”中的“數據庫”部分。
/* 將傳感器數據發送到 Firebase 數據庫 */
#include// esp8266 庫
#include// firebase 庫
#include// dht11 溫濕度傳感器庫
#define FIREBASE_HOST "your-project.firebaseio.com" // 來自 firebase id 的項目名稱地址
#define FIREBASE_AUTH "Uejx9ROxxxxxxxxxxxxxxxxxxxxxxxxxxxfQDDkhN" // 從 firebase 生成的密鑰
#define WIFI_SSID "network_name" // 輸入您的家庭或公共 wifi 名稱
#define WIFI_PASSWORD "password" //wifi ssid 的密碼
#define DHTPIN D4 // 我們連接的數字引腳
#define DHTTYPE DHT11 // 選擇 dht 類型作為 DHT 11 或 DHT22
DHT dht(DHTPIN, DHTTYPE);
無效設置(){
序列.開始(9600);
延遲(1000);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD); //嘗試連接wifi
Serial.print("Connecting to ");
Serial.print(WIFI_SSID);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
延遲(500);
}
Serial.println();
Serial.print("連接到");
Serial.println(WIFI_SSID);
Serial.print("IP 地址為:");
Serial.println(WiFi.localIP()); //打印本地IP地址
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH); // 連接到火力基地
dht.begin(); //開始讀取dht傳感器
}
無效循環(){
浮動h = dht.readHumidity();// 讀取溫度或濕度大約需要 250 毫秒!
浮動 t = dht.readTemperature(); // 將溫度讀取為攝氏度(默認值)
if (isnan(h) || isnan(t)) { // 檢查是否有任何讀取失敗并提前退出(重試)。
Serial.println(F("讀取 DHT 傳感器失敗!"));
返回;
}
Serial.print("濕度:"); 序列號.print(h);
String fireHumid = String(h) + String("%"); //將整數濕度轉換為字符串濕度
Serial.print("% 溫度:"); 序列號.print(t); Serial.println("°C");
String fireTemp = String(t) + String("°C"); //將整數溫度轉換為字符串溫度
延遲(4000);
Firebase.pushString("/DHT11/Humidity", fireHumid); //設置路徑并發送讀數
Firebase.pushString("/DHT11/Temperature", fireTemp); //設置路徑并發送讀數
}
-
數據庫
+關注
關注
7文章
3815瀏覽量
64443 -
DHT11濕度傳感器
+關注
關注
0文章
13瀏覽量
4809 -
NODEMCU
+關注
關注
13文章
289瀏覽量
21439
發布評論請先 登錄
相關推薦
評論