系統高手必修的模組設計習慣

模組設計習慣」是指在開發 MCU 或嵌入式系統時,將你的設計分為可重用、可維護、可擴展的單元(模組),不只是把程式寫對,更是把系統設計好

這種習慣會讓你從「寫功能」的階段,進化到「搭積木」的高手。


🧱 什麼是模組?

模組可以是:

類型範例功能
硬體模組OLED 顯示模組、DHT22、MP3 播放器提供具體輸入或輸出能力
軟體模組UART 控制、WiFi 網頁伺服器封裝某一類功能的程式代碼
系統模組音訊系統、感測系統、通訊系統整合數個硬體與軟體模組的組件

🔧 好的模組設計習慣具備:

1. 功能分離

  • 把顯示、感測、通訊、控制分成獨立檔案與邏輯區塊。
  • 例:oled.c, wifi_server.c, sensor_temp.c

2. 介面清晰

  • 模組提供標準函式如:
cCopyEditvoid oled_init();
void oled_print(const char* str);
float read_temperature();
  • 不對外暴露內部細節。

3. 可重用性

  • 一次寫好就能搬到下一個專案。
  • 例:UART 傳輸、SD 卡讀寫、JSON 解析等模組能跨專案使用。

4. 不互相耦合

  • oled.c 不應該直接呼叫 wifi_server.c,而是透過主程序中樞協調。

5. 初始化統一化

  • 每個模組都提供 init(),統一在 main() 中初始化:
cCopyEditvoid setup() {
  uart_init();
  oled_init();
  sensor_init();
}

🧠 範例:用 ESP32 做個智慧溫濕度顯示器

你的模組可能是這樣:

bashCopyEditproject/
├── main.c                    ← 主流程
├── wifi_server.c/h          ← 建立網頁伺服器
├── dht22_sensor.c/h         ← 溫濕度感測
├── oled_display.c/h         ← 顯示數據
├── web_ui/                  ← HTML 與 JS 檔案
└── utils.c/h                ← 共用工具(字串處理等)

這時你會發現:

  • main.c 像是調度中心(main loop),其他模組都自己完成初始化與任務。
  • 未來只要換成不同感測器,只需要換掉 dht22_sensor.c,其他都能重用。

✅ 為什麼這習慣重要?

傳統寫法模組化寫法
所有程式塞一個檔案每個功能拆成一個檔案
拿來一個範例就直接修改建立可重用模組
修改時可能影響整個系統模組間獨立,修改風險小
不易除錯、無法擴展清楚架構、容易維護與升級

✨ 建立模組習慣的起點

建議從你的下一個 MCU 專案開始:

  1. .h/.c 分離功能
  2. 每個模組有 init() 和一兩個對外函式
  3. 測試每個模組獨立功能是否能工作
  4. 用 main loop 統一調度