Dropbox

格安で手軽なVTX電波の監視

格安SDR(Software Defined Radio)の情報を眺めているうちに面白い情報を見つけました。


ここに書かれている手法を利用してESP32という小さなコンピュータ、小さいものは切手の大きさ、によりFPVで使用している5GHz帯のVTX電波を見るための簡易スペクトルアナライザーを制作しようという作戦です。

GithubとPythonの操作に慣れていれば30分とかからずに終了します。macOSでの手順をなるべく細かく書いて行きます。Windowsの場合も大体のところは同じです。

ESP32には色々な種類がありますが、5GHz帯をサポートしているのは現在のところESP32-C5だけです。他のESP32は2.4GHz帯のみが使用できます。

[ ハードウェアの入手 ]
XIAO EPS32-C5というものが値段的も入手しやすいですが、都合によりM5STACK Stamp-C5を入手しました。

[ ファームウェアの書き込み ]
https://espargos.net/espsdr/app/flash.html
ここの手順に従うだけです。


Connect Deviceを押します。

ESP32-C5をUSB接続して増加したポートを選択します。

自動的に適切なファームウェアが選択されるのでInstall ESP-SDR Firmwareを押します。
書き込みが終了したらOpen ESP-WebSDRを押せば動作が確認できます。確認したらWebSDRは閉じておきます。

[ fpv-band-monitor-c5の導入 ]
https://github.com/zubon2003/fpv-band-monitor-c5
Gitに慣れている人は、git cloneして手順に従って貰えば良いです。

緑色のCodeボタンを押すと現れるDownload ZIPを押します。ダウンロードされたfpv-band-monitor-c5.zipを適当な場所に解凍します。

ここからはpython3を使用します。Windowsの場合は最新のPython3が動作するようにしておきます。

ターミナルを開き解凍した場所に移動します。そしてPythonの仮想環境を作成しアクティベートします。

具体的には以下のコマンドを投入します。

python3 -m venv .venv
. .venv/bin/activate

必要なライブラリーを仮想環境でインストールします。

pip install -r requirements.txt

インストールコマンドの実行

bash install.command

もうこれで準備はできました。EPS32-C5を接続してband_monitor.coomadを実行するだけです。(ターミナルから引き続き実行する場合は

./band_monitor.command

です)

他のコマンドや使い方の詳細などは本家README.mdをご覧ください。

FPVTrackSideの外部連携

四国のタイニーレースで使用する勝ち上がり戦のレース形式でのFPVTrackSideの運用方式は集計まで含めてFPVTrackSideで完結しているので、FPVTrackSideだけでレース運用は可能です。ただしFPVTRackSideが提供する画面だけだと柔軟性に欠けるため配信や会場でのレース状況の表示にうまく適用できません。

FPVTrackSideにはローカルwebでレース結果を表示する機能はありますが、今回作り込んだ勝ち上がり戦の状況を確認するのには適していません。

そこで従来TVP+Google Sheetで行っていたような順位表示とレース中に周回数をグラフ表示させる外部の連携プログラムを構築しました(AIが)。以下のリンクで公開しています。

https://github.com/nkozawa/fpvt2google/

プログラムはPython3で書かれていて特別な外部モジュールは必要としていません。Python3が動けばどんな環境でもすぐに使えると思います。

[ FPVTrackSideからのデータ供給 ]


アプリケーション設定のGate / LED POST notificationをExtension Modeで供給されるデータを利用します。

[ 使い方 ]
Python3.8以上が動けば追加のパッケージは必要ありません。
– 導入は適当なディレクトリーにfpvt2google.pyを置くだけです。
– 初期設定は python3 fpvt2google.py --initを実行するとfpvt2google.jsonファイルが作られます。Google Sheetを使用する場合、このファイルの最初の方にデプロイしたURLを入力しておきます。Google Sheetを使用しない場合はそのままで大丈夫です。
– python3 fpvt2google.pyで起動すれば稼働します。画面に表示されるログで稼働状況を知ることができます。またhttp://localhost:5705にアクセスしてローカルweb機能が動いていることを確認します。

Googleへのデータ送信を行わずローカルだけで使用する場合はpython3 fpvt2google.py --local-onlyで起動することをお勧めします。

[ fpvt2google.pyで出来ること ]

