筆者は社交恐怖があり、直接話すことが得意ではないため、B級免許取得前にあまり通信を行っていませんでした。B級免許を取得した後、私は「社畜」のような生活を送ることになり、また、住居の電磁環境が複雑であったため、機器を購入してもほとんど使用しませんでした。しかし、数日前、先輩から励まされた結果、初めてFT8での通信を試してみました。その際、以下のような状況に遭遇しました:

筆者は、XieGu X6100 のデフォルトファームウェアの不足を嘆き、新しい機器を購入するための資金やスペースもないため、XieGu X6100 のファームウェアを改善する方法を探していました。ある程度の調査を行った結果、筆者は XieGu X6100 用の代替ファームウェアを見つけ、その機能を試してみることにしました。この勢いを活かして、アマチュア無線に関する基本的な知識や機器の使用方法を学ぶことを希望します。本稿では、この代替ファームウェアとその使用方法について簡単に紹介します。
[注意] 読み始める前に、以下の点をご確認ください。
- 筆者が、X6100 のオリジナルのファームウェアのすべての機能を十分に理解していなかったため、代替ファームウェアを紹介する際に、オリジナルのファームウェアと同一の機能について繰り返し説明してしまう可能性があります。
- これは、使い方と同時に批判的な内容を含む記事です。もし不快に感じた場合は、このページを閉じてください。
概要
XieGu X6100 のファームウェアの初期バージョンは、~によって提供されました。 R1CBU 開発、以下の手順に従って概要「このファームウェアは、XieGu X6100 用の Linux カーネルおよびオペレーティングシステムを構築することを目的としており、サプライヤーのカーネルからファイルをコピーする必要はありません。」 バージョン v0.20.0その後、著者は開発を続けることに飽き、プロジェクトを終了することを決意しました。
このトランシーバーの品質にはもう満足できません。閉じられたコードでの開発に不満があります。もう時間を無駄にしたくありません。私は、XieGu X6100 のファームウェア開発を停止し、独自のトランシーバーを開発することで、これらの問題を解決することを決定しました。もし XieGu が私の仕事を引き継ぐことに興味を持った場合は、喜んで協力します。
それ以降、R2RFE 実施されました今後の開発作業、および継続的にリリース 新しいバージョン。
使用方法
使い方は非常に簡単です。著者が提供しているものをダウンロードしてください。 sdcard.img、使用 rufus MicroSDカードに書き込み、それを機器に挿入して起動することで、代替のファームウェアが起動します。
機能
物理ボタン以外にも、ユーザーにとって最もよく使用される機能は2つあります。それは、X6100のファームウェアを置き換える機能です。グラフィカルインターフェースおよびウェブサーバー機能については、次にご紹介します。
もし、機能のデモンストレーション動画チュートリアルをご覧になりたい場合は、私がデモンストレーション動画を制作することを計画しています。
物理ボタン

