#include <WiFi.h>// Thư viện để quản lý kết nối WiFi.
#include "DHTesp.h"// Thư viện để quản lý kết nối WiFi.
#include "ThingSpeak.h"//Thư viện để gửi dữ liệu đến ThingSpeak.
const char* WIFI_NAME = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
const int myChannelNumber = 2346271; //Số kênh của ThingSpeak để gửi dữ liệu đến.
const char* myApiKey = "JTZI1KMNVFGYOSIA";//Khóa API của ThingSpeak.
const char* server = "api.thingspeak.com";
int motion_sensor = 14;// chân cảm biến chuyển động là 14
int motion_data = 0;
const int DHT_PIN = 15; //Chân kết nối cảm biến nhiệt độ và độ ẩm DHT22.
int value0;
const int LED_G = 18;// led xanh lá chân 18
const int LED_R = 21;// led đỏ chân 21
const int LED_B = 19;// led xanh dương chân 19
DHTesp dht;
DHTesp dhtSensor;
WiFiClient client;
void setup() {
Serial.begin(115200); // Bắt đầu giao tiếp với Serial Monitor với tốc độ baud 115200
dhtSensor.setup(DHT_PIN, DHTesp::DHT22); // Khởi tạo cảm biến nhiệt độ và độ ẩm DHT22
pinMode(LED_G, OUTPUT); // Đặt chân LED_G là OUTPUT
pinMode(LED_R, OUTPUT); // Đặt chân LED_R là OUTPUT
pinMode(LED_B, OUTPUT); // Đặt chân LED_B là OUTPUT
WiFi.begin(WIFI_NAME, WIFI_PASSWORD); // Bắt đầu quá trình kết nối WiFi
while (WiFi.status() != WL_CONNECTED){
delay(1000);
Serial.println("Wifi not connected"); // In ra Serial Monitor nếu WiFi chưa kết nối
}
Serial.println("Wifi connected !"); // In ra Serial Monitor khi WiFi đã kết nối
Serial.println("Local IP: " + String(WiFi.localIP())); // In ra Serial Monitor địa chỉ IP cục bộ
WiFi.mode(WIFI_STA); // Thiết lập chế độ WiFi cho ESP8266
ThingSpeak.begin(client); // Khởi tạo ThingSpeak với đối tượng client
}
void loop() {
int motion_data = digitalRead(motion_sensor); // Đọc trạng thái cảm biến chuyển động
if (motion_data == HIGH) {
digitalWrite(LED_G, HIGH); // Bật đèn LED_G nếu cảm biến chuyển động được kích hoạt
} else {
digitalWrite(LED_G, LOW); // Tắt đèn LED_G nếu cảm biến chuyển động không được kích hoạt
}
Serial.print(motion_data); // In giá trị của cảm biến chuyển động ra Serial Monitor
Serial.print(" ");
TempAndHumidity data = dhtSensor.getTempAndHumidity(); // Đọc dữ liệu từ cảm biến nhiệt độ và độ ẩm
ThingSpeak.setField(1, data.temperature); // Đặt giá trị nhiệt độ vào trường 1 của ThingSpeak
ThingSpeak.setField(2, data.humidity); // Đặt giá trị độ ẩm vào trường 2 của ThingSpeak
ThingSpeak.setField(3, motion_data); // Đặt giá trị cảm biến chuyển động vào trường 3 của ThingSpeak
if(data.temperature > 50){
digitalWrite(LED_R, HIGH); // Nếu nhiệt độ lớn hơn 50°C, bật đèn LED_R
}
else{
digitalWrite(LED_R, LOW); // Ngược lại, tắt đèn LED_R
}
if(data.temperature < 0){
digitalWrite(LED_B, HIGH); // Nếu nhiệt độ nhỏ hơn 0°C, bật đèn LED_B
}
else{
digitalWrite(LED_B, LOW); // Ngược lại, tắt đèn LED_B
}
int x = ThingSpeak.writeFields(myChannelNumber, myApiKey); // Gửi dữ liệu đến ThingSpeak
Serial.println("Temp: " + String(data.temperature, 1) + "°C"); // In giá trị nhiệt độ ra Serial Monitor
Serial.println("Humidity: " + String(data.humidity, 2) + "%"); // In giá trị độ ẩm ra Serial Monitor
Serial.println("motion: " + String(motion_data, 3)); // In giá trị cảm biến chuyển động ra Serial Monitor
if(x == 200){
Serial.println("Data pushed successfully"); // In ra Serial Monitor nếu dữ liệu được gửi thành công
}else{
Serial.println("Push error" + String(x)); // In ra Serial Monitor nếu có lỗi khi gửi dữ liệu
}
Serial.println("---");
delay(1000); // Đợi 1 giây trước khi lặp lại quá trình
}