Flipper BUSY Bar

Marius

Flipper BUSY Bar

かつてLemonを手がけた筆者による、Flipper BUSY Barのレビューです。72×16のRGB LEDマトリクスを備えたデスク設置型デバイスで、GPLのファームウェア、HTTP API、Matter対応を特徴としています。

Flipper BUSY Bar

はい、本物です。今まさに手に持っています。Flipperがあちこちのオンライン投稿でこの不気味なデバイスをちらつかせて、もう何年も経ったような気分ですが、ようやく断言できます。実在します。

BUSY Barは、Flipper Zeroや現在も開発中のFlipper Oneで知られるFlipper Devicesによる、重さ250グラムのデスクデバイスです。基本的には72×16のRGB LEDマトリクスにさまざまな情報を表示する小さなディスプレイで、執筆時点での主な売りは、ポモドーロ式のフォーカスタイマーを動かせること、そしてUSB、ローカルネットワーク、インターネット経由で利用できる本格的なHTTP APIで本体を自在に制御できることです。

BUSY Barの天面には5ポジションのセレクターがあり、2つのフォーカスモード(BUSYCUSTOM。機能は同じでデフォルト設定だけが違います)、実質的には両方の画面を消すスリープモードであるOFF、現在は時計だけが入っているアプリポジション、そしてその名のとおり設定用のポジションを切り替えられます。中央の大きなメカニカルボタンでセッションの開始/一時停止、スクロールホイールでタイマーの調整とOKボタンを兼用、そして最後に戻るためのバックボタンが付いています。

背面の話をすると、本体の裏側には1.54インチのモノクロOLEDがあり、タイマーやバッテリー残量、Wi-FiやBluetooth、USBのインジケーターを表示します。これにより、内蔵マウントでモニターの上縁に取り付け、メインのマトリクスディスプレイを自分とは反対側に向けた状態でも、使用者自身が使い続けられます。

仕様

本体サイズは168.6×55.2×40.8mm、重量は250g(8.82oz)です。筐体はPC/ABS製で前面と背面パネルはPC、モニターマウントのパッドはTPEです。対応するモニターの厚さは最大21mmで、曲面ディスプレイでも使えることを確認しています。ただし、ポータブルディスプレイのような特に薄いモニターでは上に固定できません。

Flipperの公式ドキュメントに掲載されているフルスペックは以下のとおりです。

仕様詳細
メインディスプレイ72×16 RGB LEDマトリクス、表示領域158.4×35.2mm、60Hz。LEDサイズ1.23×1.2mm、ピッチ2.2mm、コモンアノード。ICND2153ICN2012ドライバ。照度センサーによる手動/自動輝度調整
背面ディスプレイ1.54インチ モノクロOLED、160×80、16階調、60Hz。SSD1320コントローラ、SPI接続
メインMCUSTM32U595RI、Arm Cortex-M33 @ 160MHz、MPU/FPU/DSP搭載。フラッシュ2MB、SRAM 2.5MB
ワイヤレスMCUSilicon Labs SiWG917M111MGTBA、Arm Cortex-M4F @ 180MHz。フラッシュ8MB、SRAM 672KB
無線Wi-Fi 6(IEEE 802.11 b/g/n/ax)、2.4GHzのみ、WPA3。Bluetooth Low Energy 5.4
ストレージ8GB eMMC NAND
オーディオモノラル。NS4168 DAC(I2S、44.1kHz)、内蔵Class Dアンプ。6Ω、0.8W
バッテリー1セル 18650、3250mAh、A2007-H04 4ピンコネクタ。過充電・過放電・高温/低温保護付き
充電18W以上のPD充電器で2.5時間、それ以外では7〜8時間
USB-CUSB 2.0 Full Speedデバイス、12Mbit/s。PD 3.0、5V⎓3Aおよび9V⎓1.5A
操作部メカニカルスイッチ、スクロールホイールエンコーダ、5ポジションモードセレクター、バックボタン

72×16のマトリクスはICND2153で駆動されています。16チャンネルの定電流PWMシンクドライバで、16ビットグレースケールのシフトレジスタ、LEDオープン検出、ゴースト低減用のプリチャージ回路を備え、ICN2012は8チャンネルのパワースイッチです。

