最近のトランシーバはリモート接続の機能を持ったものがあり、PCなどに接続せず直接外部からコントロールできます(IC-705,IC-9700など)。これらのトランシーバは専用クライアントソフトを使ってリモートからコントロールや音声による運用ができますが、CW運用はキーボード入力に限定されてしまいます。
WiFiKeyはネットワークを介してリモートにあるトランシーバのキーイングを可能にします。手元のクライアントに縦振電鍵やエレキーを接続し打鍵すると、打鍵タイミングをネットワークを介してサーバーに伝えサーバーはそのタイミングに忠実にトランシーバのキーイングを行います。
またIC-705向けにCI-Vインタフェースをリモート制御する機能を持っています。Bluetoothを使ってトランシーバとサーバと接続し、ネットワークを介してクライアントを接続したPCからCI-Vコントロールします。これにより手元のPCでログソフトを直接操作できます。
ハードウェア編を参考にサーバー・クライアントの2台を組み立ててください。次にソフトウェア編を参考にインストーラを使ってファームウェアを書き込みます。ファームウェア書き込み後、サーバー(フォトカプラを積んだ側)に電源を接続してください。本体の緑色のランプが一瞬点灯しアクセスポイントとして稼働します。SSID WiFiKey パスワード password でアクセスポイントに接続後、http://192.168.4.1/にアクセスすると以下の表示が現れます。
次にボタンSettingsを押すと以下の設定画面に移ります。
設定画面でMODEをServerに設定してください。次に接続するためのパスワードをPassword欄に入力してください(Retypeには確認用に同じパスワードを入れてください)。Wi-Fiステーションとして既設のWi-Fi環境に接続する場合はStationのSSID Passwordを入力してください。最後にSaveボタンを保存して終了です。
次にクライアント(キーを接続する側)を電源に接続しサーバーと同様に設定画面を開きます。サーバーと異なる名前をつけるため、Nameにwifikey-clientなどの名前を設定します。Passwordはサーバー側に設定したものと同じものを入れてください。次にModeをClientに設定するとServer Nameの欄がアクティブになるので最初に設定したサーバーの名前を入れてください。Wi-Fi設定もサーバーと同様です。こちらも最後にSaveボタンを押して設定を保存して終了してください。
サーバー側をトランシーバのキー端子に、クライアント側を縦振電鍵/エレキーなどに接続します。まずサーバー側に電源を接続し緑色のランプが消灯するまで待ってください。次にクライアント側の電源を入れてください(クライアントがネットワーク上でサーバーを探すため先にサーバーの電源を入れておく必要あります)。
キーを打鍵するとクライアントはサーバーとチャレンジ・レスポンス方式による認証を行います。クライアントに設定したサーバー名・パスワードがサーバー側と合致しないと接続することができませんので注意してください。認証が成功するとサーバーは接続されたトランシーバのキーイングを始めます。接続後、無操作のまま30分が経過するとタイムアウトとなりますが、打鍵すると再度認証を行います。なお不測の事態を避けるため5秒以上の送信・サーバのWi-Fi接続の切断時には強制的に送信が止められますのでご注意下さい。
サーバー側http://wifikey.localにアクセスすると以下の画面が現れます。
各項目の詳細は以下の通りです。
| 項目名 | 意味 |
|---|---|
| Name | ホスト名(IPアドレス) |
| Mode | 稼働中のモード(ServerまたはClient) |
| Client | 接続中のクライアントのアドレス・ポート |
| Timeout | タイムアウトするまでの時間(デフォルトは30分) |
| Estimated Speed | 推定キーイング速度 (WPM) |
| Estimated Dash Dot Ratio | 長点・短点の比 |
| Packet Error | パケットがロストした数 |
| Packet Delay | パケットが到達するまでに要する時間 |
| Max queue length | サーバーのキューの最大長 |
| Max long mark duration | 最も長い長点の長さ |
| Space duration | 符号間のスペースの長さ |
Packet Errorは受信時にパケットがロスした場合にカウントされます。Packet Delayとは符号パケットの到着時刻の間隔からキー入力時の符号間の間隔を引いたもので、この値が大きいほどネットワークの遅延が大きいことを表します。
屋外など接続可能なWi-Fi環境がない場合にはサーバーをアクセスポイントとしてクライアントを直接接続できます。
まずサーバーの設定画面でWi-FiをAccess Pointに設定してください。次にアクセスポイントのSSID/パスワードを設定するために、Access PointのSSID,Passwordを設定します。最後にサーバーのアドレス・ポートををLocalに設定してください。Saveで設定を保存してください。再び設定画面でREBOOTボタンを押すとシステムが再起動し設定が有効になります。
次にクライアント側を設定します。サーバーと同様WiFIをAccess Pointに設定しSSID,Passwordをサーバーで設定したものと同じ値を入力します。次に先程設定したサーバーのアドレス・ポートをLocalに設定してください。最後にSaveで設定を保存します。サーバーと同様再起動すると設定が有効になり、直接サーバーに接続されます。
クライアントをモバイルルーターや自宅以外のWi-Fi環境に接続する場合はSSID2/SSID3に接続するWi-FiのSSID/パスワードを追加登録してください。起動時は一番電波の強いSSIDのアクセスポイントへの接続を試みます。
Keyer ParameterのPacketでキーイングを行うタイミングを変更できます。
タイミングには、キー入力の立ち下がり・立ち上がりのエッジでパケットを送出するエッジタイプEdgeと、キー入力の立ち上がりのタイミングでキーダウンされていた時間と送出時刻をパケットで送出する時刻タイプTimeの2種類があります。
エッジタイプは遅れの少ないキーイングが可能です。しかしステーションモードで既設のWi-Fiアクセスポイントを経由して接続するとパケットの到着時刻にジッタでてしまうためサーバー側で正確な符号を再現できません。サーバーとクライアントを直接接続するアクセスポイントモードで使うようにしてください。
時刻タイプはキーダウンの時間と次の符号までの時刻を保存するためアクセスポイントを経由した場合でも符号の乱れがありません。しかしサーバー側でのバッファリングが必要になるためレイテンシが生じます。バッファーに何シンボル分溜まってから送出するか設定するパラメータSymbol、規定シンボル数以下でも以下の式で求められる所定時間T msec経過後に送出を設定するパラメータLatencyとしてがありますのでネットワーク環境や運用スタイルに合わせて最適な値を設定してください。
T = (長点の長さ(ms) + 符号間の間隔(ms)) * Latency
なお、本パラメータはサーバー・クライアント双方で設定することができます。クライアント側でパラメータ設定をするとサーバー側にも値が送られ設定されます。
自宅内のネットワークにあるサーバーにモバイルルーターなどを経由して外部のネットワークにあるクライアントからアクセスできます。
まずクライアントの設定の設定画面でServer AddressのGlobalに自宅ネットワークのルーターのグローバルアドレス及びアクセス可能なポートを指定してください。グローバルアドレスの指定にダイナミックDNSを使っている場合はホスト名を指定してください。なお、クライアントは起動時にマルチキャストDNSを使ってローカルネットワーク内で'Server Name'.localが存在するか確認します。サーバーが見つからない場合はGlobalで指定されたアドレスへのアクセスを行います。
次にDHCPでサーバーに設定されるアドレスを固定します。サーバーのMACのアドレスを調べ、固定アドレスが振られるようにルーターのDHCPサーバーに登録してください。
次にルーターのポートフォワーディングの設定でグローバルアドレスのポートを、DHCPからサーバーに振られるアドレスのポート(Server AddressのLocalのポート部分)にフォワードするように設定してください。
IC-705はBluetoothによるCI-Vコントロールができます。WiFiKeyのサーバをIC-705とペアリングすることでクライアントを接続したPCからリモートでCI-Vコントロールをすることができます。
サーバーでBluetooth CI-VをEnableにします。IC-705の設定画面を開くとサーバー名のデバイスが表示されますのでペアリングしてください。次にクライアントのBluetooth CI-VをEnableにしシリアルポートの速度を設定します。クライアントをPCに接続するとCOMポートが現れますので、ログソフトなどでCI-V用ポートとして指定してください。サーバーに接続したIC-705をリモートで制御することができます。
Ctestwin/WSJT-X/Logger32/DXLab. Commanderなどで動作確認済みです。なおTurboHAMLOGでは使用できません。シリアルポートアクセス時にESP32がハングアップします。万が一ハングアップした場合は電源を外してください。原因は不明ですがDTR/RTSのタイミングでEPS32がプログラムモードに入ってしまうのではないかと思われます。
- ESP32を搭載したボード (ESP32-WROOMやM5 AtomLiteなど) x2
- フォトカプラPC817 x1
- LED x2
- 抵抗 100Ω (フォトカプラ・LEDの電流制限用) x3
- ジャック(電鍵・トランシーバ接続用) x2
- ブレッドボードなど x 2
以下に回路図を示します。便宜上サーバー・クライアントの双方を同じ図面に載せています。
使用するプラットフォームによってピンアサインが異なりますので注意してください。

M5ATOMLiteとATOMICプロトキットを使って製作しています。
ビルドの際にm5stack-atomを選択してコンパイルするとGPIOのアサインが以下のように設定されます。
| GPIO | 入出力 | 機能 |
|---|---|---|
| 19 | 入力(内部プルアップ) | キー入力 |
| 27 | 出力 | LED出力 |
| 23 | 出力 | フォトカプラ用出力 |
以下の写真はESP32-WROVERとブレッドボードを使った制作例です。上側がサーバー、下側がクライアントです。
クライアント側はGPIO 25をキー入力として使います。トランシーバ側はGPIO 27を出力をフォトカプラ接続しトランシーバをキーイングします。またクライアント・サーバーともに動作確認のLEDをGPIO 26に接続しています。
GPIOの入力は全てESP32内部でプルアップしています。また出力側には電流制限用に100Ωの抵抗を入れています(GPIOの出力を直接フォトカプラやLEDに接続しないでください)。なお、評価ボードによっては書込時にタイミングの問題で失敗するものがありますが、EN-GND間に1uF程度のコンデンサを入れると改善するようです。
| GPIO | 入出力 | 機能 |
|---|---|---|
| 25 | 入力(内部プルアップ) | キー入力 |
| 26 | 出力 | LED出力 |
| 27 | 出力 | フォトカプラ用出力 |
インストーラをダウンロードしZIPファイルを展開後、install.batを起動してください。ボードを接続したCOMポートを指定しボードに対応するファームウェアを書き込んでください。次にファイルシステム(ボード共通)を書き込んでください。以上でインストールは完了です。
WiFiKeyに起動時にNVMに保存されたバージョンとconfig.jsonのバージョンが異なる場合、以下の設定内容をNVMに読み込みます。画面で設定変更した際に各項目で設定が更新されるタイミングが異なりますので注意してください。
| パラメータ | 初期値 | 意味 | 更新タイミング |
|---|---|---|---|
| version | "1.01" | バージョン番号 起動時にNVMに保存されたバージョンとバージョンが異なる場合はconfig.jsonを優先して読み込みます | - |
| keyername | "wifikey" | ホスト名 mDNSの名称として使われます | リブート後 |
| keyerpasswd | "passwd" | 接続パスワード | 設定変更後 |
| servermode | "%checked%" | サーバーモード %checked%の場合サーバーとして起動 |
〃 |
| servername | "wifikey" | サーバー名 | 設定変更後 |
| enablebt | "%checked%" | Bluetooth機能 %checked%で起動(サーバーのみ) |
〃 |
| baudrate | 115200 | シリアル接続の速度 | 〃 |
| wifistn | %notchecked% | Wi-Fiモード %checked%の場合Wi-Fiステーションとして起動 |
リブート後 |
| SSID1 | - | ステーション時のSSID1 | 〃 |
| passwd1 | - | SSID1のパスワード | 〃 |
| SSID2 | - | ステーション時のSSID2 | 〃 |
| passwd2 | - | SSID2のパスワード | 〃 |
| SSID3 | - | ステーション時のSSID3 | 〃 |
| passwd3 | - | SSID3のパスワード | 〃 |
| APSSID | - | アクセスポイント時のSSID | 〃 |
| passwdap | - | アクセスポイント時のパスワード | 〃 |
| pkttypetime | %checked% | パケットタイプ %checked%の場合Timeで起動 |
設定変更後 |
| localaddr | 192.168.4.1 | サーバーローカルアドレス | リブート後 |
| localport | 56000 | サーバーローカルアドレスのポート | 〃 |
| globaladdr | 192.168.4.1 | サーバーグローバルアドレス(FQDNで入力可) | 〃 |
| globalport | 56000 | サーバーグローバルポート | 〃 |
| latency | 1 | レイテンシ | 設定変更後 |
| symbol | 2 | シンボルウェイト | 〃 |
Visual Studio CodeとPlatformIOを使っています。GitHubからZIPファイルを展開後、Add Projectで追加してください。 また外部ライブラリとしてArduinoJSON・FastLEDを使っています。自動でインストールされない場合はPIO HomeのLibrariesから検索してインストールしてください。
次にProject Environmentでボードを選択してビルド後アップロードをします。最後にdataフォルダーにある設定画面のHTMLファイル・設定ファイルをPlatoformのUpload Filesystem Imageを使ってアップロードして完了です。





