公開日 2025年3月8日 最終更新日 2025年3月8日 by JE2UFF_Toshi
おはようございます。天気が崩れると言う予報でしたが、昨日は1日良い天気で気温も比較的高めな1日でした。今朝もそんなに悪くない天気ですね。暖かくなるかな。
D68Zをワッチしていても、相変わらず上手くデコードしません。とりあえずながらワッチに切替、信号が見えたらコールをしようと思っておりましたが、結局信号は数回しか見れませんでした。
ながら時間を有効に活用しようと、ジャンク箱に転がっていた古いラズパイ picoで何かしてみようと言う気になり、全て忘れてしまった設定等をネットで調べながら始めました。
昔、温湿度を自動計測してMySQLのDBに記録させるなんてことを考えたりもしましたが、全ては昔の話ですっかり忘れてしまいました。
今回挑戦しようと思ったのは、CI-Vのデータを吸い上げてまずはリアルタイムの周波数表示をさせようと思いました。
これは今まで作ったArduinoのアンテナ切替器の心臓部に当たる部分で、CI-Vのデータを活用することで、ICOM_BUSでは18/21MHzと24/28MHzの切り分けが出来ない事への対応です。
Arduinoは皆さんも沢山作っておられるので、ネット上に沢山の資料がありますが、ラズパイpico用の資料は殆ど見つかりません。
何故出来上がっているArduinoからラズパイpicoに変更しようかと思ったかと言うのは、動作スピードが全然違う事やメモリ容量も大きいからです。しかも、ボード自体の価格もオリジナル対比では半分以下、互換機よりも更にラズパイpicoの方が安価なんです。
と言う事で、言語をmicropythonに変えて挑戦です。
環境はこんな感じで、極めてシンプル。表示も今までのようにキャラクタLCDを使用すると場所を取るので、今回は手持ちのOLEDで表示させるようにしました。

そして今回、開発に対して非常に役に立ったのは生成AIです。micropythonのIDEを立上げて、平行して生成AIのCopilotを立ち上げます。
やりたいことを細かく仕様のように書き出し、Copilotに問い合わせます。Copilotはネット上の情報を集めながらサンプルコードを生成して教えてくれるので、それをmicropythonIDEにコピーして動作をさせていきます。
CopilotもCI-Vのコードを知っているようで知らない部分も沢山有るようなので、学習させるためにコードの構造や、周波数を受け取った場合には逆からデータを読む等都度説明してコードを修正していきました。
途中で自分も勉強するために、このコードは何をしているのか等問合せを行い、一様少しは理解しながら作業を進めていきました。
最初は全然違う周波数表示になったり、ブリンキングして2つの周波数を表示したりと大変でしたが、その都度仕様はこういうようにしたいが、実動作はこれこれこうなっている。違いはここなどと説明しながらデバッグを行っていきます。
なんとか周波数表示をするようになりましたが、VFOを回しても直ぐに表示が変わらない。バンドチェンジしても同じなので、リアルタイムに近い状態で表示が変わっていかないと意味が無い事を説明。
Copilotはこちらの要求を受け、プログラム内でウェイト時間を短縮する方法を提案して即座にコードを書き換えてくれます。
何回かCopilotと議論をしながらほぼリアルタイムに近い状態にまでなりました。その後、追加仕様で、最初の2バイトは00固定なので、その次の2バイトをチェックして、周波数をバンド変換して表示することを追加しました。
現状での最終はこんな感じで出来上がっています。

今まで作って使用しているアンテナ切替器より早く表示が切り替わります。流石ラズパイpico!
昼間からこんなことをやっていて、ここまで出来上がったら丁度EUがオープンする時間なので、作業は一旦ここで終了。
後は、GPとBCDとを接続するようなポート設定仕様を作成して、先のバンド表示から各バンド毎にBCDからデータがでるようになれば切替部分は完了になります。
残りは、どのアンテナリレーが動いているのかの情報をピックアップし、GPに入れてあげそのデータからOLEDにアンテナ番号表示をするようにすれば完了です。
Arduinoで作ったCTRL-UNITをこのラズパイpico仕様に切り替えれば、全ての作業が完了になります。
その前にもう少しmicropythonを理解しないとまずいよなぁ。
なんか作るって面白いですよね。無線をするのを忘れて、アッという間に時間が過ぎ去っていきます。だからものづくりって面白いんだよな。
