前幾天提到 ESP 開發板,至於開發工具則大推 VSCode + PlatformIO,我會陸續分享使用技巧與心得。

有用過 Visual Studio Code 又有 Arduino/ESP 開發經驗的同學,憑著 PlatformIO 關鍵字及直覺,應該能自己摸索出安裝及操作方式(至少我自己是如此),若想看教學,推薦 Random Nerd Tutorial 這篇 - Getting Started with VS Code and PlatformIO IDE for ESP32 and ESP8266 (Windows, Mac OS X, Linux Ubuntu),雖然是英文的,但圖文並茂且英文淺顯,加上步驟詳細,就算看圖說故事也能懂。

裝好 VSCode、PlatformIO,試跑 Arduino 界的 Hello World,就能開始享受 VSCode + PlatformIO 的美好開發體驗囉~:

void loop()
{
  digitalWrite(LED_BUILTIN, LOW);
  delay(200);
  digitalWrite(LED_BUILTIN, HIGH);
  delay(200);
}

如果你有多塊不同種類的開發板,這個小技巧還蠻實用的。像我這陣子常會交互測試 Arduino UNO、ESP8266 跟 ESP32,用 Arduino UNO 是因為教學最多,找到現成範例確認元件功能正常,再移到 ESP 測試,便會有同一支程式部署到不同開發板的需求。

Arduino IDE 操作介面有選單可動態改變開發板種類:

但 PlatformIO 做法不太一樣,新增 PlatformIO 專案時需指定 Board (開發板型號)、Framework (例如:Arduino 或 ESP-IDF):

如果我一開始是用 NodeMCU 1.0 (ESP-12E Module) 測 ESP8266 測試,開發到一半想試試程式在 ESP32 跑有沒有問題,該做麼做?

PlatformIO 有 UI 可以更改專案對映的 Board、Framework (如下圖),但如果要反覆測試多種開發版(例如:ESP8266 跟 ESP32,確認程式寫法兩容),一直改來改去有點沒效率。

針對這種常見應用情境,PlatformIO 的做法是允許專案擁有多組環境設定,編譯上傳時再選擇使用硬體。

做法是手動修改 platformio.ini。如下圖,你可以在專案目錄找到它(下圖 1 所指處),點選後在右邊編輯視窗進行修改:

上圖 2 所指 [env:nodemcu-32s] 是我手動加上的,原本只有 [env:nodemcuv2],由於有多組 env,最上方 [platformio] 的 default_envs 與批次處理有關,等下再介紹。要注意輸入的設定寫法必須正確,否則可能導致程式無法編譯。若不知道不同開發板的設定值要怎麼寫,一個簡單做法是另個開新專案設好 Board、Framework,加好 Library 測試 OK 再參考它的 platformio.ini 寫法,這樣最萬無一失,做個幾次,後來多半能徒手修改。

關於 platformio.ini 的寫法,官方有說明文件 - “platformio.ini” (Project Configuration File) 可以參考。

為專案設定多組環境後,測試時可點選下方狀態列的目前環境設定(1),上方將出現環境設定清單(2)讓你切換環境設定:

這樣子就可以快速切換不同開發板進行測試囉。

最後介紹一個強大功能,程式改完可不可以一次針對張開發板編譯,甚至同時上傳到不同開發板上跑看看呢?步驟是:(1) 先在前面提到 default_envs 指定多組環境設定,(2) 按左側的 PlatformIO 圖示帶出 PlatformIO 選單,(3) 選 Build All,(4) 在 Terminal 視窗可以看到兩種開發版都完成編輯。在環境設定指定好 COM Port,還可以在編譯後直接上傳,甚至開啟序列埠監視器觀察,稍加設計要實現自動測試也不是問題,是開發專業程式的夢幻功能呀~ (但跨開發板的眉角還挺多的,以後再聊)

玩了幾天 VSCode + PlatformIO,由於功能多複雜度高,確實要花點時間摸索,但兵器都需要練習才能上手,未來若上場殺敵,我會希望帶手上拿的是這把烏茲衝鋒槍。至 Arduino IDE,謝謝你帶我進入 Arduino 世界,以後有空再找你玩。

Tips of how to using the multiple environment setting of PlatformIO to test different Arduino/ESP boards quickly.


Comments

# by freder

可以試試Arduino IDE 2.0,雖現在仍是beta版

Post a comment