Upload nhiệt độ và độ ẩm lên Thingspeak dùng Arduino và NodeMCU

0
2889
Nhiệt độ và độ ẩm lên Thingspeak dùng Arduino và NodeMCU
Upload nhiệt độ và độ ẩm lên Thingspeak dùng Arduino và NodeMCU

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!

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây