Gửi dữ liệu cảm biến nhiệt độ và độ ẩm đến cơ sở dữ liệu thời gian thực Google Firebase bằng NodeMCU ESP8266
Bộ vi điều khiển có bộ nhớ trong nhỏ không đủ để lưu dữ liệu được tạo, bạn phải sử dụng một số thiết bị bộ nhớ ngoài hoặc có thể lưu dữ liệu trên một số đám mây bằng internet. Đôi khi nó trở nên khó quản lý khi cảm biến được dùng ở một số địa điểm có điều kiện khắc nghiệt mà con người không thể tiếp cận hoặc rất khó để truy cập vào đó thường xuyên. Để khắc phục loại sự cố này, chúng tôi luôn tìm các cách để dễ theo dõi dữ liệu cảm biến trong thời gian thực từ bất cứ đâu.
Cơ sở dữ liệu thời gian thực có thể được sử dụng trong trường hợp này khi chúng ta chỉ cần giao tiếp với một số bộ điều khiển có thể kết nối với internet và có thể trao đổi dữ liệu với máy chủ đám mây. Dữ liệu máy chủ có thể hữu ích trong việc giám sát hành vi hệ thống thời gian thực, phân tích cơ sở dữ liệu, phân tích và xử lý thống kê và giải thích cho trường hợp sử dụng trong tương lai. Có rất nhiều Nền tảng phần cứng IoT và nền tảng Đám mây có sẵn để phục vụ mục đích này.
Chúng tôi sẽ chia dự án thành hai phần. Đầu tiên, chúng ta sẽ bắt đầu với việc lắp ráp các linh kiện phần cứng và tải code vào nó. Và thứ hai, chúng tôi sẽ sử dụng Firebase để thiết lập với NodeMCU để trao đổi dữ liệu thời gian thực.
Linh kiện cần thiết
- Mô-đun NodeMCU ESP8266
- Cảm biến nhiệt độ và độ ẩm DHT11
Sơ đồ mạch
Cảm biến nhiệt độ và độ ẩm DHT11
Mô-đun DHT11 có kết hợp độ ẩm và nhiệt độ với đầu ra tín hiệu số. DHT11 cung cấp cho chúng tôi giá trị rất chính xác của độ ẩm và nhiệt độ và đảm bảo độ tin cậy cao và ổn định lâu dài. Cảm biến này có bộ phận đo độ ẩm loại điện trở và bộ phận đo nhiệt độ loại NTC với bộ vi điều khiển 8 bit có sẵn đáp ứng nhanh và hiệu quả về chi phí và có sẵn trong board 4 chân.
Lập trình theo dõi nhiệt độ và độ ẩm với NodeMCU ESP8266
Chương trình hoàn chỉnh với Video làm việc được đưa ra ở cuối. Ở đây chúng tôi sẽ giải thích một vài phần quan trọng của code.
Đầu tiên thêm các thư viện để sử dụng ESP8266 và firebase.
#include <ESP8266WiFi.h #include <FirebaseArduino.h
Tải xuống và cài đặt các thư viện theo các liên kết dưới đây:
https://github.com/FirebaseExtends/firebase-arduino/blob/master/src/Firebase.h
https://github.com/bblanchon/ArduinoJson
Trong khi biên dịch, nếu bạn gặp lỗi mà thư viện ArduinoJson.h chưa được cài đặt thì vui lòng cài đặt nó bằng liên kết đã cho ở trên.
Chúng tôi sẽ lập trình NodeMCU để đọc các cảm biến từ cảm biến DHT11 và đưa nó lên Firebase cứ sau 5 giây. Chúng tôi sẽ thiết lập một đường dẫn để đẩy dữ liệu. Ngay bây giờ hai tham số viz. độ ẩm và nhiệt độ được gửi trong cùng một đường dẫn cha và đường dẫn con khác nhau.
Hai thông số này rất quan trọng. Đặt các tham số này để cho phép trao đổi dữ liệu giữa và ESP8266 và Firebase. Để tìm các tham số này cho dự án của bạn, hãy làm theo hướng dẫn trước đây của chúng tôi về Thiết lập Firebase .
#define FIREBASE_HOST "your-project.firebaseio.com" // địa chỉ tên dự án từ firebase id #define FIREBASE_AUTH "Uejx9ROxxxxxxxxxxxxx
Sau khi tìm thành công thông tin đăng nhập, chỉ cần thay thế trong đoạn code trên.
Nhập SSID và mật khẩu Wi-Fi của bạn để kết nối với mạng của bạn.
#define WIFI_SSID "network_name" // nhập tên wifi của bạn #define WIFI_PASSWORD "password" // mật khẩu của wifi
Xác định chân dữ liệu DHT trong NodeMCU. Bạn có thể sử dụng bất kỳ chân GPIO kỹ thuật số nào trong NodeMCU.
#define DHTPIN D4
Thư viện DHT được tạo cho tất cả các biến DHT và đi kèm với tùy chọn của cảm biến DHT mà bạn muốn sử dụng, ví dụ như DHT11 hoặc DHT22. Chỉ cần chọn đúng cảm biến DHT và tiến hành.
#define DHTTYPE DHT11 // chọn loại dht là DHT 11 hoặc DHT22 DHT dht (DHTPIN, DHTTYPE);
Kết nối với mạng Wi-Fi đã chọn và cũng kết nối với máy chủ cơ sở dữ liệu firebase.
WiFi.begin (WIFI_SSID, WIFI_PASSWORD); Firebase.begin (FIREBASE_HOST, FIREBASE_AUTH);
Bắt đầu đọc ở chân D4 của NodeMCU .
dht.begin ();
Lấy độ ẩm và nhiệt độ đọc từ cảm biến DHT và lưu dưới dạng giá trị nổi.
float h = dht.readHumids (); // Đọc nhiệt độ hoặc độ ẩm mất khoảng 250 mili giây! float t = dht.readTem Nhiệt độ (); // Đọc nhiệt độ dưới dạng Celsius (mặc định)
Chỉ cần kiểm tra xem cảm biến DHT có được nối dây đúng hay không và bộ điều khiển có thể đọc các dữ liệu từ nó. Nếu các dữ liệu không hiển thị thì có lẽ cảm biến bị hỏng, chỉ cần hiển thị thông báo lỗi và quay lại kiểm tra.
if (isnan(h) || isnan(t)) { // Check if any reads failed and exit early (to try again). Serial.println(F("Failed to read from DHT sensor!")); return; }
In dữ liệu cảm biến trong serial monitor để gỡ lỗi và lưu các giá trị nhiệt độ và độ ẩm ở dạng chuỗi để gửi dữ liệu này đến Firebase. Cũng lưu ý rằng delay tối thiểu cần thiết giữa hai lần đọc từ cảm biến DHT11 là 2 giây, vì vậy luôn luôn sử dụng delay lớn hơn 2 giây. Để biết thêm về DHT11, bạn có thể xem qua bảng dữ liệu chính thức.
Serial.print("Humidity: "); Serial.print(h); String fireHumid = String(h) + String("%"); //convert integer humidity to string humidity Serial.print("% Temperature: "); Serial.print(t); Serial.println("°C "); String fireTemp = String(t) + String("°C"); delay(4000);
Cuối cùng, hãy gửi dữ liệu nhiệt độ và độ ẩm đến firebase tại đường dẫn của bạn your-project.firebaseio.com/DHT11/Humids/.
Firebase.pushString("/DHT11/Humidity", fireHumid); //setup path and send readings Firebase.pushString("/DHT11/Temperature", fireTemp);
Bạn có thể xem tất cả dữ liệu trong tài khoản firebase của bạn. Chỉ cần vào “Database” trong “Your Project” tại “ My console ” Trong Firebase.
Để thiết lập Firebase để gửi và giám sát dữ liệu, bạn có thể tham khảo hướng dẫn trước đây của chúng tôi .
Toàn bộ code và video.
CODE
#include <ESP8266WiFi.h> // esp8266 library #include <FirebaseArduino.h> // firebase library #include <DHT.h> // dht11 temperature and humidity sensor library #define FIREBASE_HOST "your-project.firebaseio.com" // the project name address from firebase id #define FIREBASE_AUTH "Uejx9ROxxxxxxxxxxxxxxxxxxxxxxxxfQDDkhN" // the secret key generated from firebase #define WIFI_SSID "network_name" // input your home or public wifi name #define WIFI_PASSWORD "password" //password of wifi ssid #define DHTPIN D4 // what digital pin we're connected to #define DHTTYPE DHT11 // select dht type as DHT 11 or DHT22 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); delay(1000); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); //try to connect with wifi Serial.print("Connecting to "); Serial.print(WIFI_SSID); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.println(); Serial.print("Connected to "); Serial.println(WIFI_SSID); Serial.print("IP Address is : "); Serial.println(WiFi.localIP()); //print local IP address Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH); // connect to firebase dht.begin(); //Start reading dht sensor } void loop() { float h = dht.readHumidity(); // Reading temperature or humidity takes about 250 milliseconds! float t = dht.readTemperature(); // Read temperature as Celsius (the default) if (isnan(h) || isnan(t)) { // Check if any reads failed and exit early (to try again). Serial.println(F("Failed to read from DHT sensor!")); return; } Serial.print("Humidity: "); Serial.print(h); String fireHumid = String(h) + String("%"); //convert integer humidity to string humidity Serial.print("% Temperature: "); Serial.print(t); Serial.println("°C "); String fireTemp = String(t) + String("°C"); //convert integer temperature to string temperature delay(4000); Firebase.pushString("/DHT11/Humidity", fireHumid); //setup path and send readings Firebase.pushString("/DHT11/Temperature", fireTemp); //setup path and send readings }
VIDEO