FPVTrackSideから得たデータを加工しGoogle SheetにPOSTします。ここでは受け取る側のGoogle Sheetの詳細については書きません。実際に使用しているGoogle側のスクリプトはgithubに入れてあります。
Google SheetへのPOST先は二つあり、一つはレース中に周回数をグラフ表示するものともう一つは順位表です。どちらも随時更新されていきます。順位についてはレース毎に、その時点での順位が表示されます。また、勝ち上がり戦に入ってしまうと予選順位はFPVTrackSideでは見ることが出来なくなるので、Google Sheet上に保管して後から振り返って見ることが出来るようになっています。

fpvt2google.pyはwebサーバーとしての機能も持っておりGoogle Sheetに表示するものと同じデータを表示することが出来ます。http://localhost:5705で閲覧できます。IP Addressかホスト名を指定すれば他のPCからのアクセスも可能です。

下のスクリーンショットはローカルweb機能のものです。

なんかローカルweb機能があれば会場での表示や配信には使えるのでGoogle Sheetの機能は必要が無いようにも思えますが、会場外でレースの状態を見ることが出来るので残しておきます。

FPVTrackSideをMacBookで稼働したらサウンドの再生が本体スピーカーとUSBオーディオに別れてしまう

長ったらしいタイトルになってしまいました。
MacBookにUSBサウンドデバイスを接続してFPVTrackSideの音を外部に出そうとしました。ところが、TTSの音声はUSBオーディオで再生されるのにレース開始トーンなどWAVファイルの音は本体のスピーカーで鳴ってしまうという現象に出くわしました。再起動するとうまく行ったりするのでとても悩みます。

根本原因は”設定/サウンド/サウンドエフェクトの再生装置”にあります。

このように出力デバイスはUSBサウンドになっていても、サウンドエフェクトの再生装置が本体スピーカーになっていると再生先の分離が発生します。


このサウンドエフェクトの再生装置を明示的にUSBオーディオにするか”選択したサウンド出力装置”にします。

そしてもう一点、もしすでにFPVTrackSideが起動しているのならば再度起動し直してください。そうしないと設定が反映されません。

FPVTrackSideの四国レース設定 MacOS版

https://fpvtrackside.com/download から記事を執筆時点での最新版 FPVTrackside 2.77.3.889.dmg を導入し以下の作業を行いました。

四国のメンバーには設定済みファイルを共有する予定です。

基本的な設定につていは「FPVTrackside Mac版を使ってみよう」を見てください。チャネル、ArUco、映像入力、日本語設定などを行います。

[ zubon2003さんのFPVTrackside_localization_jpの導入します ]
チャネルの色やら諸々をいい感じに設定してくれます。

お好きな方法でダウンロードすれば良いですが、zipにするのがお手軽です。
FPVTrackSideを起動するとmacOSの場合は、ユーザーの書類フォルダー下にFPVTracksideというフォルダーが作られます(~/Documents/FPVTrackside)。ここに各種データが保持されます。ダウンロードしたzipの中にはdata, sounds, themeというフォルダーが入っています。それぞれFPVTracksideフォルダー下の同名のフォルダーにマージします。

[ ladder_finals.lua ]
https://github.com/nkozawa/LadderFinals
四国で行っている勝ち上がり戦形式のレース運営を行うためのluaスクリプト”ladder_finals.lua”を上のリンクからダウンロードしFPVTrackside/scriptsにコピーします。このスクリプトの詳細については別の記事に書きます。

[ イベントの設定 ]

– タイムゾーンは東京にしています。
– ラップ数、レース時間は耐久レース形式でレース時間は60秒の時の指定です。
– 最小スタート遅延、最大スタート遅延、両方に6秒を指定したのでレーススタート操作から6秒後にレース開始です。最小と最大に違う数値を指定すると、指定の数値間でランダムな時間を経過してからのスタートになります。
– 主要タイミングシステム位置を”End Of Lap”にするとヨーイドン・スタートになります。”Holeshot”にするとStggeredスタートになります。
– レース開始時の検出無視、最小ラップ時間、トップレーサーのラップタイムより十分に小さい数値にします。

[ サウンドエディター ]

レース開始時にカウントダウンさせたいので”Start Race in 5″にsoundsフォルダーの5.wavを設定、同様に4, 3, 2, 1を設定する。また、スタートの音を少し大きめにしたいので”Race Start”をtone.wavからlouder_tone.wavに変更した。