X6100 のファームウェアを置き換えることで、正面左側のボタンにいくつかのカスタマイズを行いました。 R1CBU のマニュアルこれについてはすでに一部の説明がありますが、現在はやや古い情報です。以下では、この情報を元に、マニュアルの内容を修正・追加して説明します。
VOL-SQL-RFG スムース
- ボタンを押すことで、現在の機能をロックまたはアンロックできます。
- 現在の機能がロックされている状態で回転させると、現在の機能の値を切り替えることができます。
- 現在の機能をアンロックする際に回転させると、異なる機能に切り替えることができます。
- 音量:
- RFゲイン:無線周波数増幅(0-100)
- フィルター(低域):復調デジタルフィルタの低い周波数
- フィルター・ハイ:復調デジタルフィルタの上限周波数
- 電力:送信電力
- H-MIC のゲイン:ハンドヘルドマイクのゲイン
- ボリュームに戻る。
- 回転ボタンを使用して、上記で説明した機能の調整を行うことができます。
MFK スムースノブ
- ボタンを押すことで、現在の機能をロックまたはアンロックできます。
- 現在の機能がロックされている状態で回転させると、その機能の値を切り替えることができます。
- 現在の機能をアンロックする際に回転させると、異なる機能に切り替えることができます。
- スペクトルズーム:周波数帯の幅と、滝のような表示を制御する機能。
- スペクトラムベータ:理解できません
- ピークホールド:スペクトルにおけるピーク値を表示する時間
- 最大速度:ピーク速度
GEN ボタン
- いくつかのメニューが含まれています。
- 長押しボタンを押すと、スクリーンショットが撮られSDカードに保存されます。
- 以下のメニューに切り替わります。
- VOL メニュー:VOL-SQL-RFG スクリューを使用して選択した機能の変更
- 第1/4号
- 音量:
- ノイズキャンセリングレベル:静音モード
- RFゲイン:無線周波数増幅(0-100)
- TX Power:送信電力
- 第2/4号
- 低域フィルタ:復調デジタルフィルタの低い周波数
- フィルター(高域):復調デジタルフィルタの低周波成分を制御する
- 帯域制限フィルター
- SPモード:スピーカーモード。意味がよくわかりません。
- 第3・4号
- MIC Sel:マイク選択機能。ハンドヘルドマイクまたは内蔵マイクを選択できます。
- H-マイクのゲイン:ハンドヘルドマイクのゲイン
- I-MIC のゲイン:内蔵マイクのゲイン
- 意味不明なラベル:意味がわからない
- 第4巻/4:「このレベルのメニューは、おそらくラジオ音声合成による出力である。 RHVoice それについては、まだ理解できていません。
- 音声:音色の選択
- 音声レート: 音声の速度
- 音の高さ:理解できません
- 音声の音量:
- MFK メニュー:MFK スクリューを使用して選択した機能の変更
- MFK 1/4
- 最低レベル:スペクトルとパドルグラフの表示する最小レベル
- 最大レベル:スペクトルとパドルグラフの表示可能な最大レベル
- スペクトルズーム:周波数帯の幅と、滝のような表示を制御する機能
- スペクトル ベータ:理解できません
- MFK 2/4
- スペクトルフィリング:スペクトルの色を埋める
- スペクトル ピーク:スペクトルピークの設定
- ピークホールド:スペクトルにおけるピーク値を表示する時間
- 最大速度:ピーク速度
- MFK 3/4
- 充電器:バッテリー充電器の状態を制御します。もし私が正しく推測しているなら、その値は以下のものに対応しています。
- 対象:バッテリーの充電
- オフ:充電器を直接使用し、バッテリーへの充電は行わない。
- 影:「理解できませんが、~に基づいて」この記事、バッテリーが十分に充電されていない場合にのみ充電されると推測します。
- アンテナ:操作方法が不明ですが、調整範囲は1~5です。
- RIT:受信機の段階的調整
- XIT:送信機の段階的な調整
- MFK 4/4
- AGC の待機時間:AGC が変更を行う前に待っていた時間
- AGC の膝:AGC のゲイン傾きの変化の値
- AGC の傾き:AGC の傾き
- MEM メニュー
- 2ページの共有ストレージで、最大8つの場所を利用できます。これらは周波数とモードの保存に使用できます。
- 短い押しで、保存済みの周波数値を素早く読み込むことができます。長押しで、現在の周波数設定を保存します。
アプリのボタン
- 3レベルのメニューを含む
- アプリ 1/3
- RTTY:RTTYモードを起動する
- FT8:FT8モードを起動する
- SWR スキャン:特定の周波数帯域における VSWR (反射係数) の測定
- GPS:外部 GPS デバイスを使用して、時間や地域などの情報を更新します。
- アプリ 2/3
- レコーダー:録音機
- QTH:FT8モードで使用する、地理的な場所の情報の設定
- コールサイン:FT8モードで使用するコールサインを設定
- 設定:機器の設定画面
- アプリ 3/3
キーボタン
これはCWモード専用の機能であるように見えますが、筆者は現時点ではCWを使用する予定がないため、このボタンの説明は省略します。
MSG ボタン
記録されたメッセージを、現在の周波数で送信することができますが、詳細な説明は省略します。
DFN ボタン
- DFN、デジタルノイズフィルタリング
- 3レベルのメニューを含む
- DFN 1/3
- DNF:DNF を有効にするかどうか
- DNF 周波数:DNF コントロールセンター周波数
- DNF の幅:DNF コントロールフィルタの幅
- DFN 2/3
- 注:ノイズキャンセリング機能、ノイズキャンセリング機能を有効にするかどうかの設定
- NBレベル:ノイズ抑制機能のレベル
- NB の幅:ノイズ抑制器の幅
- DFN 3/3
- NR:ノイズリダクション、ノイズリダクションを有効にするかどうか
- NR レベル:ノイズ除去レベルの設定
グラフィカルインターフェース
ここでは、筆者がよく使用するグラフィカルインターフェースの主な機能について簡単に説明します。筆者は現在、FT8機能のみを使用しているため、次で主にFT8機能のグラフィカルインターフェースについて紹介します。
ラジオを起動した後、デフォルトのインターフェース(バージョン 0.28.0)は以下のとおりです。

