David Lin

David Lin

一個軟體工程師的隨意筆記

05 Jun 2021

用 Arduino IDE 玩 Raspberry Pi Pico

用了 MicroPython v1.15 一陣子之後,可以總結出一些優缺點:

優點:

  1. 直譯式語言:只要自己打一些 script 就可以馬上看到結果,不用編譯與刷機
  2. 彈性:可以在檔案系統內放幾個 python 程式碼,當作動態的模組管理
  3. 語法好看 XD

缺點:

  1. 速度較慢
  2. 變數容易被 corrupt
  3. 有些 library 沒有寫好,傳入參數格式或數目錯誤會造成奇怪的問題(有時還會造成第2個問題…)
  4. 有時候會當掉,需要拔掉 USB 重插

對我而言,最後三個缺點讓人無法接受,一個平台常自爆會讓開發速度下降, 而且無法保證之後的 production 穩定性。

所以… 我決定就改用 C/C++ 寫 Pico 程式。 (真的很不情願啊,因為每次刷機都要按住 BOOTSEL 按鈕很煩啊… XD)

既然決定改用 C/C++,可以順便嘗試看看用 Arduino IDE 去開發 Pico 程式吧。

Setup

首先,先把 RP2040 boards 設定檔安裝到 Arduino IDE 上,讓 Arduino 可以認得 Pico。 在這裡我不使用 Arduino 官方的 RP2040 ,而是使用 arduino-pico,原因是它對於 RP2040 boards 的支援比較完整。

先在 Arduino IDE 上的 Preferences 上設定 Additional Boards Manager URLs 欄位, 把 https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json 加進去。

additional

然後去 Boards Manager 上安裝 Raspberry Pi Pico/RP2040,注意不要跟 Arduino Mbed OS RP2040 Boards 搞混。

boardmgr

設定好 RP2040 Boards 之後,先試玩一下 Blink 範例程式確認一下它是不是可以正常運作。

// Blink Example
// From http://www.arduino.cc/en/Tutorial/Blink
// License: Public Domain

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

先用 Verify 去嘗試編譯看看,感覺上花的時間比 AVR 還久。

編譯之後訊息為:

Sketch uses 55784 bytes (2%) of program storage space. Maximum is 2093056 bytes.
Global variables use 12116 bytes (4%) of dynamic memory, leaving 250028 bytes for local variables. Maximum is 262144 bytes.

看起來有成功了

Upload to Pico

第一次透過 Arduino 上傳 Sketch 到 Pico 時候,需要先按住 BOOTSEL 進入虛擬磁碟模式, 讓 arduino-pico 先安裝一下 bootloader。之後上傳 Sketch 就不需要做同樣的動作了, 因為 arduino-pico 有 auto-reset 功能可以代勞。

第一次 upload 之後,Arduino 上的 board 選單就有顯示出 pico 的類型了:

board-menu

查看一下 Board Info 可以看到一些資訊:

board-info

Result

上傳之後,板子上面的 LED 就有閃爍了,符合 Blink Sketch 的預期。 話說 LED_BUILTIN 所指的數值跟 Arduino Nano 不同,因為位在不同的 pin。

總而言之,Raspberry Pi Pico 可以使用 Arduino 工具與 Libraries, 這對於開發程式幫助很大。

References

comments powered by Disqus