[ レーススタートのGO ]
レーススタート時に”GO”と画面に表示するためにはthemes下の適当なテーマに入っている”racestart.png”をFPVTrackside/themes/FPVTrackside-JPにコピーします。

[ キーボードショートカット ]

四国ではチャネル毎に審判をおき、ゲート通過をモニターで確認したら外部接続のボタンを押してTinyViewPlusのラップ追加を行っていました。同じハードウェアでラップを追加するためにショートカットを上のように変更しました。

VTXワイヤーアンテナのSWR値測定

SWR測定シリーズ、最後に残ったのは一番単純なモノポールアンテナです。

AIO FCのボード上のUFLコネクターが壊れた時に、芯線部分にワイヤーを接続してアンテナにすることは良くあります。少し古いAIOだと最初からワイヤーアンテナだったりもします。

中央付近の赤いワイヤーです。ちょっと短い気もします。

答えを先に言って仕舞えば13mmのワイヤーを付けておけば良いです。これは5.8Ghzの波長の1/4から得られる数値です。

アマチュア無線の勉強を少し思い出すと1/2λでも良いかもと思えますが、単純なモノポールアンテナではインピーダンスが極端に大きくなるので良くありません。実際に測定すると何時も使っているSWRのレンジでは測定できないくらい大きなSWRになりました。

測定するのはSWRなので電波の飛びを調べている訳ではありません。反射波でVTXに無駄な負荷を与えないことを確認するものです。

実際の測定は15mmくらいから始めました。15mmでもそんなに悪くなかったです。大体0.5mmくらいを目処に短くしつつSWRを測定していきました。だんだん少しづつ数値が良くなり、大体13mmの時のグラフが次のものです。

そこからもう少しだけ短くしたら、ちょっとだけ数値が悪くなりました。

普通の定規で測って13mmくらいに切ったワイヤーを取り付ければ問題ないと言うのが結論です。ただし電波の到達距離は何とも言えないので屋内飛行用と考えておいて下さい。

FPVTracside Mac版の問題点(2026/07/30現在 -> 08/12解決)

zubon2003さんの多大なる貢献により以下の問題が解決された”FPVTrackside 2.77.3.889.dmg”が公開されました。おそらくMac版もこれで完璧です。ダウンロードは以下のページから。
https://fpvtrackside.com/download

FPVTrackside Mac版(v2.77.1.877)で確認している問題点は二つあります。使用方法によっては致命的とも言えます。併せて回避策も示しておきます。問題が整理でき、あるいはコードフィックスの目処がつけば開発者にフィードバックする予定です。将来のバージョンでは問題が解決するものと思います。

(2026/08/08) zubon2003さんにより2点とも修正が提出されています。将来のバージョンに取り入れられるものと思います。

[ ディレクトリ問題 ]
https://github.com/uewepuep/FPVTracksideCore/pull/72 ブルリクエストはすでに本体にマージ済みです。

FPVTracksideの様々なデータはWindowsにおいてはユーザーの”AppData\Local\FPVTrackside\”下に集約されています。
macOS版でも”~/Documents/FPVTrackside”(ユーザーの書類フォルダー)と言うフォルダーが作成され、そこにデータを置くような設計になっているようです。ところがいくつかのデータはアプリケーションバンドル内のMacOS下を参照しています。


アプリレーションバンドルの中身はアプリケーションファイルを右クリックして「パッケージ内容の表示」で開くことが出来ます。

どのデータがアプリケーションバンドル内を参照しているのかは、追いきれていませんが、以下の二つは確実です。

< events >

レースイベントの全てに関わるデータがアプリケーション内のMacOS/eventsに保管されます。レースの実施にはおそらく大きな問題はありません。問題となるのはFPVTracksideを更新、あるいは同じバージョンであっても再インストールを行うとデータが失われてしまうことです。
もしデータを失いたくない場合は自力でeventsディレクトリーをどこかに保存しておく必要があります。

< pilots >
pilotsフォルダーはパイロットの写真や動画を保存する場所です。FPVTracksideは最初の起動時にpilotsフォルダーを作成します。実際に”~/Documents/FPVTrackside/pilots”を作成しています。ところがFPVTracksideがpilotsフォルダーの操作を行う時にはアプリケーションバンドル内のMacOS/pilotsを参照します。しかしこのフォルダーは作成されていません。そのため様々な問題が発生します。

