iT邦幫忙

2026 iThome 鐵人賽

DAY 28
0
自我挑戰組

無硬體也能玩物聯網!使用 Wokwi 模擬器與 MicroPython 打造 30 天 ESP32 實務系列 第 28 篇

MicroPython 程式碼重構——使用 Class 封裝感測器邏輯

  • 分享至 

  • xImage
  •  

今日目標
今天我們要進入進階的軟體工程領域——物件導向程式設計。我們將學習如何使用 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 的封裝,我們成功將硬體細節隱藏在類別內部,讓主程式變得非常優雅。這不僅提升了程式碼的可維護性,也為我們邁向專業的軟體工程打下了穩固基礎。


上一篇
模擬 MQTT 發送——將感測器數據格式化為 JSON 字串
下一篇
MicroPython 在 ESP32 上的記憶體管理與常犯錯誤踩坑紀錄
系列文
無硬體也能玩物聯網!使用 Wokwi 模擬器與 MicroPython 打造 30 天 ESP32 實務 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言