上部のステータスバーは、3つのセクションに分かれています。
- 左側のステータスバーは、左から右へ、上下に以下の項目が配置されています。
- VFO の設定を記憶
- 通信方式
- AGC モード
- アンプの昇圧器の状態
- 自動アンテナ調整状態
- Wi-Fi のステータス
- 中央のステータスバーには、信号強度が表示され、送信時には送信電力とアンテナの駐波比も表示されます。
- 右側のステータスバーには、時間とバッテリー残量/電圧が表示されます。
画面上で最も重要なのは、スペクトルとパドルグラフです。右側の大きなノブを使って周波数を調整できます。
以下の設定は、前述の「物理ボタン」による制御で構成されており、非常にシンプルで分かりやすいです。
もしFT8機能を使用する必要がある場合は、まず時間を現実時間との誤差が1秒以内に調整し、アプリのボタンを2回クリックして、それぞれQTHとコールサインを設定します。その後、再度アプリのボタンをクリックすると、FT8での受信を開始できます。
ここでは、BD4JN 济南黄河のアマチュア無線クラブとの通信例を基に、X6100を使用してFT8を行う手順を示します。左側の情報は、ファームウェアによって解析されたFT8の情報、中央の情報は、QTHを設定した後の双方間の距離、右側の情報は信号強度であり、CQを発信する際に緑色で強調表示されます。
画面でBD4JNがCQを開始しているのを確認し、その際にMFKボタンを「CQ BD4JN OM86」の情報に合わせ、MFKボタンを押すと、ファームウェアは次のサイクルでコールを開始します。

画面には、現在送信されているアンテナと、その反射率が表示されます。通話終了後、通話情報は青色で表示され、ファームウェアは次のサイクルでの相手からの応答を待ちます。もし相手からの通話情報があれば、その情報は赤色で表示されます。

その後、通信を継続できます。相手からRR73を受信するまで。

この時点で、ファームウェアは今回の通信を保存し、「73 終了」というメッセージを送信します。

通信が完了した後、このコールサインは、通信済みの電波局のデータベースに記録されます。 次に同じ電波局からのコールを受信した場合、その電波局に対して「〇」マークを付与することで、重複したコールを防ぎます。

ウェブサーバー
Wi-Fiに接続した後、同じネットワークセグメントにある他の機器から、X6100のIPアドレスを入力することでウェブサーバーにアクセスできます。現在のウェブサーバーには、主に以下の機能があります。

次にご紹介します。
Bands
この機能は、非デジタルモードでの帯域エディターであり、いくつかのデフォルト値が含まれています。

代替ファームウェアを使用する場合、デフォルトの帯域モードで機器の上部の帯域切り替えボタンを使用すると、機器は自動的にその帯域に切り替わります。また、異なるモードでは、著者がそれぞれの帯域幅を細かく設定しているため、より使いやすくなっています。
必要に応じて、対応する周波数帯を追加し、保存することで、前述のように自動的に切り替えられるようになります。
デジタル通信方式
この機能は、デジタルモードでの周波数編集ツールであり、主にFT8とFT4の2つのモードをサポートしています。また、新しい周波数の追加も可能です。

代替ファームウェアを使用する場合、デジタルモードで機器の上部にある帯域切り替えの左右ボタンを使用すると、機器は自動的にその周波数に切り替わります。
必要に応じて、対応する周波数とモードを追加し、保存することで、前述のように自動的に切り替えられるようになります。
ファイルブラウザ
ファイルマネージャーを使用して、ログ、データ、スクリーンショットなどのファイルをダウンロードし、保存します。

