ラズパイで自作ログを実装するにあたり、 いくつか注意しないといけないポイントがありましたので、下記にまとめます。
時刻:
NTPで同期しますが、立ち上げ時にネットワークに繋がらないと、時刻が正しくなりませんので、I2C接続のRTCを取り付けました。esp32を使って作った時は、直接プログラムに組み込んだクロックを同期させる方法を取りましたが、ラズパイは、システムの時刻をRTCを参照するように設定して、プログラムの方ではシステムの時刻をもらうという方法を取っています。
画面表示:
これまでと同様I2C接続のOLED2枚で画面の表示をさせています。一度高解像度のLCDを繋いだりしたのですが、パフォーマンスが低いので、これぐらいが快適と思います。
Python のドライバライブラリ(luma)を試したりしましたが、やはりパフォーマンスが大事とうことで、Arduinoで使われているu8g2をraspberry pi 向けにライブラリとして移植するものがありましたので、それが使いやすいと思って選択しました。
キーボード:
本体につけたUSBキーボードを/dev/input/event0 などから読みに行く方法で入力します。抜き差しをしても再接続できるようにしました。
無線機との接続:
USBで接続した際にデバイスの接続を切れたりした際に、再接続した際に問題なく利用できるようにするためには、接続断の際にエラーが出た際の処理が重要だということがわかりました(再接続時にデバイスが認識されないことがある)。エラーが出たらとりあえずclose して、時々(1秒ごと?)再接続にトライするという方法で対応しました。
他には3.5mmジャックでCI-VポートやCATポート(QRP Labs QCXなどで使用)も用意しましたが、ラズパイは使えるシリアルポートが少ないため、なかなか苦労します。シリアルUSB変換を使うと今度は後述のように、デバイスファイル名が一意に決まりにくいとか、いつでも利用できるわけでない問題がありますので、一長一短です。
また、USBシリアルが繋がるたびにどのようなファイルになるかわからないのでは使い物にならないため、デバイスのIDからシンボリックリンクを張る方法を使うことにしました。
CWキーイング:
マイコンでの実装では1msごとに割り込みをかけてその中でキーイングを制御していましたが、python で実装した際には、その割り込みインターバルが保証されていないため、場合によってキーイングの乱れがわかる程度に発生して、気持ち悪く感じましたので、ある程度余裕をもってキーイングを行うために、linux のアラームシグナルをインターバルとしていることは同じですが、Cでの実装でキーイングを行うことにしました。やっぱりここはマイコンベースが楽でいいですが、ラズパイ程度のパフォーマンスがあればほぼ問題ないように思いますので、まあ実用範囲内ではないかと思います。
といった注意点はあるものの、メモリ使い放題、ネットワークなどのプロトコル実装が安定しているというのは大きな利点です。
フィールドに持って行って無線機1台つないで、程度ですとesp32がベストと思いますが、ネットワークに繋いでクラスタの情報をもらったり、SO2R, 3Rをやろうなどと考えると、これくらいは必要かなという印象です。
また、USBデバイスへの対応なども、マイコンベースと比べて制約条件が少ないのはラクですね。
0 件のコメント:
コメントを投稿