2026年時点で少し残念なのは、Wi-Fiが2.4GHzにしか対応していないことです。デバイスや電子レンジがひしめくオフィス環境では、最も混雑する帯域を使うことになります。USB側も最大12Mbit/sと、あえて言えばライトな仕様ですが、Web UIやHTTP APIを提供する仮想イーサネットインターフェースとしては十分です。

充電については、ドキュメントでは2.5時間という数値に18W以上のPD充電器を求めていますが、デバイス自体が対応しているPDモードは5V⎓3A(15W)と9V⎓1.5A(13.5W)のみのように見えます。

ディスプレイの輝度については記載に食い違いがあります。技術仕様ページには輝度の数値自体がなく、製品ページでは現在400ニト、発売時のCNX SoftwareXDAの記事ではどちらも800ニトとされています。測定機器を持っていないのでどちらが正しいかは分かりませんが、明るい場所でも十分すぎるほど明るいことは断言できます。

内部構造

FlipperはiFixitに公式の分解ガイドを公開しています。素晴らしいことです。全21ステップで、修理しやすさを考慮して設計されていることが分かります。バックカバーは8つのクリップで固定され、プラスチックカードで外せます。その下には5本のプラスねじ(PH1)があり、底面に1本、背面に4本あります。バッテリーはプッシュラッチ式コネクタで、他の作業より先に外す必要があります。ディスプレイのフレキシブルケーブルはスパッジャーで外すラッチ、メイン基板は3本のねじ、コントロール基板は5つのラッチ、前面ディスプレイの裏蓋は6つのラッチ、ボタンスタビライザーは3本のねじで固定されています。モニターマウントの脚は摩擦ではめ込む方式です。

接着されている箇所は一切なく、バッテリーは4ピンコネクタの標準的な18650セルなので、交換用はたいていの電子部品店で安く簡単に入手できます。2026年のコンシューマー機器としては、修理する権利を支持する仲間たちにはたまらないポイントでしょう。

ファームウェア

ファームウェアのソースはGitHubのbusy-app/busybar-firmwareで公開されています。純正コードの大部分はGPL、furiライブラリはMIT、グラフィックアセットはCC BY 4.0、フォントはOFL 1.1で、いずれもREUSEマニフェストで明記されています。

ビルドシステムはFBT、つまりFlipper Zeroでも使われているSConsベースのFlipper Build Toolです。依存関係は定番の組み込みスタックで、Flipper独自のfuri抽象化の下にFreeRTOS、TCP/IPにlwIP、USBデバイス側にTinyUSB、組み込みHTTP/WebSocketサーバーとしてMongoose、TLSにmbedTLS、UIにLVGLという構成です。

本機はlib/jerryscriptJerryScriptも含んでおり、lib/js_appjs_runnerサービス経由で組み込まれています。これはFlipper Zeroがスクリプトアプリに使っているのと同じJavaScriptエンジンです。エンジン自体はすでにファームウェアに入っているので、あとは自分のスクリプトをデバイスに読み込むための正式な手順が文書化されるのを待つだけ、という状況です。

HTTP API

BUSY BarはHTTPサーバーを内蔵し、3つの伝送経路で同じAPIを提供します。仕様はOpenAPI 3.1として文書化されています。

デバイスをUSBでパソコンにつなぐと仮想イーサネットインターフェースが立ち上がり、本体は固定の10.0.4.20でアクセスできます。このアドレスは本体背面にも印字されています。http://10.0.4.20/がローカルのWebインターフェース、http://10.0.4.20/docsが現在デバイスに入っているファームウェアが生成するAPIリファレンス、http://10.0.4.20/apiがそのAPIのベースURLです。USB経由では認証は不要ですが、Wi-Fi経由では任意で、Flipperのクラウド経由では必須になります。

curl -s http://10.0.4.20/api/status/power
{
  "state": "discharging",
  "battery_charge": 99,
  "battery_voltage": 4183,
  "battery_current": -180,
  "usb_voltage": 4843
}

このリクエストは現在の電源状態を返します。バッテリー電流はmA、バッテリー電圧とUSB電圧はmV単位なので、追加のハードウェアなしでデバイス自身の消費電力をグラフ化できます。