ft_log.adi:FT8/FT4 の通信ログを、LoTW または qrz.com にアップロードできます。
params.db:一部パラメータ情報については、x6100\_gui のバージョンアップ時に上書きしないことを推奨します。これにより、予期せぬ問題が発生する可能性があります。
qso_log.db:過去に通信を行ったコールサインを記録しておけば、次回のFT8/FT4運用時に、コールサインを呼び出す必要がなくなります。
タイムエディター
ラジオ番組の時間と実際の時間が一致しない場合があり、これは非常に起こりやすい状況です。
- FT8メニューのタイム同期の設定が誤っている可能性があります。
- 例えば、インターネット接続なしで機器を起動し、FT8を開始できる可能性があります。
- NTP サーバーへの接続が確立できない可能性があります。
このような状況下では、システム内のntpdが正確な時刻同期を提供できないため、設定で時刻を調整することは視力保護の妨げとなります。issues の欄に、同様の要望がある人がいることを確認しました。Webサーバー上で時間同期を行うそのため、私はこの機能を実装しました。
現在、以下の時間同期方法をサポートしています。
ローカル時間との同期
このページを読み込む際に、現在のラジオの時間/タイムゾーンと、ラジオデバイスへのアクセス時間も自動的に取得します。これにより、ローカル時間をサーバーに同期できます。この同期方法は、通常の時間の表示よりも数十~数百ミリ秒遅れる場合があります。

手動で更新した日時
この方法は、ラジオの設定で時間を変更するのとほぼ同じです。私は手間を省くため、文字列を入力して直接変更する方法のみを提供しています。通常よりも1秒早く時間を設定した場合に、正確な時間と同期することができます。

NTPサーバーを使用して時刻を同期する
Wi-Fiに接続後、デバイスは自動的にNTPを使用して時刻を同期しますが、NTPサーバーへの接続がうまくいかない場合があります。また、手動でNTPサーバーを設定したい場合もあります。ここでは、一般的なNTPサーバーのリストと、手動でNTPサーバーのアドレスを入力する機能を提供します。

タイムゾーンの変更
デフォルトのシステム時間としてUTCを使用し、必要に応じて変更できます。要件タイムゾーン。

