自分の構想では、分電盤センサはラズピコとラズパイがクライアントサーバ型で役割分担している。ということは、ラズピコとラズパイが通信をする必要がある。
ラズベリーパイPicoでUSBシリアル出力する
を参考にラズパイとラズピコをシリアル通信するプログラムを作っていた。
しかし、うまくいっていない。
実行自体はうまくいく。定期的にラズピコの電圧を読みだしているように見える。
しかし、きちんとプロセスを終わらせることができない。
また、起動方法も独特で、
Thonnyのmicro pythonモードでラスピコプログラムを実行
↓
タブを切り替えてpyhonモードにする
↓
ラズパイ側のプログラムを起動
である。
Thonnyの出力ウィンドウにはPythonのラズパイプログラム出力か、MicroPythonのラズピコプログラムどちらかの出力しか表示されないので、分かりにくい。
Thonnyでラズピコのプログラムを起動しつつ、コマンドプロンプトでラズパイ側のプログラムを起動する手を考えたがうまくいかなかった。コマンドプロンプト側でUSBにアクセスできないと怒られる。
いろいろ試してみる。
全開記事のサイトをもとに、ラズピコ側のプログラムをmain.pyとして保存。
Thonnyを一回落とし、USBケーブルを抜き差し。
→LEDチカチカ。プログラムが自動実行された!
この状態で、ラズパイのコマンドプロンプトからラズパイ側受信プログラムを実行すると、コマンドプロンプトにラズピコから送られてきた電圧値が表示された!
やった!
喜びもつかの間。困ったことに。これらのプログラムの終了方法である。
上記のサイト通りにラズピコに接続しても
Connecting to /dev/ttyACM0 (buffer-size 512)...
からつながらない。
Raspberry pi Pico 謎が解けた
のサイトどおりにやってもdevice is busyで怒られる。フラッシュボタンを押しても認識できない。うーん、どうしたものか。
ラズピコに書き込んだプログラムはバックアップを取っていないので、初期化することは避けたい。
いろいろなサイトを見て、書いてることを試して失敗した後、海外のBBSにたどり着いた。
Device is busy or does not respond - Raspberry Pi Pico
ここによると、バグかも。しかも修正版のリリースはまだ。BOOTSELボタンを押したまま起動し、ラズピコを再インストールするしかないのか。。。上記で作ったプログラムがすべて消えてしまう・・・
その後も粘って検索を続けたところ!
ラズピコのRUNピンとグラウンドをショートしてリセットを試したら、うまくできた!!
やり方はこう。
Thonnyを起動(MicroPythonモード)
↓
RUNピンとGNDをショート
↓
ラズピコが再起動
↓
ThonnyのシェルでBackend terminated or disconnected. Use 'Stop/Restart' to restart.というメッセージが出る
↓
そこでThonnyのSTOPボタンを押す
↓
ラズピコの動作が止まる(main.pyに仕込んでいたLEDチカチカがとまる)
↓
Thonnyのsaveウィンドウでラズピコのmain.pyを右クリックで削除
これでできた!