#include <WiFi.h>// khai báo thư viện
#include "DHT.h"
#include "ThingSpeak.h"
#include <LiquidCrystal_I2C.h>
#define DHT_PIN 15// khai báo chân dữ liệu dht
#define LED_PIN 13// khai báo led
#define WIFI_NAME "Wokwi-GUEST" // khai báo mạng WIfi kết nối
#define WIFI_PASSWORD ""//passwowrd wifi
#define myChannelNumber 2380659 // channel ID của project
#define myApiKey "YMWAFGIHP1W8J062"// API keys của project
#define server "api.thingspeak.com"// địa chỉ server của Thingspeak
#define DHTTYPE DHT22 // Khai báo kiểu cảm biến là DHT22
DHT dht(DHT_PIN, DHTTYPE); //Khởi tạo đối tượng cảm biến DHT.
WiFiClient client;// tạo đối tượng wifi
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
Serial.begin(115200);// thiết lập tốc độ baud trong Serial
dht.begin();// cài đặt DHT22 đọc dữ liệu
pinMode(LED_PIN, OUTPUT);// cho ngõ ra của led
WiFi.begin(WIFI_NAME, WIFI_PASSWORD);// kết nối Wifi
while (WiFi.status() != WL_CONNECTED){// kiểm tra trạng thái của wiffi đã kết nối chưa và xuất thông báo ra Serial.
delay(1000);
Serial.println("Wifi not connected");
}
Serial.println("Wifi connected !");
Serial.println("Local IP: " + String(WiFi.localIP()));// in địa chỉ IP của mạng
WiFi.mode(WIFI_STA); //Đặt chế độ WiFi là Station (kết nối vào mạng).
ThingSpeak.begin(client);// Bắt đầu kết nối với ThingSpeak sử dụng đối tượng client đã khởi tạo.
lcd.init(); //Khởi động LCD
lcd.backlight(); //Mở đèn
lcd.setCursor(0,0);
lcd.print("HUM:");
lcd.setCursor(0,1);
lcd.print("TEMP:");
}
void loop() {
float doam = dht.readHumidity(); //Đọc độ ẩm
float nhietdo = dht.readTemperature(); //Đọc nhiệt độ C
// Kiểm tra cảm biến có hoạt động hay không
if (isnan(doam) || isnan(nhietdo))
{
Serial.println("Không có giá trị trả về từ cảm biến DHT");
return;
}
//TempAndHumidity data = dht.getTempAndHumidity();// cho DHT đọc dữ liệu thông qua biến data
ThingSpeak.setField(1,nhietdo);// upload dữ liệu lên thingspeak về nhiệt độ
ThingSpeak.setField(2,doam); // upload dữ liệu lên thingspeak về độ ẩm
int x = ThingSpeak.writeFields(myChannelNumber,myApiKey);// viết dữ liệu thông qua API và ID, kết quả trả về trạng thái HTTP và gán vào X.
Serial.println("Temp: " + String(nhietdo, 2) + "°C");// in nhiệt độ ra Serial
Serial.println("Humidity: " + String(doam, 1) + "%");// in độ ẩm ra Serial
Serial.println("---");
lcd.setCursor(5,0); //con trỏ vị trí số 7, hiện ô số 8
lcd.print(doam);
lcd.setCursor(11,0); //Con trở ở vị trí 12, hiện ô 13
lcd.print("%");
lcd.setCursor(6,1);
lcd.print(nhietdo);
lcd.setCursor(12,1); //Con trở ở vị trí 12, hiện ô 13
lcd.print("oC");
delay(1000);
}