その他の機能
Wi-Fiに接続した後、ターゲットマシンへのSSHアクセスが可能で、デフォルトのユーザー名/パスワードはroot/123です。(X6100のネイティブシステムでも同様ですが、DHCPがない場合はボタンでのIPアドレス設定が非常に面倒です。)
コンパイルとカスタマイズ
[注意] これは完全な使用方法のチュートリアルではありません。
筆者は buildroot の使用経験がないため、この記事は、buildroot を熟知しているベテランにとっては適さない可能性があります。本稿の目的は、XieGu X6100 の代替ファームウェアの各機能をできる限り迅速に習得し、ターゲットモジュールのコンパイルを行うことです。
[注意] ソフトウェアの書き換えは慎重に行ってください。
スキャン操作によって、データの損失や機器への不可逆的な損傷を引き起こす可能性があります。 本記事に記載されているコード例は、あくまで参考として提供するものであり、実行後に機器が損傷した場合でも、筆者は一切の責任を負いません。
ファームウェア全体のコンパイル
もし、ファームウェア全体をコンパイルする必要がある場合、以下の手順に従ってください。 AetherX6100Buildroot 次実行:
./br_config.sh
build ディレクトリへ移動
make
コンパイルが成功した場合、以下のような情報が表示されます。 build/images ディレクトリ内に、sdcard.img を生成します。
カスタムアプリケーション
コンパイル後、X6100が置き換えるファームウェアのディレクトリ構造において、特に注目すべき項目は以下の通りです。
$ tree -L 2 ./
./
├── ...
├── br2_external
│ ├── ...
│ ├── board # ボード情報
│ ├── ...
│ └── package # アプリケーション
├── br_config.sh
├── build
│ ├── ...
│ ├── images # イメージファイルを含む
│ ├── ...
│ └── target # ターゲット
└── ...
もし、既存の機能をカスタマイズしたい場合は、まず目的の機能を作成し、ローカル環境にコピーした後、修正することができます。 br2_external/パッケージ/<パッケージ名>/ 上記 .mk ファイルの内容:
# <パッケージ名>\_VERSION = v0.0.2 # この行をコメントアウト
<パッケージ名>\_SITE = <パッケージパス> # ローカルパスへの指定
<パッケージ名>\_SITE\_METHOD = local # localに変更
コードを修正した後、以下の手順を実行するだけです。 build 以下のコマンドを実行してください:
make <パッケージ名>-再構成
その中には <パッケージ名> 対象となるアプリケーションの名前を入力してください。 構築/ターゲット 下に新しいコードが見つかりました。
例えば、x6100\_gui は、以下の場所にあります。 ./target/usr/sbin/x6100\_gui、x6100\_webserver は、以下に位置しています。 ./target/usr/lib/python3.11/site-packages/x6100\_webserver/。
理論的には、再起動は不要です。SSHで機器に接続し、完全に置き換えた後、サービスまたは機器を再起動するだけで済みます。
ファームウェアに機能を追加する
いくつかの簡単な機能の開発を進める中で、私はbuildrootの仕組みを理解し始めました。私はいくつかの機能を実装したいと考えていましたが、様々な理由により実現できませんでした(一部は途中で諦めた)。そこで、この経験を記録します。
閲覧するlosehu ファームウェアをベースにした、UV-K5/K6のリモコンを簡単に作成しました。この後、私はウェブサーバーにも、Websocket を利用したグラフィカルインターフェースによる監視と管理機能を実装することを試みました。具体的には、pillow と websockets を使用して、画像処理とクライアント/サーバー間の通信を行うことを目指しました。しかし、これらのライブラリを導入するには、 AetherX6100Buildroot/br2_external/configs/X6100_defconfig 中央に追加パラメータ:
BR2\_PACKAGE\_PYTHON3\_SSL=はい
BR2\_PACKAGE\_PYTHON3\_ZLIB=はい
BR2\_PACKAGE\_PYTHON\_WEBSOCKETS=はい
BR2\_PACKAGE\_PYTHON3\_PYEXPAT=はい
BR2\_PACKAGE\_PYTHON\_PILLOW=はい
後で、ファームウェア内で使用できます。
リモートインターフェースの表示と機能制御を実現するため、定期的にスクリーンショットを撮影し、それをフロントエンドに送信する必要があります。X6100 の画面解像度は 800x480 で、PNG を直接送信した場合、一つのグラフィックファイルは約 500KB になるため、大きくなりすぎる可能性があるため、筆者はスクリーンショットを JPG または webp 形式で圧縮して送信することを検討しました。しかし、その際に以下の2つの問題に直面しました:
JPEG形式で圧縮した場合、「pillow のバージョン要件と、使用している libjpeg のバージョンが一致しない」という問題が発生する可能性があります。これは、pillow が libjpeg9 以降を必要とするのに対し、ファームウェアで使用されている libjpeg-turbo によって生成された libjpeg は libjpeg8 であるためです。
もし WebP 形式で圧縮する場合、ファームウェアのコンパイル時に WebP ライブラリを追加する必要があります。
BR2\_PACKAGE\_WEBP=はい
ただし、それでも、実際の実行時には、pillow がインストール済みの webp ライブラリを見つけられないという問題が依然として発生します。その原因は不明です。
前2つの問題は比較的簡単に解決できるのですが、どうしても難しい場合は、フレームレートを下げて画像データを送信するという方法もあります。しかし、最後の問題については、筆者は本当に手に負えない状況でした。周知のように、Linuxでは、フレームバッファを読み取ることで現在の画面の情報を得ることができます。そのため、私は単にバッファの読み込みを行うだけの機能を実装しました。
```json
with open(FRAMEBUFFER_DEVICE, "rb") as fb:
raw_データ = fb.read(SCREEN_WIDTH * SCREEN_HEIGHT * BPP)
```
with open("FRAMEBUFFER_DEVICE", "rb") as fb:
raw_data = fb.read(SCREEN_WIDTH * SCREEN_HEIGHT * BPP)
そして、このようなスクリーンショットを読み取ることができます。