注意:Wi-Fi経由のアクセスはデフォルトで無効になっており、まずはUSB経由のローカルWebインターフェースから有効にする必要があります。有効化後は認証用のトークンを自分で決められ、設定した場合はX-API-Tokenヘッダーに入れて送ります。

curl -s http://192.168.1.42/api/status \
  -H 'Accept: application/json' \
  -H 'X-API-Token: 12345678'

インターネット経由のアクセスはFlipperのクラウドを経由し、cloud.busy.appで生成したベアラートークンを使います。トークンは単一デバイスまたはアカウント単位でスコープを設定できます。

curl -s https://api.busy.app/busybar/status \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer <token>'

ライブラリ

FlipperはPython向けにbusylibを提供しており、同期クライアントとasyncioクライアントの両方があります。メソッド名はAPIパスにそのまま対応しており、たとえば/api/display/drawdisplay_drawに、/api/storage/removestorage_removeになります。そのためOpenAPIドキュメントをそのままライブラリのリファレンスとして使えます。

from busylib import BusyBar, types

bb = BusyBar("10.0.4.20")

bb.display_draw(
    types.DisplayElements(
        application_name="my-app",
        elements=[
            types.TextElement(
                id="status",
                type="text",
                x=2,
                y=4,
                text="BUILDING",
                font="small",
                display=types.DisplayName.FRONT,
            ),
        ],
    )
)

このライブラリには、デバイス向けに画像や音声をスケーリングして再エンコードするconverterモジュール、_busybar._tcp用のmDNSディスカバリーヘルパー、ファームウェアの互換性チェック機能も含まれています。

さらに、そいdevの皆さん向けの公式TypeScriptライブラリや、コミュニティがメンテナンスしている.NETクライアントもあります。そしてZigライブラリもあるのですが……それはもう少しあとで。:-)

スマートホーム

BUSY BarMatterに対して単一のオン/オフエンドポイントとして振る舞い、起動時の状態をoffontogglelastから選べるエミュレートされたスイッチとして見えます。オンにするとBUSYタイマーが開始し、オフにすると終了するため、この連携はトリガーとして機能します。Matter側へ状態を報告するにはSettings ➔ Smart homeをオンにする必要があり、有効にするとフォーカスセッションに連動して照明を暗くしたり、タイマー開始時にドアをロックしたりといったオートメーションを動かせます。

ペアリングは背面スクリーンまたはWebインターフェースに表示されるQRコードで行い、デバイスは複数のファブリックに同時にコミッショニングできます。

Home Assistantとの連携は、汎用のREST機能を使ってHTTP API経由で行います。双方向に動作し、デバイスをオートメーションのトリガーとしても、家の中の何かを出力する先としても使えます。

アプリ

BUSY Barにはスマートフォン用のモバイルアプリも用意されています。iOSアプリを試してみましたが、まあ、可もなく不可もなく、といったところです。もともとスマホアプリをあまり使わないタイプなので、あくまで個人的な感想として書きます。

アプリは基本的にバーの現在の状態をミラーリングし、簡単な操作ができる程度です。タイマーを開始してアプリを設定済み(Flipperのクラウド経由)にしておくと、スマホのロック画面にタイマーを表示する常駐通知がプッシュされます。また、タイマー実行中に他のアプリの通知で集中が途切れないよう、おやすみモードを設定することも可能です。

私にはおまけ程度に感じましたが、人によっては価値がある機能かもしれません。とはいえ、アプリの評価はあまり高くなく、数日間iOS版を試した限り不具合はなかったものの、見た目も動きもどこか安っぽい印象は否めませんでした。大手ハードウェアメーカーの“おじさん”たちが、今の世代が求めているものだと勘違いして作ったようなアプリ、という感じです。

留意点

気になる点もいくつかありますが、どれも致命的というほどではありません。

Wi-Fi認証は単一の共有数字キーで、APIスキーマ上は^[0-9]{4,10}$に制約され、ローカルネットワーク上では暗号化されていないHTTPのプレーンヘッダーで送られます。最小の4桁ではキースペースは1万通りしかなく、レートリミットに関する記述も見つかりませんでした。アクセスモードのenumにはkeyのほかにenabledもあり、これはLAN上でキーをまったくなしでAPIを開放できてしまうことを意味します。したがって、10桁のキーを使い、信頼できないネットワークには繋がないのが賢明でしょう。

