Dropbox

私的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を選択できるようにすることも出来ます。このあたりは既存のプリセットを見てやり方を真似すると良いでしょう。

自分用のBetaflightプリセットを持つススメ

複数のFPVドローンを作っていると毎回自分なりの設定、しかも全く同じ設定を施していくことになります。レース機などで全く同じハードウェアならばdiff allを移していくだけでも良いですが、レートだけ同じものを使いたいとかモード画面だけをコピーしたいという場合、必要な部分をdiff allから抜き出して保管しておくという手法を利用されている方も多いと思います。

この記事はそう言ったdiff allから必要情報を抜き出すことが出来る人を対象に書いていきます。実際のところdiff allのデータは簡単に理解出来る部分も多くあります。これを機会にdiff allを眺めていただくのも良いかと思います。

必要なデータをCLIで読み込ませるだけでも目的を達成できます。それに対してプリセットを利用するメリットは注釈付きで一元管理出来ることです。また、場合によってはチェックボックスを表示して内容を選択してから適用するような仕組みも実装出来ます。

実際の私設プリセットの様子は「BetaflighのLED設定を行うプリセットを作りました」をご覧ください。これはLED設定のCLIコマンドをプリセット化したものです。いかなる設定でもCLIさえ決まればプリセット化出来ます。しかも私的なものであれば細かい内容を考えなくとも試すことが出来ます。実際にやってみるとなかなか便利です。お勧めします。

実装の方法をいくつかのパートに分けて紹介していきます。

私的Betaflightプリセット、Visual Studio Code+Live Server編 / とりあえず一番お手軽
私的Betaflightプリセット、webサーバー編 / 自前のサーバーを持っている人向け
私的Betaflightプリセット、github編 / gitを使っている人、gitに挑戦したい人向け

Betaflightプリセットのススメ

Betaflight Configuratorのプリセット画面を活用されていますか?

プリセットとは様々な設定をややこしいことを考えることなく適用するための仕組みです。VTXテーブルのような基本設定から達人のレートを取り入れたいみたいなマニアックな物まで色々あります。色々たくさんありすぎて意味不明な設定画面と見られている面もあるかと思います。

私が常用している二つの公式プリセットを紹介したいと思います。

[ VTXテーブル ]
当初、VTXテーブルはどこからか設定ファイルを探してきてVTX画面で読み込むという物でしたがTBS UnifyとかOVX300などの有名どころであればプリセットの適用で設定できます。

選択するとオプションを選ぶものもあります。

どのような設定がされるかはCLIを表示すれば確認できます。

[ ELRSリンク ]
ELRSのパケットレートに応じたプリセットを適用することにより適切なFeed Forwardが設定できます。この効果を自分自身で確認できたことはありません。おまじない的に設定しています。最近のOscar Liangの記事によると、これをちゃんとしないと振動が出るとも書かれています。

以上はBetaflightから公式に提供されている物です。私が個人的に提供しているLED設定もあります。
BetaflighのLED設定を行うプリセットを作りました

といった具合でプリセットはなかなか便利です。というこの記事は実はまえふりで、自前の設定をプリセット化すると便利だよという内容でブログを書こうと狙っています。

S1ポッドでLEDを決まった色にする設定

元々S1スイッチでLEDの色を変更しようというアイデアは調整次第で微妙な色を出そうという物でした。レースでへ決められた色を出すためには少々無理がありました。それをEdgeTXの設定でなんとかしようという試みです。

ELRSの設定によってはS1の挙動がカクカクするため黄色がちゃんと出ないという問題がありますが、それもこの設定で解決します。

ELRSのSwitch ModeがWideの場合はAUXがスティックと同様に細かい値を取ることが出来ますが、Switch ModeをHybridにするとデータ量を節約するためにAUXでは段階的な値しか取ることが出来ません。

[ 前提 ]
Betaflightの設定は「4波対応-プロポのポット(S1, S2)でLED色を変更する」で行います。

[ EdgeTXの設定 ]
Jumper T15でS1スイッチをAUX7として使用する場合の設定した時の画面です。他機種でもおそらく同様の設定が使用できるものと想像します。

