/*
功能:讀取環境溫溼度,如達警戒值,傳訊至Telegram Bot通知管理員
*/
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include "DHTesp.h" // 使用 DHT sensor library for ESPx 函式庫
//請修改以下參數--------------------------------------------
char SSID[] = "YourSSID"; // WiFi 帳號
char PASSWORD[] = "YourPassword"; // WiFi 密碼
String telegramToken = "7975600876:AAGqUO1YZHkAlSsmAj8q3JIKkgzZUWRpvmY";
String groupID = "-4685239917";
const int DHT_PIN = 32;
//---------------------------------------------------------
DHTesp dhtSensor; // DHT22物件
WiFiClientSecure client;
UniversalTelegramBot bot(telegramToken, client);
void setup() {
Serial.begin(115200);
// DHT22 初始化
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
//連線到指定的WiFi SSID
Serial.print("Connecting Wifi: ");
Serial.println(SSID);
//WiFi.begin(SSID, PASSWORD); // 以STA(網路終端)模式連接到WiFi基地台
WiFi.begin("Wokwi-GUEST", "", 6); // wokwi提供的虛擬 WiFi 接入點
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
//連線成功,顯示取得的IP
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
IPAddress ip = WiFi.localIP();
Serial.println(ip);
client.setCACert(TELEGRAM_CERTIFICATE_ROOT);
}
void loop() {
// 讀取溫度和濕度資料
TempAndHumidity data = dhtSensor.getTempAndHumidity();
// 判斷是否有正確讀取
if(dhtSensor.getStatus() != 0){
Serial.println("DHT sensor error status: " + String(dhtSensor.getStatusString())); // 回傳是 timeout 或是 checksum 錯誤
}else if (isnan(data.humidity) || isnan(data.temperature)){
Serial.println("Data is NaN!");
}else{
Serial.println("------------------");
Serial.println("Temperature : " + String(data.temperature, 2) + " °C"); // 參考語法 String(val, decimalPlaces)
Serial.println("Humidity : " + String(data.humidity, 2) + " %");
byte temperature = data.temperature;
byte humidity = data.humidity;
///////////////////////////////////////////////////////////////////////////////////////
if ((int)temperature >= 30 || (int)humidity >= 80) {
// 組成Telegram訊息內容
String message = "檢測環境發生異常,請協助儘速派人查看處理,目前環境狀態:";
message += "\n溫度=" + String(((int)temperature)) + " *C";
message += "\n濕度=" + String(((int)humidity)) + " H";
Serial.println(message);
bot.sendMessage(groupID, message);
}
}
//每5秒讀取一次溫濕度
delay(5000);
}