本文旨在說明《超圖解ESP32應用實作》程式碼更新支援EPS32 Arduino開發環境3.x版,並提供Arduino IDE 2.x版的操作說明,以及ESP32 SPIFFS分區資料上傳工具的安裝與操作。
Arduino IDE 2.x版的ESP32開發環境安裝說明
底下是Arduino IDE 2.x版的操作介面外觀:
按一下左側的「開發板管理員」,搜尋“esp32”,可找到兩種ESP32開發環境,其中一個由Arduino官方維護,另一個由ESP32晶片設計,樂鑫信息科技(Espressif Systems)維護。
Arduino IDE 2.x和1.x版共用相同的開發環境資源,如果你的電腦有安裝1.x版以及ESP32開發環境,以上畫面會顯示已安裝的訊息。請點擊「更新」,更新到最新版本。
如果是全新安裝,請點擊底下那一個,樂鑫信息科技提供的版本。
如果「開發板管理員」搜尋不到樂鑫信息科技的ESP32版本,請選擇主功能表「檔案 / 喜好設定」,在底下的「其他開發板管理員網址」欄位,輸入:” https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json”,然後按下「確定」。
選擇ESP32開發板和序列埠
把ESP32開發板接上電腦,以“LOLIN 32”開發板為例,點擊IDE上方選單中的「選擇其他開發板及連接埠」選項:
然後在底下的面板中搜尋esp32,並點選它所在的連接埠,再按下「確定」,即可進行開發。
更新ESP32 Arduino開發環境3.x版的程式敘述
ESP32 Arduino開發環境3.x版的某些語法和2.x版不相容,主要差異是設定和輸出PWM訊號的語法,相關說明請參閱「使用ESP32 Arduino開發平台3.x版製作呼吸燈效果」。
在1.x和2.x版,設定與輸出PWM訊號的語法如下:
ledcSetup( PWM通道, 頻率, 位元數 ); ledcAttachPin( PWM腳, PWM通道 ); ledcWrite(PWM通道, PWM輸出值);
第3.x版的語法改成:
ledcAttachChannel( PWM腳, 頻率, 位元數, PWM通道 ); ledcWrite(PWM腳, PWM輸出值);
目前仍有許多程式採用2.x版的語法,也不是所有開發人員都升級到最新版本。為了讓原始碼兼容不同版本,ESP32 Arduino開發環境內建的esp_arduino_version.h標頭檔,定義了判斷ESP32 Arduino開發環境版本的巨集:ESP_ARDUINO_VERSION_VAL,透過此巨集判斷開發環境版本是否大於或等於3.0的敘述如下:
#if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 0) // 編譯3.0版以上的程式敘述 #else // 編譯2.x版或1.x版的程式敘述 #endif
因此,底下的敘述將依據開發環境的版本,自動編譯合適的PWM設定和輸出敘述:
#if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 0) ledcAttachChannel( PWM腳, 頻率, 位元數, PWM通道 ); // 3.x版的語法 ledcWrite(PWM腳, PWM輸出值); #else ledcSetup( PWM通道, 頻率, 位元數 ); // 2.x版的語法 ledcAttachPin( PWM腳, PWM通道 ); ledcWrite(PWM通道, PWM輸出值); #endif
ESP32開發環境的Arduino.h標頭檔有引用esp_arduino_version.h,所以我們編寫的Arduino程式可直接執行上面的前置處理器指令。以《超圖解ESP32應用實作》第一章的diy1-1.ino檔為例,修改後的原始碼如下:
#define THERMO_PIN 36 // 熱敏電阻分壓輸入腳 #define HEATER_PIN 33 // 陶瓷加熱片的 PWM 輸出腳 #define ADC_BITS 10 // 類比輸入解析度 10 位元 #define INTERVAL_MS (5 * 60 * 1000L) // 5 分鐘 #define PWM_CHANNEL 0 // PWM 通道 const uint16_t PWMs[] = { 30, 0, 60, 0, 90, 0 }; // PWM 值 // PWM 值的數量 const uint8_t TOTAL_PWMs = sizeof(PWMs) / sizeof(PWMs[0]); uint16_t power = 0; // PWM 的輸出值 uint32_t prevTime; // 前次時間 // 熱敏電阻值轉換成攝氏溫度值 float readTemp(float R0 = 10000.0, float beta = 3950.0) { int adc = analogRead(THERMO_PIN); // 讀取熱敏電阻感測值 float T0 = 25.0 + 273.15; // 轉換成溫度值 float r = (adc * R0) / ((1 << ADC_BITS) - 1 - adc); // 傳回攝氏溫度 return 1 / (1 / T0 + 1 / beta * log(r / R0)) - 273.15; } void setup() { Serial.begin(115200); pinMode(HEATER_PIN, OUTPUT); power = PWMs[0]; // 讀取第 1 筆 PWM 值 Serial.printf("PWM:%d", power); analogSetAttenuation(ADC_11db); // 設定類比輸入上限 3.6V analogReadResolution(ADC_BITS); // 設定 ADC(類比轉數位)的解析度 #if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 0) // 以下兩行適用於ESP32開發平台3.x版 ledcAttachChannel(HEATER_PIN, 1000, 8, PWM_CHANNEL); // 接腳, 頻率, 解析度, 通道 ledcWrite(HEATER_PIN, power); // 開始加熱 (接腳, 工作週期) #else // 以下三行適用於ESP32開發平台2.x版 ledcSetup(PWM_CHANNEL, 1000, 8); // 設置 PWM:通道 0、1KHz、8 位元 ledcAttachPin(HEATER_PIN, PWM_CHANNEL); ledcWrite(PWM_CHANNEL, power); // 開始加熱 #endif prevTime = millis(); // 紀錄前次時間 } void loop() { static uint8_t index = 0; // PWM 陣列的索引 uint32_t now = millis(); if (index < TOTAL_PWMs - 1) { // 每隔 5 分鐘測量一次溫度,並輸出下一個 PWM 值 if (now - prevTime >= INTERVAL_MS) { prevTime = now; power = PWMs[++index]; float temp = readTemp(); // 取出下一筆 PWM 值 // 取得感測溫度值 Serial.printf(", 溫度:%.2f\n", temp); #if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 0) // 底下敘述適用於ESP32開發平台3.x版 ledcWrite(HEATER_PIN, power); // 開始加熱 #else // 底下敘述適用於ESP32開發平台2.x版 ledcWrite(PWM_CHANNEL, power); // 開始加熱 #endif Serial.printf("PWM:%d", power); } } }
書本的範例原始檔已全數更新,請讀者重新下載,非常感謝本書的編輯黃昕暐先生在假日協助處理。
下載與安裝Arduino IDE的外掛工具
《超圖解ESP32應用實作》第四章的動態PID調整網頁,透過一個Arduino IDE外掛工具(Arduino ESP32 filesystem uploader),把網頁檔案寫入ESP32的快閃記憶體,該工具僅支援Arduino IDE 1.x版。
支援Arduino IDE 2.2.1或更高版本的上傳資料檔案外掛工具是“arduino-spiffs-upload”(目前最新的發行版),也需要另行安裝,請點擊下載.vsix副檔名的檔案,其他是此外掛工具的原始碼,無需下載。
Arduino IDE的外掛工具的安裝路徑,位於使用者家目錄的“.arduinoIDE/plugins”路徑;第一次安裝外掛工具之前,需要自行新增“plugins”資料夾,在Windows系統中,此路徑是:
“%HOMEPATH%\.arduinoIDE”
請在此路徑中新增“plugins”資料夾:
然後把剛才下載的外掛(此例為:arduino-spiffs-upload-1.1.5.vsix檔)存入plugins資料夾:
外掛安裝完畢,請先重新Arduino IDE。
在macOS安裝Arduino IDE的外掛工具
在macOS系統桌面(Finder)按下⌘ + Shift + G鍵,或選擇「前往→前往檔案夾」命令,然後輸入“~/.arduinoIDE”路徑,然後按下Enter鍵:
在.arduinoIDE檔案夾內,新增一個“plugins”檔案夾,然後把之前下載的外掛(此例為:arduino-spiffs-upload-1.1.5.vsix檔)存入plugins檔案夾。
外掛安裝完畢,請先重新Arduino IDE。
使用Arduino IDE 2.x版上傳資料檔案到ESP32或ESP8266的快閃記憶體(SPIFFS分區)
請先確認程式檔所在的目錄包含data資料夾:選擇「草稿碼 / 顯示草稿碼資料夾」,將能看到目前程式檔的資料夾。
若序列埠監控窗處於開啟狀態,請先關閉它,否則會出錯:
在IDE中按下Ctrl + Shift + P鍵(macOS請按下⌘ + Shift + P鍵),然後在‘>’提示字元後面輸入“upload”,它將提示”upload”開頭的命令:
點擊“Upload SPIFFS to Pico/ESP8266/ESP32”命令之後,將開始壓縮、上傳資料。
上傳完畢,開發板將自動重啟。
如果上傳檔案時出現如下錯誤,而你確定已選好序列埠,請關閉IDE再重開。