とりあえずMacOS下に自分でpilotsフォルダーを作成すればパイロットの写真機能を使用することは出来ます。

[ macOSの濁点問題 ]
https://github.com/uewepuep/FPVTracksideCore/pull/75
プルリクエストが提出されました。-> あっという間にマージされました。

ファィル名に濁点と半濁点が含まれていると発生する問題です。NFC/NFD問題とも言います。簡単に説明します。NFDとNFCと言う異なる文字表現があります。NFDでは濁点などを独立した文字としてあつかいます。NFCは濁点付きの一つの文字として表します。例えば「が」はNFDでは2文字、NFCでは1文字になります。日本語だけではなく西欧の文字列にもわずかですが同様の文字が存在するそうです。

macOSではファイル名をNFDで作成します。ところが一般的にプログラム内部ではNFCを期待しています。macOSでプログラムが濁点の含まれるファイル名を単純に読み込むと濁点が独立した文字(NFD)になってしまいます。それをそのまま画面に表示すると濁点、半濁点がやや離れたところに表示される奇妙な状態になります。また、プログラム内部でNFCで管理されている文字列とファイルシステムから得られたNFD文字列は一致しないため、意味としては同じだったはずのものが別のものになってしまいます。macOSの仕様が何故このようになっているのか理解に苦しむところでもあります。

FPVTracsideにおいてはパイロット名と上記のpilotsフォルダーに保管したパイロットの写真の間でこの問題が発生します。

シナリオは幾つかありますが、ここではmars.fpv@YAMAGATAさんのFPVパイロット一覧のデータを使ってテストしてみます。
– FPVTrackside用ZIPをダウンロードします。
– ZIPを展開した中にあるアイコンファイル(拡張子png)を上の方で作成したアプリケーション内のMacOS/pilotsフォルダーにコピーします。
– FPVTracksideを起動しイベント画面でパイロットのインポートを行います。

「プロフィール画像ファイルからインポート」を行います。
– これで先にコピーした画像ファイル名をパイロットの名前として使用できるようになります。

パイロットの写真があればパイロット名リストが簡単にインポート出来るとても便利な機能です。が、コザックとドローン部長だけちょっと名前が見づらいです。これはWTW四国のメンバーであることが原因ではありません。これこそがNFD問題です。ちなみにmacOSのファインダー上では普通に見えます。
– 名前が見づらくても良いのであればこのままでも動きます。

やはりカッコよくないです。それにパイロット名を別の方法でインポートしてあった場合にはパイロット名が一致しなくなります。

本来の解決策はFPVTrascksideの中でNFDからNFCに変換する”nfc normalization”と言う処理を行うことです。それが実現されるまでの間はファイルシステム上でnfc化することも可能です。ただし古いHFS+ファイルシステムだとうまく行かないようです。

nfc化を行うnfd2nfcと言うPythonスクリプトを作りました。

これを使うとファイルシステム上でnfc化することが出来ます。


インポートをやり直しました。やはり、こちらの方が良いでしょう。

LED色のVTXチャネル連動、4波版

現在タイニードローンのレースや練習会で使用されている4波のチャネルにはいくつかの組み合わせがあります。中には3波の頃に行っていたVTXチャネル連動のLEDの色変更が使える組み合わせもあります。下の動画のようにVXTXチャネルを何等かの方法で設定するだけでBetaflightが対応する色を自動的に設定してくれるというものです。

[ 実際に使用されている4波の組み合わせ例 ]

1. (E2)5685[LED2], (A8)5725[LED3], (A5)5785[LED4], (A4)5805[LED6]
2. (E1)5705[LED2], (A8)5725[LED3], (A5)5785[LED4], (F5)5820[LED6]
3. (E2)5685[LED2], (E1)5705[LED2], (F3)5780[LED4], (F5)5820[LED6]

この表記は私の https://github.com/nkozawa/IMDAvoider3 で使用しているものです。チャネルと周波数は説明の必要がないと思います。それに続くLED2などと書かれているのがこの説明のキーポイントです。これはLEDストリップ画面にあるラーパレットの番号です。

