Raspberry Pi PicoはArduino環境で開発することもできる。Raspberry Pi Pico用のボードサポートパッケージはArduino公式版以外にフィルハワー伯爵版(?)なるものが存在するようだ。
公式版はMbedの上にArduinoの皮かぶせたちょっとやっつけ仕事気味なかんじなのに対して、伯爵版はC/C++SDKベースで作られておりむしろ公式版よりしっかりしてるように感じる。詳しく見てみよう。
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++SDKのAPIをスケッチから直接呼び出すことも可能だ。Mbed OS自体がC/C++SDKをベースに移植されているので、まあ当然と言える。C/C++SDKのAPIを使えばデュアルコアを活用した並列処理は可能なようだ。(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++SDKのAPIをスケッチから直接呼び出すことももちろん可能だ。また、setup1() と loop1() という関数を書けばコア1で実行される。setup() と loop() はコア0で実行されるので、これによって並列処理が簡単に書ける。
また、公式版では使えなかった Servo と EEPROM がこちらでは使える。SoftwareSerialは使えないが、まあ個人的には要らないと思っている。ちなみにハードウェアシリアル通信は、SerialがUSBシリアルで、Serial1とSerial2がUARTとなる。
気になるのが個人による開発という点で、今後ちゃんと保守されるのかという心配はある。しかしすでにかなり広く使われているようである。また、前述の通りそもそも個人の趣味と思えないような仕事である。アール・F・フィルハワー3世、いったい何者だろう?
所感
まだ実際に動かしてみたわけではないのだが、ソースをざっと眺めたかぎりでは伯爵版に軍配を上げたい。(もう伯爵版と呼ぶことにする。) 共存可能なので両方インストールしてしばらく様子を見ることにする。