Raspberry Pi Picoの2つのArduinoサポートを比較

Raspberry Pi PicoはArduino環境で開発することもできる。Raspberry Pi Pico用のボードサポートパッケージはArduino公式版以外にフィルハワー伯爵版(?)なるものが存在するようだ。

公式版はMbedの上にArduinoの皮かぶせたちょっとやっつけ仕事気味なかんじなのに対して、伯爵版はC/C++SDKベースで作られておりむしろ公式版よりしっかりしてるように感じる。詳しく見てみよう。

f:id:licheng:20211127164900j:plain:w500

Arduino公式版

Arduino公式でサポートしているため、「追加のボードマネージャのURL」を設定する必要は無い。ボードマネージャで pico と入力すれば Arduino Mbed OS RP2040 Boards というのが見つかるので、これをインストールする。するとボードの選択メニューに Arduino Mbed OS RP2040 Boards が追加される。

インストールされたパッケージのソースを覗いてみよう。
Winsowsなら %LOCALAPPDATA%/Arduino15/packages/arduino/hardware/mbed_rp2040 にある。

どうもMbed OSの上にArduino APIのラッパーをかぶせているようだ。ちょっと雑な作りのように感じる。利点としてはMbedのAPIをスケッチから直接呼び出すことも可能だが、それなら最初からMbedで開発すればいいじゃないかと思う。Mbedのマルチスレッド機能(Threadクラス)は使えないようだ。

また、Servo, EEPROM, SoftwareSerial といったおなじみのライブラリが使用できない。特にServoをサポートできないはずがないのでちょっと手抜きではないかと思う。

C/C++SDKAPIをスケッチから直接呼び出すことも可能だ。Mbed OS自体がC/C++SDKをベースに移植されているので、まあ当然と言える。C/C++SDKAPIを使えばデュアルコアを活用した並列処理は可能なようだ。(multicore_launch_core1関数)

Earle Philhower版

もう一つのサポートは Earle F. Philhower, III氏が公開しているものだ。 冒頭でフィルハワー伯爵と書いたが、Earleは伯爵(Earl)ではなくてファーストネームか。アール・F・フィルハワー3世、いったい何者だろう?

こちらは「追加のボードマネージャのURL」にURLを追記する必要がある。

https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json

ボードマネージャで pico と入力すれば Raspberry Pi Pico/RP2040 というのが見つかるので、これをインストールする。するとボードの選択メニューに Raspberry Pi Pico RP2040 Boards が追加される。もちろん、公式版とは共存可能だ。

インストールされたパッケージのソースを覗いてみよう。
Winsowsなら %LOCALAPPDATA%/Arduino15/packages/rp2040/hardware/rp2040 にある。

こちらはC/C++SDKベースに作られている。C/C++SDKAPIをスケッチから直接呼び出すことももちろん可能だ。また、setup1()loop1() という関数を書けばコア1で実行される。setup()loop() はコア0で実行されるので、これによって並列処理が簡単に書ける。

また、公式版では使えなかった Servo と EEPROM がこちらでは使える。SoftwareSerialは使えないが、まあ個人的には要らないと思っている。ちなみにハードウェアシリアル通信は、SerialがUSBシリアルで、Serial1Serial2がUARTとなる。

気になるのが個人による開発という点で、今後ちゃんと保守されるのかという心配はある。しかしすでにかなり広く使われているようである。また、前述の通りそもそも個人の趣味と思えないような仕事である。アール・F・フィルハワー3世、いったい何者だろう?

所感

まだ実際に動かしてみたわけではないのだが、ソースをざっと眺めたかぎりでは伯爵版に軍配を上げたい。(もう伯爵版と呼ぶことにする。) 共存可能なので両方インストールしてしばらく様子を見ることにする。