-----------------------------------------------------------------------
■ はじめに
-----------------------------------------------------------------------

家に帰る前に移動運用の周波数を確認したい。
仕事部屋から離れた場所で無線機を動かしたい。
VPN 越しに自宅の固定局を操作したい。

そんな要望に応えるべく作ったのが「Wifi RIG CTRL」です。

Android スマートフォンと Raspberry Pi Zero 2W があれば、
Hamlib 対応の無線機(YAESU、ICOM、Kenwood 等)を
Wi-Fi 経由でリモコンできます。

このアプリのシステム構成は、
  スマートフォン ← Wi-Fi → Raspberry Pi ← USB/CAT → 無線機
という形です。Raspberry Pi の上で Hamlib + FastAPI サーバーが動いており、
アプリからはその API を叩くだけです。


-----------------------------------------------------------------------
■ モード別にできること
-----------------------------------------------------------------------

【CW モード】
─────────────────────────────
受信側は、画面に表示されるリアルタイム CW デコーダーが使えます。
300〜3000 Hz の範囲で最大 5 チャンネルを同時追跡し、WPM 不問で動作します。
VPN を使っても音声バーストに強い設計になっています。

送信側は2通りあります。

1) USB 電鍵(縦振り電鍵)を Android に直接接続
   M5ATOM Lite / S3 Lite (WIFI_RIG_CW)を OTG ケーブルで Android に接続し、
   電鍵を打つと打鍵タイミングを UDP でラズパイに中継します。
   CW モードではラズパイ側の rigctld を通じてそのまま無線機を制御します。
   ラグタイム(VPN 遅延)は CW バッファ設定で補正できます。

2) CW TX パネル(v2.02 新機能)
   画面上のボタンから CQ / CALL K / AGN / UR 5NN BK などを送信できます。
   フリーテキスト欄に任意の文字を入力して送ることも可能です。
   WPM は 5〜60 のスライダーで調整します。
   CW モードでは Hamlib のキーヤー機能を使って送信します。
   ⚠ CW TX パネルは遅い(秒単位の遅延)
   「送信」を押してから実際に符号が出るまで 1〜数秒かかります。
   縦振り電鍵のようなリアルタイム運用には向きません。
   定型文の送出や、CW に不慣れな局へのコールサイン送信などに使ってください。


【FM-CW モード(FM + USB 電鍵)】
─────────────────────────────
FM モードで USB 電鍵を使うと、アプリが 700Hz のサイドトーンを生成して
ラズパイに PCM ストリーミング送信し、VOX で PTT を制御します。

FM-CW でも CW TX パネルが使えます。
テキストを Morse 変換した PCM を生成してラズパイに送ります。
⚠ FM-CW は約 0.5〜1 秒の遅延があります(音声バッファリングのため)。

PTT 頭切れを防ぐために「FM-CW PTT 遅延」設定があります(VPN 使用時に有効)。

FM-CW の特徴:
・CW 資格なしで送信できる(ただし FM 設備が必要)
・IC-7300 等の内蔵キーヤーを使わないため、無線機側のキーヤー設定不要
・電鍵とパネル送信を切り替えて使えます


【Phone(音声送受信)モード】
─────────────────────────────
マイクで話した音声をリアルタイムで無線機から送出できます。
Hamlib HTTP PTT / WiFi UDP PTT(M5Atom 等の外部 PTT デバイス)に対応しています。

受信音声はスマートフォンのスピーカーで再生(SPK ボタン)。
サンプリングレートは 8k〜48kHz から選択可能です。

VPN 越しに使う場合、音声遅延が生じます。
PTT 遅延補正設定と、VPN バッファ設定を使って調整してください。

APRS ビーコン送信にも対応しています(FM モードと排他)。
コールサイン・SSID・シンボル・コメント・周波数・間隔を設定できます。
Android の GPS を使ってビーコンを自動送信することも可能です。

