#include <Wire.h> // I2C 通訊基礎函式庫
#include <LiquidCrystal_I2C.h> // I2C LCD 函式庫
#include <DHT.h> // DHT 感測器函式庫
// --- 設定區 ---
#define DHTPIN 2 // DHT22 資料線接在數位腳位 2
#define DHTTYPE DHT22 // 指定感測器型號為 DHT22
// 設定 LCD 位址為 0x27,尺寸為 16x2
// (有些模組位址是 0x3F,模擬器通常用 0x27)
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600); // 開啟序列埠視窗監控數據
dht.begin(); // 啟動 DHT22
lcd.init(); // 初始化 LCD
lcd.backlight(); // 開啟 LCD 背光
lcd.setCursor(0, 0);
lcd.print("System Starting");
delay(1000);
lcd.clear();
}
void loop() {
// 讀取數據 (讀取間隔建議至少 2 秒)
float h = dht.readHumidity();
float t = dht.readTemperature();
// 檢查是否讀取失敗
if (isnan(h) || isnan(t)) {
Serial.println("無法讀取 DHT 感測器!");
lcd.setCursor(0, 0);
lcd.print("Sensor Error! ");
return;
}
// 1. 顯示到電腦序列埠監控視窗 (測試用)
Serial.print("溫度: ");
Serial.print(t);
Serial.print(" °C\t");
Serial.print("濕度: ");
Serial.print(h);
Serial.println(" %");
// 2. 顯示到 LCD 螢幕
lcd.setCursor(0, 0); // 第一行開頭
lcd.print("Temp: ");
lcd.print(t, 1); // 顯示到小數點後 1 位
lcd.print(" C");
lcd.setCursor(0, 1); // 第二行開頭
lcd.print("Humi: ");
lcd.print(h, 1);
lcd.print(" %");
delay(2000); // 暫停 2 秒再跑下一次循環
}