#include <WiFi.h>
#include <HTTPClient.h>
#include <DHT.h> // Thư viện cảm biến DHT
#include <ThingSpeak.h> // Thư viện ThingSpeak
// Cấu hình DHT
#define DHTPIN 4 // Chân GPIO của ESP32 được kết nối với DATA của cảm biến DHT
#define DHTTYPE DHT22 // Loại cảm biến DHT đang sử dụng là DHT22
DHT dht(DHTPIN, DHTTYPE); // Tạo đối tượng DHT với cấu hình trên
// Cấu hình kênh ThingSpeak
#define SECRET_CH_ID 2782718 // ID của kênh ThingSpeak
#define SECRET_WRITE_APIKEY "GEK65XJVN96ME8JQ" // paste API Key channel của bạn
// Kết nối wifi cho esp32
const char* ssid = "Wokwi-GUEST"; // Tên WiFi
const char* password = ""; // Mật khẩu
// Cấu hình địa chỉ server ThingSpeak
const char* server = "http://api.thingspeak.com"; // URL của trang server ThingSpeak
const char* apiKey = "GEK65XJVN96ME8JQ"; // paste API Key channel của bạn
void setup() {
Serial.begin(115200);
dht.begin();
WiFi.begin(ssid, password); //kết nối WiFi
Serial.print("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
}
void loop() {
// Đọc dữ liệu từ cảm biến DHT
float t = dht.readTemperature(); // đọc nhiệt độ từ cảm biến và gán vào biến t
float h = dht.readHumidity(); // đọc độ ẩm từ cảm biến và gán vào biến th
if (isnan(h) || isnan(t)) //kiểm tra xem dht22 có đọc được hay không
{
Serial.println("Failed to read from DHT sensor!"); //báo Failed khi lỗi
delay(1000);
return;
}
else //thực hiện đọc
{
//in ra nhiệt độ và độ ẩm từ DHT22
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" degrees Celcius, Humidity: ");
Serial.print(h);
//gán các giá trị vaof các field trên channel ThingSpeak
String url = String(server) + "/update?api_key=" + apiKey +
"&field1=" + String(t) + // Gán giá trị nhiệt độ vào field1
"&field2=" + String(h); // Gán giá trị độ ẩm vào field2
// Khởi tạo HTTPClient và gửi yêu cầu GET
HTTPClient http; // Tạo đối tượng HTTPClient để gửi yêu cầu HTTP
http.begin(url); // Cấu hình URL cho đối tượng HTTP
int httpResponseCode = http.GET(); // Gửi yêu cầu HTTP GET đến URL và nhận mã phản hồi
// Kiểm tra mã phản hồi từ server
if (httpResponseCode > 0) { // Nếu mã phản hồi lớn hơn 0, yêu cầu thành công
Serial.println("Data sent successfully.");
}
delay(5000);
} // Dữ liệu đã gửi thành công
}