この画面の数値の部分です。周波数とパレットの番号の関連付けはRacebandを基準にBetaflightの内部で固定的に決められています。詳しくはSetting LED color to the VTx Frequencyをご覧ください。

4波の組み合せ例に戻ると、例の1と2は、LED2,LED3,LED4,LED6と別々のパレットが使われます。反して、例3ではLED2が2回現れます。
< 例1と例2 > チャネル毎に違うパレットが選ばれるためVTXチャネルによるLEDの色変更が可能です。
< 例3 > E2とE1が同じパレットを使用するため、ここで紹介する設定は使用出来ません。VTXチャネルとLEDの色を個別に設定しないといけません。別々の設定をスクリプトで一度に行おうという試みについては「LEDの色とVTXチャネルを同時に設定するLuaスクリプト」をご覧ください。

[ 設定 ]
ここからが本編です。VTXチャネルの組み合わせを全部調べた訳ではありませんが、おそらくLEDカラーパレット2, 3, 4, 6でほぼ網羅出来ると思います。以下、このパレットを使用する設定です。


LEDストリップ画面で設定する場合は上のようになります。カラーパレットの2, 3, 4, 6番の設定は以下の通りです。

パレット番号 色 H S V
2 Red 0 0 255
3 Green 120 0 255
4 Blue 240 0 255
6 Yellow 60 0 255

プリセットも用意しました。

CLI用のコマンドは以下の通りです。

#--- Set up status mode ---

feature LED_STRIP
set ledstrip_profile = STATUS

# --- Set LED ---

# led
led 0 0,0::CV:14
led 1 1,0::CV:14
led 2 2,0::CV:14
led 3 3,0::CV:14
led 4 4,0::CV:14
led 5 5,0::CV:14
led 6 6,0::CV:14
led 7 7,0::CV:14
led 8 8,0::CV:14
led 9 9,0::CV:14
led 10 10,0::CV:14
led 11 11,0::CV:14
led 12 12,0::CV:14
led 13 13,0::CV:14
led 14 14,0::CV:14
led 15 15,0::CV:14
led 16 0,1::CV:14
led 17 1,1::CV:14
led 18 2,1::CV:14
led 19 3,1::CV:14
led 20 4,1::CV:14
led 21 5,1::CV:14
led 22 6,1::CV:14
led 23 7,1::CV:14
led 24 8,1::CV:14
led 25 9,1::CV:14
led 26 10,1::CV:14
led 27 11,1::CV:14
led 28 12,1::CV:14
led 29 13,1::CV:14
led 30 14,1::CV:14
led 31 15,1::CV:14
led 32 0,2::CV:14
led 33 1,2::CV:14
led 34 2,2::CV:14
led 35 3,2::CV:14
led 36 4,2::CV:14
led 37 5,2::CV:14
led 38 6,2::CV:14
led 39 7,2::CV:14
led 40 8,2::CV:14
led 41 9,2::CV:14
led 42 10,2::CV:14
led 43 11,2::CV:14
led 44 12,2::CV:14
led 45 13,2::CV:14
led 46 14,2::CV:14
led 47 15,2::CV:14
led 48 0,3::CV:14
led 49 1,3::CV:14
led 50 2,3::CV:14
led 51 3,3::CV:14
led 52 4,3::CV:14
led 53 5,3::CV:14
led 54 6,3::CV:14
led 55 7,3::CV:14
led 56 8,3::CV:14
led 57 9,3::CV:14
led 58 10,3::CV:14
led 59 11,3::CV:14
led 60 12,3::CV:14
led 61 13,3::CV:14
led 62 14,3::CV:14
led 63 15,3::CV:14

# color
color 2 0,0,255
color 3 120,0,255
color 4 240,0,255
color 6 60,0,255

LEDの色とVTXチャネルを同時に設定するLuaスクリプト

WTW四国ではタイニーレースにおいてLEDの装着と周波数毎に決められた色で発光させることをレギュレーションに取り入れています。これにより観戦者のレースへの理解度が深まることは間違いありません。

3波でのレースにおいてはVTX周波数とLEDの色の対応付けを行うことが容易でした。それが4波になって、この関連付けが不可能なチャネルの組み合わせが出てきました。そのためVTXチャネルとLEDの色を別々に設定する必要があり事前準備も実際の使用にも煩雑さが生じました。

