//Channel ID: 2768731
//API Key: Q85M31GQ4U5WMQUC
#include <WiFi.h>
#include <DHT.h>
#include "ThingSpeak.h"
// Cấu hình cảm biến DHT
#define DHT_PIN 23 // Chân GPIO của ESP32 được kết nối với cảm biến DHT
#define DHT_TYPE DHT22 // Loại cảm biến DHT sử dụng (DHT22)
DHT dht(DHT_PIN, DHT_TYPE); // Khởi tạo đối tượng DHT
// Cấu hình Wi-Fi và ThingSpeak
const char* WIFI_NAME = "Wokwi-GUEST"; // Tên mạng Wi-Fi
const char* WIFI_PASSWORD = ""; // Mật khẩu mạng Wi-Fi
const int myChannelNumber = 2768731; // ID của kênh ThingSpeak
const char* myApiKey = "Q85M31GQ4U5WMQUC"; // API Key để xác thực gửi dữ liệu
const char* server = "api.thingspeak.com"; // Máy chủ ThingSpeak
WiFiClient client;
void setup() {
Serial.begin(115200); // Khởi tạo Serial để in thông báo debug
// Khởi tạo cảm biến DHT
dht.begin();
// Kết nối Wi-Fi
WiFi.begin(WIFI_NAME, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Wifi not connected"); // Thông báo nếu chưa kết nối Wi-Fi
}
Serial.println("Wifi connected!"); // Thông báo kết nối Wi-Fi thành công
Serial.println("Local IP: " + String(WiFi.localIP())); // In địa chỉ IP cục bộ
// Cài đặt chế độ Wi-Fi và khởi tạo ThingSpeak
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
}
void loop() {
// Đọc nhiệt độ và độ ẩm từ cảm biến DHT
float temperature = dht.readTemperature(); // Đọc nhiệt độ (°C)
float humidity = dht.readHumidity(); // Đọc độ ẩm (%)
// Kiểm tra xem giá trị đọc có hợp lệ không
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!"); // Thông báo lỗi nếu không đọc được
delay(2000);
return;
}
// Cài đặt các trường dữ liệu cho ThingSpeak
ThingSpeak.setField(1, temperature); // Gửi nhiệt độ vào trường 1
ThingSpeak.setField(2, humidity); // Gửi độ ẩm vào trường 2
// Gửi dữ liệu lên ThingSpeak
int responseCode = ThingSpeak.writeFields(myChannelNumber, myApiKey); // Gửi dữ liệu
// Hiển thị thông tin debug
Serial.println("Temp: " + String(temperature, 1) + "°C"); // In nhiệt độ
Serial.println("Humidity: " + String(humidity, 1) + "%"); // In độ ẩm
if (responseCode == 200) {
Serial.println("Data pushed successfully"); // Thông báo nếu gửi thành công
} else {
Serial.println("Push error: " + String(responseCode)); // Thông báo lỗi nếu gửi thất bại
}
Serial.println("---");
delay(1000); // Đợi 1 giây trước khi lặp lại
}