新手必看!如何用 ESP32 函式模組化程式碼?從攝氏華氏轉換學起 發佈留言 / 作者: Brian / 2025-09-21 Table of Contents Toggle 前言:為什麼要學 ESP32 程式模組化?ESP32 簡介與開發環境設定程式模組化的概念與好處實作教學:攝氏與華氏溫度轉換範例建立自己的函式庫除錯與最佳化技巧模組化延伸應用總結:養成良好的程式架構習慣常見問題 FAQs參考資料 前言:為什麼要學 ESP32 程式模組化? 在寫 ESP32 程式時,如果一開始就把所有程式碼都塞在 setup() 與 loop() 中,很快就會變得難以閱讀、難以維護。模組化就像整理房間,把不同功能放進不同抽屜,找起來更快,也更容易擴充。 ESP32 簡介與開發環境設定 什麼是 ESP32?ESP32 是一顆集成 Wi-Fi 與藍牙功能的微控制器,性能比 Arduino UNO 更強大,非常適合物聯網專案。常見開發環境 (Arduino IDE / PlatformIO)多數新手會先從 Arduino IDE 開始,因為介面簡單。進階用戶可用 PlatformIO 管理多專案與套件。安裝與基本設定步驟在 Arduino IDE 安裝 ESP32 開發板支援,選擇正確的開發板與序列埠,即可開始撰寫程式。 程式模組化的概念與好處 什麼是模組化程式碼?模組化就是把重複或特定功能的程式片段抽出成「函式」或「模組檔案」,讓程式更清楚、更可重用。模組化在專案管理的優勢程式碼更易讀降低錯誤率減少重複撰寫方便團隊合作為何新手應從簡單範例練習?從攝氏轉華氏這種簡單邏輯入手,就能練習函式設計與模組化,先熟悉語法,再拓展到感測器或網路應用。 實作教學:攝氏與華氏溫度轉換範例 問題說明:為何需要溫度轉換?有些感測器回傳攝氏,有些回傳華氏;如果你要顯示或上傳雲端,常常需要轉換單位。傳統寫法:單一檔案的程式碼 void setup() { Serial.begin(115200); } void loop() { float celsius = 25.0; float fahrenheit = celsius * 9.0 / 5.0 + 32.0; Serial.println(fahrenheit); delay(1000); } 這樣寫雖然可行,但如果專案很大就不好維護。 進階寫法:用函式封裝轉換邏輯 // 宣告函式 float celsiusToFahrenheit(float celsius); float fahrenheitToCelsius(float fahrenheit); void setup() { Serial.begin(115200); float tempC = 30.0; float tempF = celsiusToFahrenheit(tempC); Serial.print("攝氏 "); Serial.print(tempC); Serial.print("°C = 華氏 "); Serial.println(tempF); float backToC = fahrenheitToCelsius(tempF); Serial.print("華氏 "); Serial.print(tempF); Serial.print("°F = 攝氏 "); Serial.println(backToC); } void loop() { } // 定義函式 float celsiusToFahrenheit(float celsius) { return (celsius * 9.0 / 5.0) + 32.0; } float fahrenheitToCelsius(float fahrenheit) { return (fahrenheit - 32.0) * 5.0 / 9.0; } 你應該會在”序列埠視窗”看到: 攝氏 30.00°C = 華氏 86.00°F 華氏 86.00°F = 攝氏 30.00°C 建立自己的函式庫 在 Arduino IDE 專案資料夾裡新建兩個檔案:TemperatureConverter.hTemperatureConverter.cpp 1. TemperatureConverter.h在右上角點擊”…”,選擇”新索引標籤”,名稱填上”TemperatureConverter.h”,就會多一標籤來,建上.h(標頭檔)裡宣告 #ifndef TEMPERATURE_CONVERTER_H #define TEMPERATURE_CONVERTER_H float celsiusToFahrenheit(float celsius); float fahrenheitToCelsius(float fahrenheit); #endif 2. TemperatureConverter.cpp在 .cpp (實作檔) 裡定義 #include "TemperatureConverter.h" float celsiusToFahrenheit(float celsius) { return (celsius * 9.0 / 5.0) + 32.0; } float fahrenheitToCelsius(float fahrenheit) { return (fahrenheit - 32.0) * 5.0 / 9.0; } 3. 在 .ino 主程式中引用: #include #include "TemperatureConverter.h" void setup() { Serial.begin(115200); float c = 20.0; float f = celsiusToFahrenheit(c); Serial.println(f); float back = fahrenheitToCelsius(f); Serial.println(back); } void loop() { } 重點:宣告 (declaration) 可以放在程式最前面,告訴 Arduino 這個函式存在。定義 (definition) 寫在程式後面,內容怎麼算。float celsiusToFahrenheit(float celsius)float = 傳回值型態celsiusToFahrenheit = 函式名稱(float celsius) = 參數 (輸入值) 除錯與最佳化技巧 常見錯誤與解決方式No such file or directory → 檢查檔案是否放在正確資料夾multiple definition → 確認函式沒有重複定義如何測試與驗證函式結果利用 Serial.print 或單元測試,輸出多組測試數據比對。 模組化延伸應用 把溫度轉換拓展到感測器讀值例如從 DHT11 或 DS18B20 讀取攝氏值,再用函式轉換華氏。結合 WiFi 傳輸溫度數據用 ESP32 WiFi 上傳到雲端(如 Blynk、Thingspeak),程式架構依然清晰。 總結:養成良好的程式架構習慣 從簡單範例開始練習函式封裝與模組化,可以讓未來專案更穩定、更容易擴充。ESP32 功能強大,如果搭配良好的程式架構,就能像搭積木一樣快速組合專案。 常見問題 FAQs Q1:模組化與物件導向有何不同?A:模組化偏重程式分檔,物件導向則是設計類別與物件,兩者可搭配使用。Q2:ESP32 的函式庫要放在哪裡?A:可放在 Arduino IDE 的 libraries 資料夾,或專案同層資料夾。Q3:要不要一開始就學 C++ 類別?A:新手可先從函式開始,再慢慢學類別,避免一次太多負擔。Q4:PlatformIO 與 Arduino IDE 差異?A:PlatformIO 更適合多專案管理與進階用戶,Arduino IDE 適合初學快速上手。Q5:模組化會不會讓程式變慢?A:不會。模組化只是分檔與函式呼叫,不會顯著影響效能。 參考資料 超圖解 ESP32 深度實作