#include <WiFi.h> // thêm thư viện WIFI cho kết nối mạng
#include "DHT.h" // thêm thư viện cho cảm biến DHT
#include "ThingSpeak.h" // thêm thư viện cho việc gửi dữ liệu lên ThingSpeak
#define DHTTYPE DHT22 // định nghĩa sử dụng cảm biến DHT22
#define DHTPIN 15 // định nghĩa chân kết nối cảm biến 15
DHT dht(DHTPIN,DHTTYPE); // tạo dht từ thư viện DHT.h để truy cập đọc nhiệt độ và độ ẩm từ cảm biến DHT22
//định nghĩa các chân GPIO cho các led
const int LED_RED = 21;
const int LED_BLUE = 18;
const char* WIFI_NAME = "Wokwi-GUEST"; // WiFi SSID
const char* WIFI_PASSWORD = ""; // WiFI Password
const int myChannelNumber = 2544816; // số kênh ThingSpeak liên kết
const char* myApiKey = "0IBFNQBZ8IDET1BT"; // ThingSpeak API key
const char* server = "api.thingspeak.com"; // Địa chỉ máy chủ ThingSpeak
WiFiClient client; // tạo client wifi
void setup() {
Serial.begin(115200); // Khởi tạo giao tiếp Serial với tốc độ 115200bps
//thiết lập chân LED_RED và LED_BLUE là OUTPUT
pinMode(LED_RED, OUTPUT);
pinMode(LED_BLUE, OUTPUT);
dht.begin(); //khởi động cảm biến DHT
WiFi.begin(WIFI_NAME, WIFI_PASSWORD); //Kết nối với mạng WIFI
while (WiFi.status() != WL_CONNECTED) // chờ đến khi kết nối WIFI thành công
{
delay(1000);
Serial.println("Wifi not connected"); // in ra thông báo không kết nối WIFI được
}
Serial.println("Wifi connected !"); //in ra thông báo WIFI đã được kết nối
Serial.println("Local IP: " + String(WiFi.localIP())); // in ra địa chỉ IP
WiFi.mode(WIFI_STA); // đặt chế độ WIFI thành Station Mode - kết nối với một điểm truy cập (AP) đã xác định trước
ThingSpeak.begin(client); // khởi động ThingSpeak
}
void loop()
{
//đọc dữ liệu từ cảm biến DHT22
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// điều khiển bật led đỏ cảnh báo khi nhiệt độ >50 hoặc <-20 và led xanh khi độ ẩm >70
if(temperature >50 || temperature<-20)
digitalWrite(LED_RED,1);
else digitalWrite(LED_RED,0);
if(humidity >70)
digitalWrite(LED_BLUE,1);
else digitalWrite(LED_BLUE,0);
// gửi dữ liệu lên ThingSpeak
ThingSpeak.setField(1,temperature); // field 1 trong dữ liệu được gửi lên ThingSpeak là nhiệt độ
ThingSpeak.setField(2,humidity); // field 2 trong dữ liệu được gửi lên ThingSpeak là độ ẩm
// gửi dữ liệu lên ThingSpeak và kết quả lưu trữ trong biến status
int status = ThingSpeak.writeFields(myChannelNumber,myApiKey);
if(status == 200) // trong giao thức HTTP 200 là mã trạng thái thành công,nếu gửi dữ liệu thành công lên ThingSpeak
{
Serial.println("Data pushed successfully"); // in ra thông báo "Data pushed successfully" đã gửi thành công lên ThingSpeak
}
else // nếu có lỗi trong quá trình gửi
{
Serial.println("Push error" + String(status)); // in ra thông báo "Push error" cùng với mã trạng thái nhận được từ máy chủ ThingSpeak để hiển thị lỗi cụ thể
}
Serial.println("Temp: " + String(temperature, 2) + "°C"); // in ra giá trị nhiệt độ lên Serial Monitor với định dạng 2 chữ số thập phân
Serial.println("Humidity: " + String(humidity, 2) + "%"); // in ra giá trị độ ẩm lên Serial Monitor với định dạng 2 chữ số thập phân
Serial.println("---"); // in ra --- phân tách các lần đo
delay(5000); // delay 5s
}