#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
// ตั้งค่าคอนสตานต์
#define DHTPIN 4 // เปลี่ยนเป็นพินที่เชื่อมต่อ DHT22
#define DHTTYPE DHT22
#define LINE_NOTIFY_TOKEN "YOUR_LINE_NOTIFY_TOKEN" // แทนที่ด้วย token ของคุณ
// กำหนดค่าของเซ็นเซอร์
DHT dht(DHTPIN, DHTTYPE);
// ตั้งค่า WiFi
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";
// ตั้งค่า LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // ใช้ address 0x27 และขนาด 16x2
// ตั้งค่าเวลา
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP);
unsigned long previousMillisTemp = 0;
unsigned long previousMillisHumidity = 0;
unsigned long previousMillisLCD = 0;
const long intervalTemp = 30 * 60 * 1000; // 30 นาที
const long intervalHumidity = 30 * 60 * 1000; // 30 นาที
const long intervalLCD = 10 * 1000; // 10 วินาที
void setup() {
Serial.begin(115200);
dht.begin();
lcd.begin();
lcd.backlight();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to WiFi");
timeClient.begin();
timeClient.setTimeOffset(25200); // +7 ชั่วโมง (GMT+7)
}
void loop() {
unsigned long currentMillis = millis();
// ตรวจสอบเวลาสำหรับการส่งการแจ้งเตือน
if (currentMillis - previousMillisTemp >= intervalTemp) {
previousMillisTemp = currentMillis;
float temperature = dht.readTemperature();
if (temperature > 26) {
sendLineNotify("Temp is high: " + String(temperature) + "C");
}
}
if (currentMillis - previousMillisHumidity >= intervalHumidity) {
previousMillisHumidity = currentMillis;
float humidity = dht.readHumidity();
if (humidity < 40) {
sendLineNotify("Humidity is low: " + String(humidity) + "%");
} else {
sendLineNotify("Temp & Humidity is normal");
}
}
// อัพเดทจอ LCD
if (currentMillis - previousMillisLCD >= intervalLCD) {
previousMillisLCD = currentMillis;
timeClient.update();
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" C ");
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println(" %");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(humidity);
lcd.print(" %");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("FM Temp");
lcd.setCursor(0, 1);
lcd.print(timeClient.getFormattedDate());
}
}
void sendLineNotify(String message) {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin("https://notify-api.line.me/api/notify");
http.addHeader("Authorization", "Bearer " + LINE_NOTIFY_TOKEN);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
String postData = "message=" + message;
int httpCode = http.POST(postData);
if (httpCode > 0) {
String payload = http.getString();
Serial.println(payload);
} else {
Serial.println("Error on HTTP request");
}
http.end();
} else {
Serial.println("Error: WiFi not connected");
}
}