PTT 制御は Raspberry Pi 上の rigctld(Hamlib)経由で行います。
ラズパイ上の DireWolf が `PTT RIG 2 localhost:4532` で rigctld に接続し、
FT-991A への PTT コマンドを Hamlib プロトコルで送信します。
v2.02 で APRS TX 中のウォッチドッグ誤動作も修正し、
安定した連続ビーコン送信が可能になりました。


【FT8 / FT4 モード(実験的機能)】
─────────────────────────────
WebView ベースの FT8 デコード画面です(Port 8443 を使用)。
jl1nie 氏の webft8 を Raspberry Pi 上で動かし、
ラズパイ側でリアルタイムにデコード・エンコードします。

15 秒サイクル(FT8)/ 7.5 秒サイクル(FT4)に同期した自動デコードと送信が可能です。

⚠ この機能は実験的です。
音声遅延が大きい環境(VPN 等)では同期がずれることがあります。
デコード精度も環境依存です。


-----------------------------------------------------------------------
■ VPN を使った外出先からの接続
-----------------------------------------------------------------------

モバイル回線など自宅外から繋ぐには、WireGuard VPN が必要です。

セットアップの流れ:
1. ラズパイ側で WireGuard を設定(setup_wireguard.sh で自動化)
2. スマートフォンに WireGuard アプリをインストールし、設定ファイルを読み込む
3. VPN 接続後、アプリの「IP アドレス」欄にラズパイのアドレスを入力するだけ

詳細は GitHub のセットアップガイドをご覧ください。
https://github.com/ji1ore/M5CoreHamCAT/tree/main/v2.02/WireGuard

VPN を使う際の注意点:
- 音声遅延(往復 100〜300ms 程度)が発生します
- CW USB 電鍵は「CW VPN バッファ」設定で遅延を補正できます
- FM-CW は「FM-CW PTT 遅延」設定で頭切れを防げます


-----------------------------------------------------------------------
■ セキュリティ(API Key 認証)
-----------------------------------------------------------------------

インターネット越しに使う場合、API Key 認証を設定することを推奨します。

ラズパイ側:
  bash ~/set_api_key.sh あなたのシークレットキー

アプリ側:
  Connect 画面の「API Key」欄に同じキーを入力

キーを設定しないと、同じネットワーク上の誰でも API にアクセスできます。
LAN 内のみなら不要ですが、外部公開時は必ず設定してください。


-----------------------------------------------------------------------
■ 必要なもの
-----------------------------------------------------------------------

【必須】
・Android スマートフォン(Android 8.0 以上)
・Raspberry Pi Zero 2W(Zero2以上の他のモデルでも動作するはずですが未確認)
・Hamlib 対応の無線機(CAT ケーブル付き)
・Wi-Fi 環境(スマホとラズパイが同じネットワーク、またはVPN)

【音声送受信】
・(特になし、マイクとスピーカーはスマホ内蔵を使用)

【USB 電鍵】
・M5ATOM Lite または M5ATOM S3 Lite(Wifi_Rig_CW ファームウェア書き込み済み)
・OTG 対応 USB ケーブル
・縦振り電鍵(3.5mm ステレオジャック)



-----------------------------------------------------------------------
■ 内部テストメンバー募集
-----------------------------------------------------------------------

現在、内部テストにご協力いただける方を探しています。

Androidユーザーを探しています。

ラズパイ保有ならなおよしです。


-----------------------------------------------------------------------
■ ダウンロード
-----------------------------------------------------------------------

Google Play(v2.02):
※Googleは Playは内部テストをしないと公開不可...

APK 直接ダウンロード(GitHub):
  https://github.com/ji1ore/M5CoreHamCAT/tree/main/v2.02/M5CoreHamCAT_Android

セットアップガイド(Raspberry Pi):
  https://github.com/ji1ore/M5CoreHamCAT/tree/main/v2.02/RaspberryPiSetup

-----------------------------------------------------------------------
文章はAIの自動生成です。