つまり、ここで読めるスクリーンショットには、フォールアウトチャートは含まれていません。これは筆者にとって非常に困っており、まず、ファームウェアに組み込まれているスクリーンショット機能を探しました。その場所は x6100_gui/src/screenshot.c:
void screenshot_take() {
uint32_t バッファサイズ = lv_snapshot_buf_size_needed(lv_scr_act(), LV_IMG_CF_TRUE_COLOR_ALPHA);
バッファを確保: buf = (uint8_t *) malloc(buf_size);
lv_snapshot_take_to_buf(lv_scr_act(), LV_IMG_CF_TRUE_COLOR_ALPHA, &スナップショット、バッファ、バッファサイズ);
pthread_t スレッド;
pthread_create(&スレッド、NULL、screenshot\_thread、NULL);
pthread\_detach(thread);
}
簡単に言うと、LVGL 自体がスクリーンショットの API を実装しており、LVGL ベースのファームウェアを開発する際には、この API を呼び出すだけで済みます。ただし、ファームウェアの解決策を知っていても、筆者が直面した問題は解決できませんでした。API の実装原理について詳しく調べる時間もなく、そのため、この機能を実装するというアイデアは一時的に保留することにしました。もし、HAM(アマチュア無線愛好家)の方で興味があれば、今後の進め方についてアドバイスをお願いします。
要点をまとめると
ネイティブファームウェアの場合、FT8 では様々な問題が発生することがあります。これには、以下のようなものが含まれますが、これらに限定されません。
- JTDX および WSJT-X との接続に関する問題
- また、他のシステムでの利用に関する問題も指摘されています。
- DHCP が利用できないため、静的 IP アドレスを手動で設定する必要があるという問題。
代替ファームウェアについては、内蔵のFT8を使用して通信を行うことができますが、いくつかの問題点もあります。
- FT8 のように、WSJT-X よりも多くのメッセージを解析できないこと、また、解読結果が異なる可能性がある。
- ただし、代替のファームウェアであれば、WSJT-Xとの接続も理論上は可能。
- FT8機能の実装において、いくつかの問題が発生しています。
- 特定の状況においては、相手の位置情報を記録することができない場合があります。現時点では、具体的な原因を特定できていません。
この機器は、比較的安価で、初心者向けのラジオに適しています。小型のケースに、ラジオ本体、NanoVNA、モバイルバッテリー、および12Vの誘電ケーブルを収納できます。これにより、必要な時にすぐに設置することができます。SDR(ソフトウェア無線)として、豊富なインターフェースを備えていますが、ファームウェアにはまだ改善すべき点が多く、現時点では「とりあえず使える」程度です。
X6100に関する情報 HamCQ および海外のフォーラム上記については、多くの議論が行われており、興味のある方はフォーラムの記事をご覧ください。
[成功] ファームウェアの交換体験
ファームウェアの交換前に、筆者はFT8CNを使用してX6100を操作した際、多くの問題が発生し、最終的には3つの電波局との接続に成功しましたが、そのうち有効な接続は2回のみ(両者がLoTW/QRZで確認);しかし、ファームウェアを更新して内蔵のFT8機能を活用した後、1時間以内に約20回の接続を完了することができ、大きな挫折感を軽減できました。
今後の展望
現在、X6100の代替ファームウェアはまだ十分に完成しておらず、追加できる機能も多くあります。
- WfView の機能はまだ十分に開発されていないようです。
- ウェブサーバーを導入した後、多くの機能を追加できるようになりますが、現時点では、x6100\_gui とウェブサーバー間の通信インターフェースおよびプロトコルが存在せず、ウェブサーバー上でGUIの状態をリアルタイムで取得することができません。
- 理想的には、〜のように NanoVNA または UV-K5 ウェブページのように、ラジオをオンラインで制御できる。
- 自動でLoTWへアップロード
- 難しそうな点は、ウェブ上でキーを使って adi ファイルに署名する方法ですが、そのためには移植が必要かもしれません。 tqsllib
その他の資料
参照資料
P.S. 家庭の電磁環境が非常に悪く、また筆者が最近の週末に活動量を過剰にこなしてしまったため、この記事を書き終えた後、アマチュア無線へのモチベーションが低下し、新しい楽しみを見つける時だと判断しました。