全てモデルの設定の中で行います。
– CURVES

LEDという名前で上の通りの設定を作りました。グラフの意味は横軸(X)がS1の回転を現します。縦軸(Y)は実際にchannelに出力される値です。それぞれ中心を0とした+/-100で表現されています。Betaflightの受信機タブで表示される数値で言い換えるとS1が左端にある時は1000で、徐々に右に回していくと1250になり、中央付近では1500、右端に行くと2000が出力されます。

– INPUTS

s1という名前のINPUTSを作りました。SourceにS1、CurveをCstmとして上で作成したLEDを指定しました。

– MIXES

T15の標準設定ではCH10までは埋まっていると思います。そこでCH11を新設することにしました。これはBetaflighの受信機タブではAUX7に相当します。
Sourceに上で作成したledを指定するだけで完了です。

LEDの色変更をCLIで行う

あまり需要はないかも知れませんがBetaflight ConfiguratorのCLIコマンドラインで構成されている全てのLEDの色を変更する方法の紹介です。内容的には「OSD menuでLEDの色を変更する」と全く同じもので、LEDのRACEプロファイルというものを使用するものです。

[ 前提 ]
– LEDストリップがFCに正しく接続されていること
– Betaflightをビルドする際にオプションとして”LED Strip”と”LED Strip (64)”が指定されていること、ただしFCの種類とBetaflightのバージョンの組み合わせによっていは64LEDの指定が出来ない場合もあります

[ プリセットの使用 ]
下のセクションのCLIを使うかBetaflight Configuratorのプリセットを使用するかどちらかの方法で構成します。
BetaflighのLED設定を行うプリセットを作りました

[ CLI ]
以下のコマンドをCLIで流し込みます。

# feature
feature LED_STRIP

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

set ledstrip_profile = RACE

set ledstrip_race_color = RED
save

– LED数が32しかない場合は、エラーメッセージが出ますが気にしなくても大丈夫です。
– 送信機と受信機が接続されていない状態では正しいLED色になりません、確認のためには送信機をオンにしてください。
– 上のコマンドは設定も全て含んでいます。色だけを変える時は”set ledstrip_race_color = RED”の部分を変更すれば良いです。使用出来る色は以下の通りです。

BLACK, WHITE, RED, ORANGE, YELLOW, LIME_GREEN, GREEN, MINT_GREEN, CYAN, LIGHT_BLUE, BLUE, DARK_VIOLET, MAGENTA, DEEP_PINK

macOSでの野良アプリの走らせ方

最近のmacOSでは正式に署名されていない、所謂「野良アプリ」は単純な実行属性を持ったシェルスクリプトも含めてダウンロードしたものは簡単には実行できないようになっています。これはマルウェアなどを防止する上で有効な手段と言えます。しかしながら人によっては有用な野良アプリを必要とするのも事実です。

そこでmacOS超初心者も含めて野良アプリを走らせるまでの手順を紹介いたします。

[ zipファイルのダウンロードと展開 ]
どこかからzipファイルでアプリケーションをダウンロードしたとします。ファイルは「ダウンロード」フォルダーに保管されます。そのzipファイルをダブルクリックすると「ダウンロード」フォルダーに展開されます。

中身は以下の拡張子で見ると3種類のどれかです。
app : フォルダーの設定で”すべてのファイル名拡張子を表示”にしないとappという文字列は見えませんが、フォルダー上の種類が「アプリケーション」となっています。
pkg : インスーラ、ダブルクリックでインストーラが起動します。
dmg : ディスクイメージ、ダブルクリックするとディスクとしてマウントされます。その中にappかpkgが入っています。zipの代わりにdmgがダウンロードされることも多いです。

一般的な野良アプリではappがzipされているケースが多いと思います。展開後は「アプリケーション」フォルダーあるいは自分の好みの場所に移動させます。

