ESP32 DHT22 + Telegram
僅當溫濕度有變化時才傳送至 Telegram
//僅當溫濕度有變化時才傳送至 Telegram
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <DHT.h>
// WiFi 資訊
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Telegram Bot 資訊
// Initialize Telegram BOT
#define BOT_TOKEN "80239106815:AAE0KApbm5Ng001VCvO57JWA_XKtbx6a4IXM"
// your Bot Token (Get from Botfather)
// Use @myidbot to find out the chat ID of an individual or a group
// Also note that you need to click "start" on a bot before it can
// message you
#define CHAT_ID "7926523182469"
// DHT 感測器設定
#define DHTPIN 15 // GPIO15 可更換
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Telegram 通訊
WiFiClientSecure secured_client;
UniversalTelegramBot bot(BOT_TOKEN, secured_client);
// 發送時間控制
unsigned long lastSendTime = 0;
const unsigned long sendInterval = 3000; // 3 秒
// 新增儲存上一筆數據的變數
float lastTemp = NAN;
float lastHum = NAN;
//===========================================================
void setup() {
Serial.begin(115200);
dht.begin();
// 連接 WiFi
WiFi.begin(ssid, password);
Serial.print("連線中");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi 已連線");
// 啟用不安全連線(略過 SSL 憑證驗證)
secured_client.setInsecure();
// 初始訊息
bot.sendMessage(CHAT_ID, "ESP32 啟動完成,開始回報溫濕度。", "");
}
//===========================================================
void loop() {
unsigned long now = millis();
if (now - lastSendTime >= sendInterval) {
lastSendTime = now;
float t = dht.readTemperature();
float h = dht.readHumidity();
if (isnan(t) || isnan(h)) {
Serial.println("讀取 DHT22 失敗");
return;
}
// 如果數據變化才傳送
if (t != lastTemp || h != lastHum) {
lastTemp = t;
lastHum = h;
String msg = "溫濕度變化:\n";
msg += "溫度:" + String(t, 1) + " °C\n";
msg += "濕度:" + String(h, 1) + " %";
Serial.println("變化 -> 傳送");
bot.sendMessage(CHAT_ID, msg, "");
}
}
}
//===========================================================


沒有留言:
張貼留言