#include <WiFi.h>
#include <ThingSpeak.h> // Thư viện ThingSpeak
#include "DHT.h"
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
byte degree_symbol[8] = {
0b00111,
0b00101,
0b00111,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000
};
#define DHTPIN 5
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
#define LED 4
int inputPin = 2;
#define BUZZER_PIN 26
const char *apiKey = "HHJH4OX7O9BS8YZ3"; // Thay thế bằng API Key Write của bạn
const int channelID = 2346595;
const char *server = "api.thingspeak.com";
WiFiClient client;
// Hàm gửi dữ liệu từ cảm biến lên ThingSpeak
void sendSensor()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
int val = digitalRead(inputPin);
// Kiểm tra xem dữ liệu từ cảm biến có hợp lệ hay không
if (isnan(h) || isnan(t))
{
Serial.println("Failed to read from DHT sensor!");
return;
}
// Điều khiển đèn LED dựa trên giá trị đọc từ cảm biến chuyển động
if (val == HIGH)
{
digitalWrite(LED, HIGH);
}
else
{
digitalWrite(LED, LOW);
}
// Kích hoạt còi báo nếu nhiệt độ vượt quá 50 độ C
if (t > 50)
{
buzzBuzzer();
}
// Đặt giá trị cho từng trường dữ liệu trước khi gửi lên ThingSpeak
ThingSpeak.setField(1, t);
ThingSpeak.setField(2, h);
ThingSpeak.setField(3, val);
// Hiển thị dữ liệu trên Serial Monitor
Serial.print("Temperature : ");
Serial.print(t);
Serial.print(" Humidity : ");
Serial.println(h);
}
void setup()
{
Serial.begin(115200);
delay(1000);
// Kết nối WiFi
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// Khởi tạo kết nối ThingSpeak
ThingSpeak.begin(client);
// Thiết lập chân GPIO
pinMode(LED, OUTPUT);
pinMode(inputPin, INPUT);
// Khởi động cảm biến DHT22
dht.begin();
// Khởi tạo LCD
lcd.init();
lcd.backlight();
lcd.clear();
lcd.createChar(1, degree_symbol);
lcd.setCursor(0, 0);
lcd.print("Temperature: ");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
}
void loop()
{
// Gửi giá trị 1 để thể hiện kết nối với ThingSpeak
ThingSpeak.writeFields(channelID, apiKey);
// Gọi hàm để gửi dữ liệu từ cảm biến
sendSensor();
// Đọc giá trị nhiệt độ và độ ẩm từ cảm biến
float h = dht.readHumidity();
float t = dht.readTemperature();
// Hiển thị dữ liệu lên LCD
lcd.setCursor(12, 0);
lcd.print(t);
lcd.write(1);
lcd.print("C");
lcd.setCursor(12, 1);
lcd.print(h);
lcd.print("%");
// Kiểm tra trạng thái cảm biến chuyển động
int val = digitalRead(inputPin);
if (val == HIGH)
{
digitalWrite(LED, HIGH);
Serial.println("Motion detected!");
}
else
{
digitalWrite(LED, LOW);
Serial.println("No motion detected.");
}
// Kích hoạt còi báo nếu nhiệt độ vượt quá 50 độ C
if (t > 50)
{
buzzBuzzer();
}
delay(4000); // Đợi 4 giây trước khi lặp lại
}
// Hàm kích hoạt còi báo
void buzzBuzzer()
{
digitalWrite(BUZZER_PIN, HIGH);
delay(500);
digitalWrite(BUZZER_PIN, LOW);
tone(BUZZER_PIN, 1000, 500);
}