[ xattrコマンドの実行 – GUI ]
一般的にはターミナルを開いてxattrコマンドをzip, app, dmgファイルに対して実行しますが、@ninjaMoonLightさんから便利なスクリプトを提供していただきました。
xattr.scptをダウンロードしてダブルクリックするあるいは下の内容をスクリプトエディタに貼り付けます。

set selectedFile to choose file with prompt "Select zip or app file to be run:"
set posixPath to POSIX path of selectedFile
set quotedPath to quoted form of posixPath
set cmd to "xattr -d com.apple.quarantine " & quotedPath
do shell script cmd
display alert "Done"


– スクリプト/実行、あるいは右上にある三角を押します。
– ファイルダイアログが出るのでダウンロードしたzipファイルかdmg、あるいはアプリケーションファイルを選択します。
– Doneと表示されれば完了です。2回実行するとスクリプトエラーが出ますが、これは問題ないです。

[ xattrコマンドの実行 – ターミナル ]
– ターミナルとzipを展開したアプリケーションが見えているフォルダーを開き並べて起きます。

– ターミナルに以下のどちらかの文字列を打ち込んでおく。

xattr -d com.apple.quarantine 
xattr -cr 

手打ちならば二つ目が楽ですね。最後にスペースが一つ必要です。
– フォルダーからアプリケーションファイルをドラッグしターミナルにドロップし改行を押してコマンドを実行します。

TinyViewPlus-NGのMacOS版をビルドしました

一本のHDMI入力で4channelまとめて表示できるVTXチューナーを利用してお馴染みのTiny View Plusを利用できるように改造したものをzubon2003さんが「TinyViewPlusの受信機回りをスッキリさせたい。」という記事で公開されています。ただし実行ファイルはWindows版のみです。ソースコードは公開されていますのでそのままMacOS版としてビルドすることが出来ました。

私のGithubにてMacOS版のバイナリーを公開しています。

[ テスト ]
ドローン部長よりHawk eye FOUR EYESをお借りできたので動作確認を行いました。HDMIアダプターは”GUERMOK USB 3.0 HDMI to USB C“というのを使用しました。

fpv.xmlの編集が必要です。TinyViewPlusNG.appを右クリックして「パッケージの内容を表示」を行います。その中のContents/Resources/Data/Camera/fpv.xmlを私の場合は以下のようにしました。

<camera>
    <name>USB3 Video</name>
    <camnum>4</camnum>
    <description>USB3 HDMI</description>
    <grab>
        <width>1920</width>
        <height>1080</height>
    </grab>
    <crop>
        <x>0</x>
        <y>0</y>
        <width>1920</width>
        <height>900</height>
    </crop>
    <draw>
        <aspectRatio>4:3</aspectRatio>
    </draw>
</camera>

nameはHDMIアダプターにより変わります。grab/width,heightも実際の解像度に合わせます。どちらもVLCもしくはQuickTime Playerでキャプチャー入力を行うと調べられます。

解像度だけ合わせて手持ちの65タイニーを写してみたところ下にゴミが出ました。

そこで勘でgrab/heightを900にしたところ良い感じになりました。

実際の動作もスムースでしたので、実際のレースでも使えると思います。

Hummingbird V3.1 RaceSpecのLED Strip設定とその他諸々

Newbeedrone Hummingbird V3.1 RaceSpecは箱だしで16g台の軽さとその重量の軽さ以上に感じられる軽快な飛びでレーサーの期待を集めています。

[ LED Strip設定 ]
マッドさんが最初の頃にFC上のLED_StripがどこであるかをXで公表されていました。その時はRGB LEDをそこに接続するだけで使えていたそうです。ところが私の購入した機体およびファームウェア(betaflight_4.5.0_HUMMINGBIRD_RS_7498f3807_KAACK_Oct252024.hex)ではLEDとしての動作をさせることとができませんでした。調べてみるとLED_Stripのリソースが割り当てられていませんでした。そこで回答です。


左の写真で黄色いリード線を接続しているところがLED_Stripになります。そしてリソース関係の設定は以下のコマンドをCLIに投入します。

resource LED_STRIP 1 B01
timer B01 AF2
dma pin B01 0