次に、coming soonの多さです。ユーザーアプリのインストール、JS SDK、Windowsアプリ、拡充されたアプリライブラリなどは、すべて将来の約束です。Flipperチームがいずれ実現することは疑っていませんが、技術に詳しくないユーザーにとっては、今の時点でほとんど何もできないデバイスを買わされたと感じてかなりフラストレーションが溜まるだろうと想像できます。特にWindows環境ではそうです。今手元に届くデバイスは、フォーカスタイマーであり、時計であり、ステータスディスプレイです。

最後に価格です。ウェイティングリスト登録者向けに179米ドル、最初の3,000台は199米ドル、最終的な小売価格は249米ドルとされています。249ドルとなると、特に現状のソフトウェアではかなり手が出しにくい価格です。技術に明るく、いじり倒したいから買うというのであれば、払う価値はあるかもしれませんが、以前に示したとおり、自分で作ればもっとずっと安く似たようなデバイスを組み立てられます。とくに工作の沼にすでにハマっている人ならなおさらです。

まとめ

Flipperは、まさにFlipperに期待する通りのデバイスを作ってくれました。これは心からの褒め言葉です。ハードウェアは、ステータスライトとしては過剰なまでの作り込みで、いつものFlipperらしさそのものです。本物のメカニカルスイッチ、本物のエンコーダー、交換可能な18650、公式の分解ガイド、そして接着剤は一切なし、です。

それだけの価値があるかどうかは、何に使いたいかに完全にかかっています。同僚に「話しかけないで」と伝えるためのデバイスとしては、高すぎるうえにまったく効果がありません。邪魔してくる人は、邪魔するなという表示くらいで止まってはくれないからです。こう言い換えましょう。BUSY Barの小売価格より50ドルほど安い金額で、机の上にSmith and Wessonのどれかを置けますが、その方が同僚を遠ざけるにはよほど効果的でしょう。

しかし、小さくて作りの良い、完全にスクリプト可能なRGBマトリクスとして、8GBのファイルシステム、WebSocket、そして複数のプログラムが互いに上書きすることなく一つの画面を共有できる精緻なプライオリティシステムを備えたデバイスとして見れば、このクラスで最もオープンで、おそらく最高の製品です。コミュニティが、Flipper自身もまだ思いついていないような使い方を見つけてくれることを期待しています。

PS: BUSY Barの電源を切るのはVimを終了するのに似ていて、直感的な方法が用意されていません。確かに天面のスイッチに「OFF」ポジションはあります。しかしあれはディスプレイを消すだけで、BUSY Bar自体は動き続け、Wi-Fiにも繋がったままです。バッテリーを消費しないように完全にシャットダウンしたい場合は、スイッチを「Settings」ポジションにして、SystemPowerShutdownと進み、Yesで確認する必要があります。そうして初めて、本当に電源が切れます。

おまけ:busybar.zig

前述したとおり、このレビューとあわせてちょっとしたおまけを共有したいと思います。BUSY Barの現行OpenAPI仕様にできる限り忠実に準拠したZigライブラリで、HTTP API経由でデバイスを操作できるbusybarコマンドラインツールも付属しています。

このライブラリはZigのstdライブラリだけを使っているため、Zigが対応するすべてのプラットフォームで動作し、軽量で使いやすい作りになっています。私自身BUSY Barで使っていますが、とても快調に動いています。コマンドラインツールには、ビジーモードの開始・停止を手軽に行えるコマンドなど、ちょっとした便利機能も入っています。本来ならJSONペイロードを手書きする必要があるところを肩代わりしてくれます。

手短に言えば、BUSY Barを注文した方で、Zigのツールに組み込みたい、あるいは自作スクリプトでデスクトップ環境に統合したいと考えているなら、ぜひbusybar.zigリポジトリを覗いてみてください。CLIツールだけを試したい場合も、対応する全プラットフォーム向けのビルドがGitHubのリリースページに用意されています。

原文は Marius により に公開されました。

この記事は「muse-spark-1.2-contributor」を使用して翻訳されました。