そこで長い間、温めていたアイデアを実装いたしました。準備作業は比較的簡単で済みます。またレースの現場では送信機のLuaスクリプト上のワンアクションでVTXとLEDの設定が行えるものです。

Luaスクリプトはhttps://github.com/nkozawa/Led4Vtxで公開しています。以下の説明はGitHubサイトにあるREADMEにほんの少しだけ追加の情報を付け加えたものでほぼ同じです。

[ ドローンの設定 ]

LEDストリップ画面で機能にカラーを設定し、何かしら任意の色でLEDが光るようになれば準備完了です。

CLIで変更する場合は以下のコマンドを使用します。
https://github.com/nkozawa/Led4Vtx/blob/main/LED_Simple_Color.txt

プリセットも用意しました。

[ 二つのスクリプト ]
フルスペックなLed4Vtx.luaと簡易版のLed4VtxLite.luaがあります。

< Led4Vtx.lua >
単体ではLEDの色の設定しか出来ません。VTXチャネルの設定はEasyVTXchのお気に入り機能を使用します。EasyVTXchでお気に入りを登録した後でLed4VtxでLEDの色の長押しでお気に入り登録を行います。そうすると自動的にEasyVTXchでお気に入りしたVTXチャネルがLEDの色のお気に入りと関連付けられます。

導入はLed4Vtx.luaを送信機のSCRIPTS/TOOLSにコピーします。もしすでに古いバージョンのLed4Vtx.luacが存在する場合は削除してから新しいLed4Vtx.luaをコピーして下さい。

< Led4VtxLite.lua >
画面での設定を一切省いたものです。頻繁に設定を変更する場合には全く不向きです。予め設定してあるled4vtxlite.favが必要となります。現在四国のレース設定である、E2=赤、E1=緑、F3=青、F5=黄に設定したファイルをGitHubで提供しています。
もし変更が必要であればled4vtxlite.favを編集します。

E2,Red
E1,Green
F3,Blue
F5,Yellow

内容は見ての通りです。使用出来る色名はRed, Orange, Yellow, Green, Cyan, Blue, Violetです。

導入はLed4VtxLite.luaとled4vtxlite.favをSCRIPTS/TOOLSにコピーします。もしすでに古いバージョンのLed4VtxLite.luacが存在する場合は削除してから新しいLed4VtxLite.luaをコピーして下さい。

[ 注意点 ]
– 現在のバージョンでは素早くLED、VTXチャネルを切り替えようとすると正しく動きません。連続して操作する場合は少し時間をあける必要があります。
– このプログラムを実行するとBetaflightのカラーパレットが全て変更されます。もし元の状態に戻す必要がある場合は下のCLIコマンドを実行して下さい。
https://github.com/nkozawa/Led4Vtx/blob/main/defaultPalette.txt

私的Betaflightプリセット、webサーバー編

「私的Betaflightプリセット、Visual Studio Code+Live Server編」の続きとして書きます。実際はサーバー上で全ての作業を完結させることも可能ですが、ここではPC上で作成したデータを使用することにします。

どこかにwebサーバーをお持ちの方は上の記事で作成したfirmware-presetsフォルダーをサーバーにアップロードすればほぼ完成と言っても良いです。サーバーは家庭内、インターネット上、どちらでも大丈夫と思います。私自身は家庭内で常時稼働しているNAS上のwebサーバーを使用しています。インターネット上のサーバーでも変わりはないと思いますが、私の考慮が足りないこともありますので稼働するに当たって何か問題があってまご容赦願います。

Betaflight Configuratorがアプリ版の場合は問題ありませんが、2025.12以降のweb版を使用する場合は”firmaware-presets/.htaccess”に以下の一行を設定する必要があります。

Header set Access-Control-Allow-Origin: https://app.betaflight.com

私の場合、NAS上で稼働していたwebサーバーがNginxであったため上の設定が正しく反映できませんでした。Apacheに入れ替えて正しく機能するようになりました。

あとはローカルの時と同様にプリセットソースにサーバーのURLを設定すれば使えます。

まだ環境的には完成していませんが、MacBook Air上でプリセットを作成、NASに同期、家庭内では常時稼働のNASをプリセットソースとして使用。出先ではVSCodeのLive Serverをプリセットソースとして使用するという方式で運用することにしました。

私的Betaflightプリセット、Visual Studio Code+Live Server編

