[RASPBERRY PI] ラズパイとIC-705/IC-7300でFT8運用環境(JTDX)

【この記事の所要時間: 357秒】

先日作製したRaspberry Pi(以下、ラズパイと略)四号機を使ってFT8運用環境を構築した。

以前、同じくラズパイ(RasPad 3.0)を使ってIC-705向けに環境構築したが交信は未確認だったので、今回は実際に交信して運用状況を確認。

RasPad 3.0に比べて大幅にコンパクト化して持ち回りが容易になったので、IC-7300とも組み合わせて使えるように設定を確認し、そちらでも実交信で確認。

JTDXの設定(無線機、オーディオ)

とりあえず送受信に最低限必要となる項目(無線機、オーディオ)を設定。

IC-705

無線機設定
オーディオ設定

IC-7300

無線機設定 ※ストップビットが「1」になっているが「デフォルト」でも変わり無し
オーディオ設定 ※IC-705と同じ

IC-705/IC-7300ともにラズパイの同じUSBポートに接続しているが、無線機設定のCATコントロールとPTT方法のポートが異なっている。
オーディオ設定のサウンドカード入力/出力は両機種で同じだが、RasPad 3.0で構築した環境とはIC-705の設定が異なっている。(同じにするとオーディオ入出力エラーになる。)
謎(^^ゞ

お試し運用

屋外での運用を想定して構成したのが冒頭の写真。
IC-705、ラズパイ、mAT-705(オートアンテナチューナー)、iPad mini 5、iPhone 8の全てがバッテリー運用。
また、ラズパイは【クライアント】としてiPhone 8のインターネット共有でインターネットアクセス(eQSL.ccへの自動アップロード、PSKreporterへの自動報告)すると同時に【AP】としてiPad mini 5からVNC接続してJTDXを操作している。

ラズパイ(下)とmAT-705(上)
iPhone 8(インターネット共有でラズパイからインターネットアクセス)
iPad mini 5(ラズパイにVNC接続してJTDXを操作)
Alexloopアンテナ(屋内の窓からちょっと離れた所に設置)

IC-705とIC-7300を合わせて20局程と交信(全てCQ発出)させていただいた。
もちろん出力が大きく(50W)、小規模ながら屋外アンテナを繋いでいるIC-7300の方が応答率は高かったが、バッテリー駆動で出力を抑えて(2.5W/5W)、屋内に設置したループアンテナを繋いだIC-705も頑張った感じ。
ラズパイは4Bになって結構パワフルになったとはいえ、PCとしての相対的にはまだまだ非力…JTDXのデコード率向上の機能や設定を有効にするとLag値が大きく悪化するため(+二桁台に達することも)、極力シンプルな設定で試行した。

ラズパイ自身をクライアントとしてiPhone 8のインターネット共有を使用し、同時に、APとしてiPad mini 5からVNC接続する…という処理のおかげでこの運用環境を実現することが出来た。
このWi-Fiの二方向使用による操作感(レスポンス、転送速度)への影響はほぼ感じなかったが、バッテリーの消費は増しているだろう。
ただ、同様の処理を行うためにUSB接続のWi-Fi機器を繋ぐよりは少ないかな…と期待。

以前、WindowsPCで同様の環境を構築した際は、WSJT-X/JTAlert/JT_Linker/TurboHAMLOG/TQSLを組み合わせていたが、アプリ間の連携設定や操作、アップデートなどのメンテナンスがやや煩雑に感じていたので、今回は極力にシンプルな構成にしたく、JTDX/TQSLで完結。
JTDX自身にeQSL.ccとの連携(ログの自動アップロード)と局情報表示/通知機能が備わっているのが良かった。(もちろんJTAlertには及ばないけれども。)
ログはeQSL.ccとLotWで管理し、必要ならダウンロード/インポートすることにして、ローカルでは持たない。

さて、屋外運用の環境は出来たけれど…実践するのはいつになるやら。
当初思い立ったのはIC-705を入手した直後の長期連休(二年前か)、帰省の際に実家で運用すべく、ハード(ATU、Alexloopアンテナ)/ソフト(WindowsPC)を揃えたものの、時はコロナ禍の真っ只中で帰省自体が出来なくなり今に至る。
次の帰省(今年のG.W.)では実行に移すかな…。

[Raspberry Pi] 電子工作セット

【この記事の所要時間: 312秒】

先日組み上げたラズベリーパイ(以下、ラズパイと略)四号機では、簡単なものだけど初めてハードウェアとソフトウェアを自作した。

ハードウェアは、簡単とはいえ間違えればラズパイや接続するモジュールの破損を招く恐れが有るし、実際に四号機の製作ではRTCモジュールを一つダメにしている。
(恐らく何度か抜き差しした際に誤装着して逆電圧を掛けるなどしたのではないかと推察。)
また、従来のハンダ付けでは修正の手間が掛かるし、基板やパーツへの影響を考えると試行錯誤の限度も有る。
今回は非常に簡単な回路(とも言い難いレベル)だったが、以前ラズパイでの電子工作の勉強用に購入していた電子工作キットを使用して事前にチェックをした。

四号機の回路を再現

この記事を書くにあたって、四号機でチェックしていた時の回路を再現してみた。
タクトスイッチが二個(シャットダウン用、OLED表示用)、I2C接続モジュールが二個(RTC、OLED)という非常にシンプルな構成。
ちなみに、RTCは四号機で使用している物とは異なるが、基本的な仕様は同等。

揃えた物

電子工作キット(左上)、ジャンパワイヤーセット(右上)、RABホルダー(下)
電子工作キット

最初に購入したのが、この電子工作キット。
ハンダ付け不要で回路を作成出来るブレッドボードや、ラズパイのGPIOコネクタを延長するケーブル/コネクタ、各種パーツ(LED、抵抗、センサー、モーター、サーボ、スイッチ、ジョイスティック、LCD、等など)、ジャンパーワイヤ、がセットになった物。
Amazonを見ると複数のメーカー(ブランド)からパーツ構成が異なる様々なキットが有るが、このメーカー(SunFounder)は特にWebドキュメントが充実していることから選んだ。
Webドキュメントは日本語に完全対応しており、事例毎に回路図と実体配線図、CとPythonによるソースコード(ダウンロード可)と詳細な動作内容、が解説されている。
先日組み上げたロボットカー(PiCar-X)も同じメーカーで、こちらは未だ日本語対応していなくて英語だけど、大変判りやすいWebドキュメントが用意されている。

RABホルダー

ラズパイとブレッドボードを繋ぐ延長ケーブルは幅広のリボンタイプで結構腰が強いため、安定して置けるトレイの様な物が無いか…と探して見つけたのがこのRABホルダー。
単体でも売られているが、ブレッドボード(サイズが大きい方)とGPIO延長ケーブルが付属している物を購入。
ラズパイの他にArduino(Mega 2560/Uno)にも対応しており右上が装着スペースになっているが、そこに小さなサイズのブレッドボードを取り付けた。

Raspberry Pi 3B+

使用しているのはラズパイ3B+。
ほぼ全体を蔽うアルミ製ケース(ファンレス)を装着し、ジャンパーワイヤやパーツをうっかり落としてもショートなど起こし難いように保護している。

ジャンパーワイヤ

ジャンパーワイヤは電子工作キットの付属品に加えて追加で購入した物も有って嵩張るようになってきたため、市販のケースにまとめて収納。
結構絡むので、広くて浅いタイプのケースの方が良いかも。

[Raspberry Pi] GPIOの学習を兼ねて色々盛って作ってみた

【この記事の所要時間: 189秒】

昨年末頃から引き続き自分の中で盛り上がっているラズパイ弄り…年明け早々にロボットカーを作ったことで更に拍車が掛かってきた模様。

ロボットカーでは搭載されたセンサーやサーボなどを操作・制御して様々な動きをさせることが出来る。
これはこれで楽しいし、未だに全ての機能を使いこなせているわけでもないけれど、次は自分が考えた操作・制御をハードとソフトの両方から作り上げていく形で試したい。
と考えて、ふと欲しいと思った機能を持った(盛った)ラズパイ四号機を組み立てることにした。
ちなみに、一号機は色々使い回して今は電子工作用になっているラズパイ3B+、二号機はタブレット(RasPad3.0…4B)、三号機はロボットカー(PiCar-X…4B)になる。

希望機能
・バッテリーバックアップのRTC
・UPSとバッテリー
・CPU温度に応じて回転ON/OFFと回転速度を可変するクーリングファン
・OLEDで各種情報表示(IPアドレス、CPU温度とファンの稼動状況、バッテリー残量、他)
・シャットダウンボタン
・電源スイッチ
そして、出来るだけコンパクトな金属製ケースに収めたい。

希望機能から先ずは主要モジュール(ボード、HAT)を選定し、ダンボールなどでモックアップを作って大まかな容積を出し、更に各モジュール間の接続などを検討した上で、全てが無理なく収まるケースを調査。
並行して、外付けのスイッチ(電源用スライドスイッチ、操作用タクトスイッチ)やGPIO端子の引き出し、I2Cの延長と分岐(RTC、OLED)などを検討。

或る程度構想が固まった時点で必要な部材と工具を洗い出して発注…最近はAmazonを始めとして中国製の安価な部材や工具を良く見掛けるが、以前に比べると品質が大いに向上していて価格も安いので、こうした趣味の物作りには非常に嬉しい。
まぁ、中にはハズレも有ったりするけれど、流石に使い物にならないような物はもはや無く、ちょっとした不具合も安いので大目に見られるレベル、小物(ネジやスタンドオフなど)は元の量が豊富なので殆ど問題無し。

外観(斜め前方から)
外観(斜め後方から)

構想から約一ヶ月。
ハード(ハンダ付け、ケーブル作り、板金加工までも)、ソフト(情報収集・表示・制御用スクリプト)など、時々トラブルも遭ったけれど、かなり楽しんで進めることが出来た。
当初想定していた機能は全て実装出来、操作性もまぁまぁ、サイズは幅95×高さ50×奥行き65mmと結構コンパクトにまとめることが出来た。

使用部材

部材一式(ネジやスタンドオフ類を除く)

・左列上から:金属製ケース、ラズパイ4B、純銅製ヒートシンク
・中列上から:クーリングファンHAT、UPSモジュール、LiPoバッテリー(3.7V/4,000mAh)
・右列上から:RTC(DS3231、CR1220)、OLED(0.91インチ)、自作ケーブル類

金属製ケース

元々は背の高い冷却システム(大型ヒートシンク&クーリングファン)の搭載を想定したケースで高さ方向に結構余裕があり、今回の用途にピッタリ。
また、フットプリントはほぼラズパイサイズだけど、GPIOコネクタ側が広めになっていて、外付けスイッチ類を内蔵するのに良さそう。
尚、ラズパイ固定用のダボ(雌ネジ受け)は二箇所(写真下側)にしかなく、他方(写真上側)は各コネクタの出っ張りをケース側面に引っ掛けて支える構造になっている。
このままではラズパイに重ねて装着する各種モジュールやバッテリーの重さでコネクタへ大きな負担が掛かるため、ラズパイの下側に短い(5mm)スタンドオフを装着して支え、ケースには両面テープで固定することにした。
上からケースの蓋で押し付ける感じになるため、強固に固定する必要は無い。

純銅製ヒートシンク

一般的な貼り付けタイプのヒートシンクは意外と高さ(厚さ)があるため、上に重ねるモジュールとの干渉の恐れが有るし、干渉を回避しようと間隔を空けるとケース内に収まらない。
このヒートシンクは熱伝導性が良い純銅製で、薄い(2mm)ため他モジュールと干渉し難く、間隔を最小限に出来る。
四ヶ所をネジ留めするのでしっかり固定出来るのも良し。
ちなみに、ロボットカーでも使用しており、剥き出しなこともあってかラズパイ4Bでもファン無しで全く問題無し。

クーリングファンHAT

ラズパイのGPIOコネクタに装着してCPU温度によって回転を制御するタイプのHATは幾つか出ているが、これはGPIOコネクタを自分でハンダ付けするタイプのため、このような拡張基板を追加するのが容易。
(ファンのドライブ回路…トランジスタ、ダイオード、抵抗…も自分でハンダ付けする必要がある。)
また、基板の一角にユニバーサルエリアが有り、自作の回路(今回はI2Cの延長と分岐)を実装出来る。
尚、オリジナルのファンは大きくて(40mm角×厚さ10mm)、上に重ねる他モジュールと干渉するため、以前KiWiSDRに使った小型の物(30mm角×厚さ7mm)に交換した。

ファンのPWM制御にはGPIO18が使用されるが、UPSボードもシャットダウン信号の通知用に同じくGPIO18を使用するため、ファン側をGPIO19に変更している。
(UPSボード側でも無改造で変更出来るが、シリアル信号(二本)と合わせてシンプルに横並べしたかった。)
変更は、基板上に明記されたカット位置でパターンをカットして、それぞれ用意されたスルーホールを使ってストラップ(上の写真でファンコネクタの手前を通っている青色の配線)をするだけ。

RTCとOLEDを装着

ユニバーサルエリアへのI2C各信号はラズパイ(+3.3V、GND)とファンHAT内(SDA、SCL)から供給し、RTCはピンヘッダに直挿し、OLEDはケーブルで接続。

拡張基板

ラズパイ用ブレッドボードから切り出して作成した拡張基板には、各種スイッチとGPIOコネクタから引き出したピンヘッダ(使用するGPIO、+5V、+3.3V、GND)を装着している。
スイッチは左から、電源、シャットダウン(長押しでシャットダウン)、OLED表示(押すと一定時間表示)。

UPSボード

3.7VのLiPoバッテリーを接続し、外部給電(USB-C)されている時は機器への給電とバッテリーへの充電、外部給電が途切れるとバッテリーから機器へ給電し、その切替時は一切瞬断無し。
機器への給電はUSB-A(二系統)の他に、直接ラズパイのGPIOコネクタ(+5V、GND)経由で行う方法があり、今回は給電性能が高く、ケーブルの引き回しがコンパクトになる後者を採用。
シリアル通信でバッテリー残量/外部給電有無/出力電圧などの情報を取得することが出来る。
他には、UPSボード自身にも電源スイッチ(ボード右端)が搭載されているが、外部スイッチ用コネクタ(ボード右端)も用意されている。(自照LED用端子も有り。)
尚、シリアル通信/シャットダウン通知用と給電用のコネクタ(ボード中程に有る横に並んだ3pinと2pinの物)は装着されていないので(ピンヘッダ付属)、手持ちのパーツを使用した。

今回、各コネクタ付きケーブルは全てシリコン電線を使用。
軟らかくて取り回しがし易く、それでいて強く、耐熱性も良い。
電流量が多い(+5V、3A以上)給電部分は22AWG、その他は28AWGを使い分けている。
基板部分の配線(I2C)にはポリウレタン線を使用。

ハード組み上げ

ケースへの組み込み
ラズパイのインタフェース(給電用USB-Cは使わないためカバーを装着)
各種スイッチとOLED

各部材を下から積み上げる感じでケースに固定していくが、窮屈ではないが結構込み入っているため、まるでパズルのよう。
事前にケーブルの引き回しを試行錯誤したおかげでちょうど良い感じの長さになったと思う。
バッテリーの上に載っているのは、ケースとバッテリーの隙間を埋めるための熱伝導シート。
両面テープだと粘着力が強くて剥がすのが大変だけど、これは程良い粘着力だし、バッテリーの熱をケースに伝えて放熱にもなる。
ちなみに、UPSへの給電用USB-C端子と各種スイッチ類はそのままではケース側面に蔽われてしまうため、元々の開口部(OLEDが覗いている部分)を一部上に切り拡げた。
UPSに実装されている電源スイッチを使用せず外付けスイッチを付けたのも、同じくケース(蓋部分の側面)に蔽われてしまい、更にそちらは開口部の拡張が難しかったため。

ソフト(スクリプト)作り

これで一応ラズパイとしては普通に使えるけれど、予定機能を実現するためにはソフトの作成が必要。
ラズパイのプログラミングも今回の目標なので、早速Pythonでスクリプトを作ることにした。
ちなみに、Pythonに触れたのはほぼ初めてだったりする。
プログラミング自体が随分久しぶりだけど(ロボットカーではブロックを並べる仕組みなのでちょっと雰囲気が違う)、自分が作ったハード/ソフトが自分の思う通りに動くのはやはり感動する。
そこに至るまでの試行錯誤も面白い。

今回作成したスクリプトはシステムの起動時に自動実行し、そのまま常駐する。
⇒「/etc/rc.local」ファイルの末尾(「exit 0」の上)に「python3 “スクリプトファイル名” &」を追記して再起動。

実装機能:
・スクリプト起動時に(システムの)起動完了を通知する。
・一定間隔(現在約1分)でCPU温度を監視し、規定値(40℃)を超えたらファンが回転する。
温度上昇に応じて回転数を可変(温度上昇⇒回転数上昇)し、上限値(70℃)を超えたらフル回転する。
・一定間隔(現在約1分)でバッテリー残量を監視し、規定値(30%)を下回ったら警告メッセージを表示、下限値(5%)を下回ったらメッセージを表示してシャットダウンを実行。
 実はUPSボード自身にもバッテリー残量監視機能が有るが、「残量が無くなるとシャットダウン通知をする」(GPIO経由で通知し、ソフトで監視⇒シャットダウン処理)という仕様なので、明確な残量を指定して警告とシャットダウンを個別に行いたく自分で組むことにした次第。
・OLED表示ボタンが押されたら情報(IPアドレス、CPU温度、ファン回転ON/OFF、バッテリー残量、外部給電可否)を取得し、一定時間(約10秒)表示する。
・シャットダウンボタンが長押しされたらメッセージを表示してシャットダウンを実行。

あと、ラズパイの生存(正常動作中=非フリーズ状態)確認をどうしようかと思案していたが、通常は正常・異常(フリーズ)関係無く通電されていれば点灯しっぱなしのPWR LEDを、正常時は点滅・異常時は点灯したまま(heartbeat)にソフト設定だけで行えることを知り、早速適用。
スクリプトでシャットダウンした場合も、このPWR LEDの点滅が停まれば電源をOFFに出来る。
⇒「/boot/config.txt」ファイルに「dtparam=pwr_led_trigger=heartbeat」を追記して再起動。

起動完了
バッテリー残量警告
バッテリー残量不足⇒シャットダウン
手動シャットダウン
各種情報表示(外部給電可)
各種情報表示(外部給電不可)

新調した工具

今回新調した工具類(左から):
・ハンドニブラ(ニブリングツール)…ケース(1mm厚の鉄板)の開口部拡張用
・精密圧着ペンチ…コネクタの作成用
・ナットドライバ(3/16インチ)…M2.5スタンドオフの締緩用
・彫刻刀(三角、1.5mm)…プリントパターンのカット用

いずれも以前から欲しかった物で今回思い切って購入。
やはり工具が揃っていると作業が捗る…特に精密圧着ペンチはコレがあるおかげでケーブル作りが全く苦にならなかった。
余談だが、ナットドライバはAmazonで二本セットが単品(一本)より五割ほど安かった。

トラブル

ラズパイでハードを弄るのが初めてならPythonを使うのも初めて…当然全てが順調だったわけではなくて、ハード/ソフトで結構あちこち引っ掛かった。
トラブルシューティングは原因を突き止めて解決策を見出した時の達成感と爽快感があるので、さほど苦にならない(特に趣味だとね)。

  • RTCが認識出来なくなった
    最初は問題無く認識して時刻操作も正常に行えていたが、OLEDを追加すると認識が不安定になり、その内完全に認識しなくなってしまった。
    ⇒最初は普通に使えていたので初期不良ではなく、その後OLEDを追加する際に何度か外して付け替えていたので、もしかすると挿し間違えて逆電圧でも掛けてしまったのかもしれない。
  • タクトスイッチでチャタリングと誤認識が起こる
    一度押すと何度も押されたかのように認識したり、スイッチや接続しているGPIO端子を触れただけで押されたと認識してしまう。
    ⇒該当するGPIO端子のプルアップ設定を忘れるという実に単純なミス。
  • ラズパイの動作不安定
    ラズパイとUPSをシリアル接続しているとシリアル通信をしていなくてもラズパイが非常に不安定(極端に遅くなる、フリーズする)になってしまう。
    ⇒ラズパイの【Raspberry Piの設定】で【インターフェイス】の「シリアルポート」と「シリアルコンソール」の両方が有効になっていたため、試しに「シリアルコンソール」を無効にしたら解決したが、いずれちゃんと原因を調べよう。(試しにやって結果オーライでは成果にならない。)

さて

まだ初歩の初歩・基礎の基礎だけどラズパイのハードとソフト弄りのスタートを切った。
こうして組み上げた四号機の活用についてはまだスタート前。
さて、何に使おうか。
せっかくのバッテリー稼働とステータス表示があるので、屋外での単体使用に良さそう。
例えば…アマ無線のFT8運用とかね。

後日談①(Wi-FIのアクセスポートモード/クライアントモード同時対応)

屋外での単体使用・アマ無線のFT8運用…となると是非とも欲しい機能がある。
それは、Wi-Fiの二方向同時使用。
屋外&単体使用であればノートPCやタブレット、スマートホンで操作(VNC、SSH)することになり、その際にWi-Fiルータ等が必要だが、別持ちするのは嵩張るので避けたい。
また、FT8運用時には同時にラズパイからインターネットへのアクセスも行いたい。
インターネットアクセスは必須ではないが、交信直後にeQSLへのログのアップロード(⇒カード送付)を自動実行したり、PSKreporterへリアルタイムで情報提供する際には欠かせない。
それにインターネットアクセスが出来れば、NTPと同期してより正確な時刻補正が出来る。
USB接続のGPSレシーバーやIC-705内蔵のGPSを使えば、NTPが使えなくても正確な時刻補正が出来るけれど、内蔵RTCやNTPとの切替で挙動不審を起こしやすいという事例もあることから見送り。
現在は、NTPが利用出来る時はNTPがマスター/NTPが利用出来ない時はRTCがマスターになってシステムの時計を補正する構成にしている。(NTPがマスターの時はRTCの補正も行う。)

まずはラズパイをWi-Fiのアクセスポイントにすべく情報収集していると、アクセスポイントモード(AP、親機として他の端末を接続)とクライアントモード(STA、子機として他のAPに接続)の両方を、ラズパイ内蔵のWi-Fi機能だけで同時に実現する方法を発見。
早速導入…ラズパイをiPhone 8に接続(インターネット共有)してインターネットアクセスしつつ、ラズパイをアクセスポイントとして接続したiPad mini 5から操作(VNC、SSH)する環境が構築出来た。
もちろんiPhone 8の他に自宅のWi-Fiルータ(アクセスポイント)での使用もOK。
現在はiPhone8が最優先になっているため、自宅のWi-Fiルータに接続していてもiPhone8のインターネット共有を有効にして暫く経つと自動で切り替わっている。

ただ、クライアントモードでIPアドレスやDNSアドレスなどの設定を「自宅のWi-Fiルータ接続時は固定/iPhoneのインターネット共有接続時は未固定」と接続SSID毎に切り替える動作が未だ実現していない。
自宅ではVNCやSSHでの利便性を考えて設定を固定したいが、固定にするとiPhoneのインターネット共有で接続出来ているのにインターネットアクセスが出来ないという状態になってしまうため、現在はやむを得ず常に未固定にしている。
尚、アクセスポイントモードではIPアドレス固定で問題無い。

覚え書き(ヘッドレス&VNC操作時の低レスポンス回避)

作製した四号機はディスプレイなどを繋がないヘッドレスで、VNC経由での表示・操作がメイン。
暫く使ってみたところ、Chromium(標準でインストールされているWebブラウザ)が非常に重く、表示までに時間がかなり掛かる、スクロールバーを使ったスクロール操作に全く追従出来ない(というか殆ど動かない)、スクロールバーをクリック(タップ)して直接移動しても表示されるまでにかなり時間が掛かる。
また、文字入力でも一文字入力するのに秒単位で掛かるほどで、Googleなどの認証コード入力がタイムアウトになる始末。
ラズパイ4BでVNC経由の操作が遅いという記事は幾つか見掛けたが、同じラズパイ4Bを使っているRasPad 3.0では全く問題無く、内蔵ディスプレイはもちろんVNC経由でもスクロールバー操作でもスムーズに追従し、直接移動では即座に表示され、文字入力も問題無し。

Webブラウザ自体の問題だろうと考えて、軽いと評判のブラウザを試してみたものの、多少軽減はされるが軽さは全く感じられず。
しばらく悩んで、ふと気付いた…同じVNC経由でもRasPad 3.0はHDMI接続のディスプレイ内蔵、四号機はディスプレイ接続無し。
もしかしてVNC経由だけではなくヘッドレスも何か関係するのかも。
試しに四号機にHDMI接続のディスプレイを繋いだところ、VNC経由でもWebブラウザが不満無く使用出来た。

早速、ヘッドレス且つVNC操作時の低レスポンスを回避する方法を適用したところ、驚くほど改善された。
回避策自体は以前から知っていたが、VNC操作全般(マウス、キーボード)が遅くなるという事例であり、自分の場合はChromium(を含むWebブラウザ)以外では特に遅さを感じていなかったので、別の問題だと思い込んでいた。
実際に操作全般や他のアプリでは適用前から特に高速化した感じは無し。
ただ、JTDXのLagが明らかに減ったという嬉しい副効果は有ったかな。
それによってデコード率やコールバック率が上がったという実感は無いけれども。

ヘッドレス且つVNC操作時の低レスポンス回避方法(概略)

/boot/config.txt 変更(該当部分のみ抜粋)
#hdmi_force_hotplug=1 ⇒ hdmi_force_hotplug=1
hdmi_group=1 ⇒ hdmi_group=2
hdmi_mode=1 ⇒ hdmi_mode=32
dtoverlay=vc4-kms-v3d ⇒ #dtoverlay=vc4-kms-v3d

② デスクトップ解像度変更
・【メニューアイコン】⇒【設定】⇒【Raspberry Piの設定】
・【ディスプレイ】⇒【ヘッドレス解像度】⇒【1280×1024】
※外部ディスプレイを使用する場合は以下の設定も行う。
・【ディスプレイ】⇒【解像度を設定】⇒【DMT Mode 35 1280×1024 60Hz 5:4】

③ 再起動

後日談②(iPhoneのインターネット共有を介してiPad miniと接続)

iPhone 8のインターネット共有でインターネット接続をしつつ、併せて、iPad mini 5でVNC/SSH接続して操作したい…ということでWi-FiのAPとSTAを同時に運用する構成にしたが、ラズパイとiPad mini 5の両方をiPhone 8のインターネット共有に接続すれば、ラズパイとiPad mini 5の間で直接操作(VNC、SSH)が可能になる。
ラズパイのIPアドレスはその都度変わってしまうが、内蔵したOLEDにIPアドレスを表示出来るので、そのIPアドレス宛に接続すれば良い。
この構成であれば、iPad mini 5自体もインターネットアクセスが可能になる。