from machine import I2C, Pin
import dht
import utime
from lcd_api import LcdApi # Wokwi 需手動加入 lcd_api.py
from i2c_lcd import I2cLcd # Wokwi 需手動加入 i2c_lcd.py
# ① I2C 匯流排初始化(頻率 400kHz = Fast Mode)
i2c = I2C(0, sda=Pin(20), scl=Pin(21), freq=400000)
# ② 位址掃描:找出 LCD 的實際 I2C 位址(必要步驟)
devices = i2c.scan()
if not devices:
print(" 未偵測到任何 I2C 設備,請確認接線")
else:
print(f" 偵測到 I2C 設備:{[hex(d) for d in devices]}")
LCD_ADDR = devices[0]
lcd = I2cLcd(i2c, LCD_ADDR, 2, 16) # 2 行、16 欄
# ③ DHT22 初始化(延用 Unit 02 知識)
sensor = dht.DHT22(Pin(14))
print(">>> LCD 儀表板啟動...")
while True:
try:
# ④ 讀取感測資料(三步驟,Unit 02 已學)
sensor.measure()
temp = sensor.temperature()
humi = sensor.humidity()
# ⑤ 更新 LCD 顯示
lcd.clear()
lcd.move_to(0, 0) # 游標移至第 1 行左端
lcd.putstr(f"Temp: {temp:5.1f} C") # 共 12 字元,右對齊留空
lcd.move_to(0, 1) # 游標移至第 2 行左端
lcd.putstr(f"Humi: {humi:5.1f} %")
# ⑥ 溫度警示:在第 1 行右側顯示狀態符號
lcd.move_to(14, 0)
if temp > 30:
lcd.putstr("!!") # 高溫警示
else:
lcd.putstr("OK")
except OSError as e:
lcd.clear()
lcd.move_to(0, 0)
lcd.putstr("Sensor Error")
print(f"感測器錯誤:{e}")
utime.sleep(2)