ubuntu上のArduino IDEでPico開発
せっかくArduino IDEをインストールしたので、Raspberry Pi Pico W もArduino IDEで開発できるように環境をセットアップしたいと思います。
公式の「Arduino Mbed OS RP2040 Boards」のインストール
「ファイル」-「基本設定」で「追加のボードマネージャのURL」に下記を追加します。
https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
こんな感じに入力して、「OK」をクリックします。
「ツール」-「ボード」-「ボードマネージャ」を選択すると、左側のペインに追加可能なボードの一覧が表示されるので、公式の「Arduino Mbed OS RP2040 Boards」と、別パッケージで「Raspberry Pi Pico/RP2040」がありますが、今回は公式の「Arduino Mbed OS RP2040 Boards」をインストールします。
公式の「Arduino Mbed OS RP2040 Boards」の最新は4.1.3でした。
今回はインストールしませんが、「Raspberry Pi Pico/RP2040」の最新は3.9.3のようです。
「インストール」ボタンをクリックするとインストールを開始します。
画面に右下の出力ウィンドウに「installed」が出力されれば完了です。
ボードの設定を行います。
「ツール」-「ボード」-「Arduino Mbed OS RP2048 Boards」-「Raspberry Pi Pico」
ポートの設定を行います。
「ツール」-「ポート」-「/dev/ttyACM0」
実行するサンプルコードを選択します。
「ファイル」-「スケッチ例」-「01.Basics」-「Blink」
サンプルコードをロードしました。
「→」をクリックして実行します。
がーん!なぜかエラーが…
原因の追究をしてみたが…
ツールのコンソール出力のエラー内容は
Failed uploading: uploading error: exit status 1
なのだが、ターミナルには下記のようなエラーも出力されていた。
level=error msg="Upload port detection failed, watcher closed" task=port_detection
やはり、この手のエラーはシリアル絡みだよなぁ。ということで、インストール時の手順を確認すると、Downloading and installing the Arduino IDE 2の最後に、udevのルールファイルの作成の記述があった。
/etc/udev/rules.d/99-arduino.rules
に、下記の内容を記述するらしい。
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", GROUP="plugdev", MODE="0666"
ただし、このudevのルールファイルを記述しても意味がないのだ。
それは、lsusbコマンドで確認してみると、ブートモードで装着時は
$ lsusb | grep 2e8a
Bus 003 Device 004: ID 2e8a:0003 Raspberry Pi RP2 Boot
MicroPythonインストール時は
$ lsusb | grep 2e8a
Bus 003 Device 003: ID 2e8a:0005 MicroPython Board in FS mode
というように、デバイスIDが異なっているため、このudevのルールは反応しない。
で、さらに調べるとインストール時の手順で
Configuring platform.
Please run as root
というメッセージが出力されていたので、下記のような対応が必要だったらしい。
$ sudo .arduino15/packages/arduino/hardware/mbed_rp2040/4.1.3/post_install.sh
ちなみに、post_install.sh が生成したファイルの中身はこんな感じ
$ cat /etc/udev/rules.d/60-arduino-mbed.rules
# Arduino Mbed bootloader mode udev rules
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2e8a", MODE:="0666"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", MODE:="0666"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1fc9", MODE:="0666"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0525", MODE:="0666"
ということで、デバイスIDの2e8aに対応できる、こちらならイケそうな気がするが…
残念。この対処でも書き込みに成功することはなかった…
「Raspberry Pi Pico/RP2040」のインストール
結局、公式の「Arduino Mbed OS RP2040 Boards」については、問題の原因特定ができずに断念しました。
次に、「Raspberry Pi Pico/RP2040」をインストールしてみました。
ボードの設定を行います。
今回はサポートボードの選択肢が非常に多いです。「Raspberry Pi Pico W」を選択します。
「ツール」-「ボード」-「Raspberry Pi Pico/RP2040」-「Raspberry Pi Pico W」
ポートの設定を行います。
今回は、「BOOTSEL」ボタンを押しながらUSBを挿入しました。
「ツール」-「ポート」-「UF2 Board」
なにもしない空のコードですが、書き込めるか試してみます。
おぉ、今回は無事に書き込めたようです。
再度、書き込む際はシリアルポートを選択します。
「ツール」-「ポート」-「/dev/ttyACM0(Degz Robotics Suibo RP2040, Generic RP2040, Generic Sea-Picro, Raspberry Pi Pico W)」
今度は、先ほど失敗した「Blink」をロードして書き込んでみます。
無事に書き込むことができました。
後日、公式版でエラーになって原因は探らないとですねぇ