LEDの数は32灯までです。
余談ですが、HummingBird V3 FCにはFC上に4灯のLEDが載っていました。

RaceSpecではこのLEDチップが取り付けられていません。そのランドを利用して外付けのRGB LEDを取り付けることにしたのです。またメーカーとしてはLEDチップを外したのでリソースからLED_Stripを削除したのは正しいことだと言えます。

[ USBコネクター ]
USBコネクターがもげてしまったと言う話しを聞きました。


上の投稿の通りでUSBコネクターのハウジングの足がFC基板のスルーホールに刺さっているだけで半田付けされていません。半田を流し込んでみました。おそらく、これで丈夫になると思います。

[ PID ]
色々な人の意見を総合するとメーカー設定のPIDは正しく出ていない気もします。ただしBlackboxログが取れないので数値での検証は出来ません。またフレームも極端に柔らかいことも考えるとなかなか難しいです。私は別の65機で調整がうまくいったPIDを使用して様子を見るつもりです。

TinySA UltraでVTXの毒電波を発見しよう

ひょんなことからTinySA Ultraという簡便なスペクトルアナライザーが6GHzまで対応しているらしいことを知りました。これならVTXの電波が見えるのではないかと思い試すことにしました。

詳細な情報はTinySA Wikiにまとまっています。

[ セルフテストとキャリブレーション ]
最初にテストと校正を行えとのことなのでやってみます。

まずは付属しているケーブルで上下のポートを接続します。画面をタップ(今時の静電式ではなく感圧式です)するとメニューが出ますのでCONFIG/SELF TESTを実行します。

続いてLEVEL CALを実行します。

こんなふうに5.34GHzを境に分かれています。CALIBRATE 100kHz to 5.340GHzを実行します。残念ながらVTXの周波数が含まれるCALIBRATE above 5.340GHzの方はTinySA単体では実行できないようです。まぁ精密な測定を行うわけではないので校正せずに進めます。

[ ENABLE ULTRA ]
6GHzまで測定するためにはCONFIG/->MORE/ENABLE ULTRAを有効にします。この時Unlock Codeを聞かれるので4321と入力します。

[ VTXの電波を見る ]
細かい設定はまだ良くわかっていませんが、とりあえずはVTXの電波は見ることが出来ました。

 下のポートに適当なアンテナを接続して周波数を設定しただけです。

トップメニューのFREQUENCYに入ります。STARTとSTOPの周波数を設定します。私はそれぞれ5.6GHzと6GHzにしてみました。

実際の電波を見たところです。F4(5800MHz)が見えています。ピークを検出して周波数を教えてくれるのが便利です。規定値ではひとつの周波数しか教えてもらえないので設定を変更します。トップメニューのMARKERに入ります。私は4 MARKERSにしてみました。

そしてE1, F1, F4の電波を同時に出してみました。

大体良い感じです。残念ながら毒電波を吐くVTXが手元にないので、悪い事例を紹介することはできませんでした。

[ 設定の保管 ]
ここまで行った設定をいつでも呼び出せるように保管しておきます。
トップメニューからPRESET/STORE/STORE 1にVTXという名前で保管しました。

これでいつでも設定が呼び出せます。また’STORE AS STARTUP’で起動時に読み込まれます。

[ SCREEN COPY ]
STORAGE/SAVE CAPTUREで画面のコピーがSDカードにBMPフォーマットで保管できます。いちいち名前を付けないと行けないのがちょっと面倒です。このブログにしようしている画面はWindowsのアプリから取り込んだものです。こちらはPNGフォーマットでした。このアプリ、すぐに接続は切れるし思うように動かないしで今ひとつですので詳しいことは省きます。

[ Water Fall表示 ]
トップメニュー/DISPLAY/WATER FALLをオンにすると時間経過とともに一定強度の信号を受信した記録が残ります。つまり少しだけ時間を遡って電波の状態を調べることが出来ます。

[ おまけ ]
HDZeroのNarrowモードが本当に17MHz帯域幅なのかどうかを調べてみました。