#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// --- 根據你的接線定義腳位 ---
#define DHTPIN 15 // 你把 DHT22 接在右下角的 15 號腳位
#define DHTTYPE DHT22
// ESP32 的 I2C 預設腳位通常是 SDA=21, SCL=22
// 你的連線看起來正是接在 21 和 22
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200); // ESP32 慣用 baud rate 為 115200
dht.begin();
// 初始化 I2C (指定 SDA=21, SCL=22)
Wire.begin(21, 22);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("ESP32 Sensor OK");
delay(2000);
lcd.clear();
}
void loop() {
// 讀取溫濕度
float h = dht.readHumidity();
float t = dht.readTemperature();
// 檢查讀取是否成功
if (isnan(h) || isnan(t)) {
Serial.println("讀取失敗,請檢查 DHT22 接線!");
lcd.setCursor(0, 0);
lcd.print("Sensor Error! ");
} else {
// 輸出到序列埠 (Serial Monitor)
Serial.printf("溫度: %.1f°C, 濕度: %.1f%%\n", t, h);
// 顯示到 LCD
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(t, 1);
lcd.print(" C "); // 多加空白可以清除殘留字元
lcd.setCursor(0, 1);
lcd.print("Humi: ");
lcd.print(h, 1);
lcd.print(" % ");
}
delay(2000); // 兩秒讀取一次
}