今日目標
今天我們要進入進階的軟體工程領域——物件導向程式設計。我們將學習如何使用 Class將感測器與執行器的邏輯進行封裝,讓程式碼變得模組化、乾淨且易於擴充。
程式碼
import time
import dht
from machine import Pin, I2C
import ssd1306
class WeatherSensor:
def init(self, pin_number):
self.pin = Pin(pin_number)
self.dht = dht.DHT22(self.pin)
self.temperature = 0.0
self.humidity = 0.0
def update(self):
try:
self.dht.measure()
self.temperature = self.dht.temperature()
self.humidity = self.dht.humidity()
return True
except OSError:
print("❌ 警告:DHT22 感測器讀取逾時或失敗!")
return False
class OLEDDisplay:
def init(self, scl_pin=22, sda_pin=21):
self.i2c = I2C(0, scl=Pin(scl_pin), sda=Pin(sda_pin), freq=400000)
self.oled = ssd1306.SSD1306_I2C(128, 64, self.i2c)
def show_dashboard(self, temp, hum):
self.oled.fill(0)
self.oled.text("OOP IOT SYSTEM", 0, 0)
self.oled.hline(0, 12, 128, 1)
self.oled.text(f"Temp: {temp:.1f} C", 0, 24)
self.oled.text(f"Humi: {hum:.1f} %", 0, 40)
self.oled.hline(0, 52, 128, 1)
self.oled.text("Status: Normal", 0, 56)
self.oled.show()
print("=== 物件導向架構 (OOP) 系統啟動 ===")
sensor = WeatherSensor(pin_number=15)
display = OLEDDisplay(scl_pin=22, sda_pin=21)
while True:
if sensor.update():
print(f"【OOP 讀取】溫度: {sensor.temperature}°C | 濕度: {sensor.humidity}%")
display.show_dashboard(sensor.temperature, sensor.humidity)
else:
print("讀取失敗,保持上次數值...")
time.sleep(2)
心得
今天我們把程式碼從「流水帳式」升級成了「模組化物件導向架構」。透過 Class 的封裝,我們成功將硬體細節隱藏在類別內部,讓主程式變得非常優雅。這不僅提升了程式碼的可維護性,也為我們邁向專業的軟體工程打下了穩固基礎。