Giới thiệu
Trong bài viết này tôi sẽ hướng dẫn các bạn cách ghi nhật ký dữ liệu thời tiết lên đám mây. ThingSpeak.com sẽ được sử dụng làm nhà cung cấp dịch vụ đám mây và cảm biến DHT11 sẽ được sử dụng để đo dữ liệu nhiệt độ và độ ẩm.
Trong hướng dẫn này tôi sử dụng NodeMCU được lập trình trên Arduino IDE.
Chuẩn bị
Phần cứng
Tên linh kiện | Số lượng |
NodeMCU | 1 |
Cảm biến nhiệt độ và độ ẩm DHT11 | 1 |
Breadboard | 1 |
Dây cắm breadboard | 1 |
Phần mềm
Thư viện DHT 11 và ESP8266Wifi
Sơ đồ nguyên lý
Thực hiện kết nối như sơ đồ nguyên lý ở trên
NodeMCU | DHT11 |
Vin | VCC |
GND | GND |
D3 | Data Out |
Lấy API Key
1. Truy cập vào trang web https://thingspeak.com/ và tạo một tài khoản nếu bạn chưa có. Sau khi đã có tài khoản, bạn đăng nhập vào tài khoản.
2. Tạo một kênh mới bằng cách nhấp vào nút New Channel.
3. Nhập các thông tin cơ bản cho kênh. Cuối cùng, chọn Save Channel.
4. Channel ID là con số để nhận dạng kênh của bạn. Bạn nên ghi lại con số này. Để lấy API key, bạn hãy nhấp vào tab API Keys. Tại đây, bạn copy API Key để sử dụng sau này.
Lập trình
Một khi phần mạch đã được thực hiện xong, điều tiếp theo bạn cần làm là lập trình cho NodeMCU. Bạn tham khảo chương trình dưới đây.
// Chương trình đơn giản tải dữ liệu nhiệt độ và độ ẩm lên thingspeak.com
#include <DHT.h>
#include <ESP8266WiFi.h>
// Thay xxxx bằng thingspeak API key của bạn, sau đó thay ten_wifi và mat_khau
String apiKey = “xxxx”;
const char* ssid = “ten_wifi”;
const char* password = “mat_khau”;
const char* server = “api.thingspeak.com”;
#define DHTPIN 0 // Chân kết nối với DHT11
#define DHTTYPE DHT11 // Loại cảm biến là DHT11
DHT dht(DHTPIN, DHT11);
WiFiClient client;
void setup() {
// Khởi tạo Serial với tốc độ baud 115200
Serial.begin(115200);
delay(10);
// Khởi tạo DHT
dht.begin();
// Kết nối wifi
WiFi.begin(ssid, password);
// In thông tin
Serial.println();
Serial.println();
Serial.print(“Đang kết nối … “);
Serial.println(ssid);
//Kiểm tra kết nối
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(“.”);
}
Serial.println(“”);
Serial.println(“WiFi đã kết nối”); //Báo kết nối thành công
}
void loop() {
// Đọc nhiệt độ độ ẩm từ DHT11
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println(“Không đọc được dữ liệu từ cảm biến DHT11!”);
return;
}
if (client.connect(server, 80)) { //server thingspeak là “184.106.153.149” hoặc api.thingspeak.com
// Gửi dữ liệu lên thingspeak ở field1 và field2
String postStr = apiKey;
postStr += “&field1=”;
postStr += String(t);
postStr += “&field2=”;
postStr += String(h);
postStr += “\r\n\r\n”;
client.print(“POST /update HTTP/1.1\n”);
client.print(“Host: api.thingspeak.com\n”);
client.print(“Connection: close\n”);
client.print(“X-THINGSPEAKAPIKEY: ” + apiKey + “\n”);
client.print(“Content-Type: application/x-www-form-urlencoded\n”);
client.print(“Content-Length: “);
client.print(postStr.length());
client.print(“\n\n”);
client.print(postStr);
Serial.print(“Nhiệt độ: “);
Serial.print(t);
Serial.print(” oC, Độ ẩm: “);
Serial.print(h);
Serial.println(“%. Gửi dữ liệu lên Thingspeak”);
}
client.stop();
Serial.println(“Vui lòng đợi…”);
// Đợi 20s rồi gửi tiếp dữ liệu
delay(20000);
}
Kết quả
Nếu bạn thực hiện đúng theo các bước hướng dẫn ở trên thì sau nạp chương trình cho Arduino bạn sẽ thấy nhiệt độ và độ ẩm được cập nhật lên thingspeak như hình bên dưới.
Mỗi khi dữ liệu được tải lên thành công, thông báo được hiển thị trên Serial Monitor.
Nếu bạn gặp khó khăn trong quá trình thực hiện thì vui lòng để lại bình luận bên dưới bài viết này. Chúc các bạn thành công!