#include <Wire.h>
#include <LiquidCrystal_I2C.h> // 引用 LCD I2C 函式庫
#include "DHT.h" // 引用 DHT 函式庫
// 設定 DHT 參數
#define DHTPIN 2 // DHT 資料接腳連到 Arduino Pin 2
#define DHTTYPE DHT22 // 如果你選用 DHT11 請改為 DHT11
// 初始化 DHT
DHT dht(DHTPIN, DHTTYPE);
// 初始化 LCD,設定 I2C 位址為 0x27,螢幕為 16 行 2 列
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// 啟動序列監控視窗 (除錯用)
Serial.begin(9600);
Serial.println("系統啟動中...");
// 啟動 DHT 感測器
dht.begin();
// 啟動 LCD
lcd.init();
lcd.backlight(); // 開啟背光,很重要!
// 顯示開機畫面
lcd.setCursor(0, 0); // 設定游標在第 0 行, 第 0 列
lcd.print("Weather Station");
lcd.setCursor(0, 1);
lcd.print("Starting...");
delay(2000); // 等待 2 秒
lcd.clear(); // 清除螢幕
}
void loop() {
// 讀取溫濕度需要一點時間,這裡設定延遲 2 秒
delay(2000);
// 讀取濕度
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;
}
// 在序列視窗印出數據 (方便電腦端檢查)
Serial.print("濕度: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("溫度: ");
Serial.print(t);
Serial.println(" *C");
// --- 顯示於 LCD ---
// 第一行顯示溫度
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(t);
lcd.print(" C");
// 第二行顯示濕度
lcd.setCursor(0, 1);
lcd.print("Humi: ");
lcd.print(h);
lcd.print(" %");
}