今週のお題「引っ越し」
はじめに
ここにたどり着いたと言うことは、おそらくラズパイOSでArduinoIDEを使って、Raspberry Pi Picoを使いたいのだが、スケッチが書き込めないと言ったお悩みではありませんか。
例えばこんなメッセージが表示されているとか。
Arduino:1.8.13 (Linux), ボード:"Raspberry Pi Pico"
最大16777216バイトのフラッシュメモリのうち、スケッチが13932バイト(0%)を使っています。
最大270336バイトのRAMのうち、グローバル変数が42780バイト(15%)を使っていて、ローカル変数で227556バイト使うことができます。
.....................
スケッチの書き込み中にエラーが発生しました
「ファイル」メニューの「環境設定」から
「より詳細な情報を表示する:コンパイル」を有効にすると
より詳しい情報が表示されます。
前提条件
・OSはRaspberry Pi OS Bullsyse 64ビット版です。
・Add/Remove SoftWareで、Arduino IDEがインストールされているものとします。
・ボードマネージャでArduino Mbed OS RP2040 Boards がインストールされているものとします。
手順
Arduino IDEのPico用のボードライブラリには、Arduino純正版と伯爵版があり、これはArduino純正版の操作説明になっています。では解決の手順を説明します。
1. 「おまじない」をかける
端末を開いてArduino IDEの post_install.sh を実行します。
$ cd ~/.arduino15/packages/arduino/hardware/mbed_rp2040/2.7.2
$ sudo ./post_install.sh
Reload rules...
(!) 2.7.2の部分は、Arduino IDEのバージョンで変わるので注意です。
(!) このおまじないはArduino IDEをインストールした最初だけでOKです。
(!) 2.7.2以降では改善されるかもしれません。
2 Arduino IDE でBlinkをコンパイル
実はArduinoでプログラムをコンパイルすると、.uf2ファイルがテンポラリディレクトリに作成されます。例えば Blink.ino だとテンポラリフォルダ
/tmp/arduino_build_206433/Blink.ino.elf.uf2
の下にコンパイル済みの実行形式が作成されています。
(!) /tmp/arduino_build_XXXXXXの部分は毎回変わります。
Arduino IDEから書き込みができなくても、コンパイルができていれば、
Blink.ino.elf.uf2
を、PicoをBOOTSELを押しながら、ラズパイのUSB端子に刺してマウントされたフォルダにコピーすればスケッチが書き込めます。
3. 認識を確認
Arduino IDEでシリアルが /dev/ttyACM0 (Raspberry Pi Pico)として認識されるはずです。ボード情報も表示されるはずです。
一度Arduino IDEからスケッチを書き込むと、ブートローダーも一緒に書き込まれているので、次回からはBOOTSELを押して認識させる必要はなくなります。
逆にBOOTSELを押して起動すると、USBメモリとしてマウントされてしまい、USBシリアルの/dev/ttyACM0 が認識されなくなります。
ちなみに中野島ロボットが使っているこのラズパイ用のケースの3Dモデルは、3Dモデル共有サイトで公開しています。
原因
Picoに何も書き込まれていないか、USBシリアルポートを使わないプログラムがArduinoIDE以外で書き込まれた場合は、USBシリアルが機能しないため、Arduino IDEから書き込めなくなっていました。今回の場合は、Raspberry Pi 財団の標準開発環境から書き込んだために発生していました。
おわりに
中野島ロボットの場合は、毎回Windowsで復旧させていました。ラズパイOSもBullsyse になって、Arduino IDEが普通にインストールできるようになっているので、これでRaspberry Pi Pico の開発環境もWindowsからラズパイに引っ越しできます。
やっぱりラズパイは甘くないですね。
おしまい
代替案 マイクロパイソンを一旦書き込む
1. おなじないをかける
pi@raspberrypi:~ $ sudo ~/.arduino15/packages/arduino/hardware/mbed_rp2040/2.7.2/post_install.sh
Reload rules...
2. マイクロパイソンを書き込む
https://www.raspberrypi.com/documentation/microcontrollers/micropython.html
の
https://micropython.org/download/rp2-pico/rp2-pico-latest.uf2
から
rp2-pico-latest.uf2 をダウンロードする。これが MicroPython の本体。
BOOT SEL を押しながらRPi4のUSBに刺すと、/media/pi/RPI-RP2 にマウントされる
そこにダウンロードした rp2-pico-latest.uf2 をコピーする
.uf2ファイルをコピーすると、自動で書き込んで、Pico が再起動する。
3. Arduino IDEでシリアルが /dev/ttyACM0 として認識されるはずです。
4. BOOTSELを押しながらUSBに刺すと認識する。
/dev/ttyACM0(Raspberry Pi Pico)と認識できるようになる。
5. Blinkを書き込む
(!)これだったら、マイクロ Python 使った方がいいですね。いやでもArduino IDEが使いたいんです。
参考情報
https://beta-notes.way-nifty.com/blog/2021/04/post-700a49.html
https://lipoyang.hatenablog.com/entry/2021/11/27/202142
購入品情報
ラズパイPicoの魅力は、デュアルコアの強力なプロセッサですが、チップにバグが多数あるので、その機能に当たるとなかなか厄介です。でもArduino IDEが使えるとなるとだいぶ楽になります。