プリセットを自分で持つためには何かしらBetaflight Configuratorにデータを提供するための仕組みが必要です。その基本要素はwebサーバーです。ここでは自分のPC上にwebサーバーを持つ手段としてVisual Studio Codeの拡張機能を使用する方法を紹介します。これが一番手軽な方法と思います。

以下の手順はmacOS, Windows 11共に確認しています。Windowsの場合はPython3の導入(とても簡単)が必要です。

[ Visual Studio Codeの導入 ]
とても使いやすく多機能なテキストエディターです。もし持っていなければ導入しておいて損はないと思います。導入は難しくないのですし情報も多く見つかると思いますので導入手順は省略します。

[ Live Server拡張機能の導入 ]
– Visual Studio Code、以下VSCodeと表記、で”表示/拡張機能(View/Extensions)”を開く
– “Live Server”を検索しインストールする

– 続いて歯車アイコン/設定(Settings)を開きます

– [重要] Corsという設定を探してチェックを入れます、Betaflight Configuratorのwebアプリ版では必須です

これでローカルのwebサーバーを起動する準備ができました。

[ firmware-presetsのダウンロード ]
– 本家のfirmware-presetsもしくは私のfirmare-presets udonのページを開きます
– Codeボタンを押してDownload ZIPを行います
– ダウンロードしたZIPファイルをどこかに展開します

[ プリセットの作成 ]

展開したZIPファイルの中のpresetsフォルダー以下にファームウェアのバージョンを記したフォルダー、その下にカテゴリーのフォルダーがあり、そこにプリセットを置きます。自分自身だけのプリセットデータを置くので、既存のデータは全部消します。

ここでは例として私のタイニー用のモード設定のプリセットを作ってみます。
– パス名はpresets/2025.12/other/TinyMode.txtとします
– 内容は下のようにしました。

#$ TITLE: My Mode settings for TinyWhoop
#$ FIRMWARE_VERSION: 2025.12
#$ CATEGORY: OTHER
#$ STATUS: COMMUNITY
#$ KEYWORDS: tiny, mode
#$ AUTHOR: KozakFPV

#$ DESCRIPTION: My Mode settings for TinyWhoop

# aux
aux 0 0 0 900 1300 1 0
aux 1 1 1 1700 2100 0 0
aux 2 13 2 1300 1700 0 0
aux 3 28 1 900 1300 0 0
aux 4 28 4 900 1700 0 0
aux 5 35 2 900 1300 0 0

上の方の#$の部分は見様見真似で大丈夫と思います。下の方の実際のコマンドは既存のdiff allから必要な部分をコピーしたものです。

[ index.jsonの生成 ]
公式なやり方ではNode.jsの導入が必要です。以下のようなコマンドでindex.jsonを作成、更新します。

node indexer/indexer.js
node indexer/check.js

Node.jsを導入したくない場合、Pythonでも実行できるようにしました。
indexerのスクリプト群をGeminiにお願いしてPythonのコードに変換してみました。私のudonリポジトリーのpython_indexerにアップロードしています。最近のmacOSならば最初から導入されているPython3で次のコマンドでindex.jsonが作れます。ただし、色々なケースでのテストは出来ていないので結果の保証はありません。

python3 -m python_indexer.indexer

[ Live Serverの起動 ]
– VSCodeを開きます
– メニューから「ファイル/フォルダーを開く…(File/Open Folder…)」で”firmware-presets”フォルダーを選択する
– VScodeの右下の「Go Live」をクリックしてサーバーを起動する

[ Betaflight Configuratorのプリセットを使う ]

– 機体を接続してBetaflight Configuratorのプリセットを開く
– 「プリセットソース…」ボタンを押す
– 「新しいソースを追加」でNameは任意の文字列、Urlにhttp://127.0.0.1:5500を指定し「有効にする」を押す、既存のプリセットソースを無効にすると最初は分かりやすいかもしれません

– 必要に応じてカテゴリーやキーワード、作者などから検索して自分のプリセットを見つけて開く
– 「CLIを表示」して中身を確認し「選択」を押す
– 「保存して再起動」を押してプリセットを適用する

以上で完了です。チェックボックスを付けてCLIを選択できるようにすることも出来ます。このあたりは既存のプリセットを見てやり方を真似すると良いでしょう。