Flipper BUSY Bar

Marius

Flipper BUSY Bar

原文由 Marius 发布,订阅该博客

一篇关于Flipper BUSY Bar的评测——这是一款搭载 72×16 RGB LED 点阵的桌面设备,配备 GPL 固件、HTTP API 并支持 Matter,作者正是当年打造了Lemon的那个人。

Flipper BUSY Bar

是的,它确确实实存在,此刻就在我手上。在 Flipper 于网上用这台神神秘秘的设备吊足大家胃口、感觉都过去好几年之后,我终于可以确认:它是真的。

BUSY BarFlipper Devices推出的一款重 250 克的桌面设备,这家公司正是Flipper Zero以及仍在紧锣密鼓开发中的Flipper One背后的团队。它本质上就是一块小屏幕,在 72×16 的 RGB LED 点阵上显示各种内容;就本文撰写之时而言,它最主要的卖点是能运行番茄钟式的专注计时器,以及提供了一套完整、可通过 USB、局域网和互联网访问的 HTTP API,让你可以随心控制它。

机身顶部有一个五档拨杆,可在两种专注模式(BUSYCUSTOM,两者功能完全一致,仅默认设置不同)、OFF档(实际上更像是休眠模式,会关闭两块屏幕)、应用档(目前只有时钟)和设置档之间切换。中间有一颗大大的机械按键用于开始/暂停计时,滚轮可调节时长,同时兼作OK键,最后还有一颗返回键用于回退操作。

说到背面,设备背面有一块 1.54 英寸的单色 OLED 屏,用于显示计时器、电量百分比以及 Wi-Fi、蓝牙和 USB 状态指示。这样一来,即使用自带支架把它夹在显示器顶部、让主点阵屏背对使用者,使用者自己也能照常使用。

规格

设备尺寸为 168.6×55.2×40.8 毫米,重 250 克/8.82 盎司。机身采用 PC/ABS 材质,前后面板为 PC,显示器支架的衬垫为 TPE。支架可适配厚度不超过 21 毫米的显示器,我也已确认它在曲面屏上同样可用。不过,如果你的显示器特别薄(比如某些便携屏),它就无法稳固地架在上面了。

根据Flipper 官方文档公布的完整规格如下:

规格详情
主显示屏72×16 RGB LED 点阵,有效显示区域 158.4×35.2 毫米,60 Hz;LED 尺寸 1.23×1.2 毫米,点间距 2.2 毫米,共阳极;ICND2153 + ICN2012驱动;支持通过光线传感器手动或自动调节亮度
背面显示屏1.54 英寸单色 OLED,160×80 分辨率,16 级灰阶,60 Hz;SSD1320控制器,通过 SPI 连接
主控 MCUSTM32U595RI,Arm Cortex-M33 @ 160 MHz,带 MPU、FPU 和 DSP;2 MB 闪存,2.5 MB SRAM
无线 MCUSilicon Labs SiWG917M111MGTBA,Arm Cortex-M4F @ 180 MHz;8 MB 闪存,672 KB SRAM
无线连接Wi-Fi 6(IEEE 802.11 b/g/n/ax),仅支持 2.4 GHz,WPA3;低功耗蓝牙 5.4
存储8 GB eMMC NAND
音频单声道;NS4168 DAC,通过 I2S 以 44.1 kHz 输出,内置 D 类功放;6 欧,0.8 瓦
电池单节 18650 电池,3250 mAh,A2007-H04 4 针接口;具备过充、过放、过温及低温保护
充电使用 18 瓦及以上 PD 充电器约 2.5 小时充满,否则需 7 至 8 小时
USB-CUSB 2.0 Full Speed 设备,12 Mbit/s;PD 3.0,5V⎓3A 与 9V⎓1.5A
操控机械开关、滚轮编码器、五档模式选择拨杆、返回键

这块 72×16 点阵由ICND2153驱动,这是一颗 16 通道恒流 PWM 灌电流驱动芯片,带 16 位灰度移位寄存器、LED 开路检测和用于减少重影的预充电电路,再配合 ICN2012 这颗 8 通道电源开关使用。

在 2026 年,Wi-Fi 仅支持 2.4 GHz 多少让人有点遗憾。在遍布各种设备和微波炉的办公环境里,这意味着它只能工作在最拥挤的频段上。USB 方面也说得好听点是相当轻量,最高速率只有 12 Mbit/s,不过用来跑一个提供网页界面和 HTTP API 的虚拟网卡倒也完全够用了。

充电方面,文档称要达到 2.5 小时充满需要 18 瓦及以上的 PD 充电器,但设备本身似乎只支持 5V⎓3A(15 瓦)和 9V⎓1.5A(13.5 瓦)两种 PD 档位。

关于屏幕亮度存在一处不一致:技术规格页完全没有标注亮度数值,产品页目前写的是 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,依赖也是一套常见的嵌入式技术栈:底层是FreeRTOS,之上是 Flipper 自家的furi抽象层,lwIP负责 TCP/IP,TinyUSB负责 USB 设备端,Mongoose作为嵌入式 HTTP 与 WebSocket 服务器,mbedTLS负责 TLS,LVGL负责界面。

设备还通过lib/js_appjs_runner服务集成了位于lib/jerryscript中的JerryScript,这正是Flipper Zero用于脚本应用的 JavaScript 引擎。既然引擎已经内置在固件中,眼下似乎只差一份如何将自己的脚本加载到设备上的官方文档了。

HTTP API

BUSY Bar运行着一个 HTTP 服务器,并通过三种传输方式提供同一套 API,文档以OpenAPI 3.1形式提供。

通过 USB 将设备连接到电脑时,会出现一个虚拟以太网接口,设备固定地址为10.0.4.20,印在机身背面。http://10.0.4.20/是本地网页界面,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 在本地网页界面中开启。开启后,你可以设置一个用于认证的 token,如需使用,它将通过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生成的 bearer token,可限定为单台设备或整个账户:

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

客户端库

Flipper 为 Python 维护了busylib,同时提供同步和asyncio客户端。它将方法名直接映射到 API 路径,例如/api/display/draw对应display_draw/api/storage/remove对应storage_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 发现辅助工具,以及固件兼容性检查功能。

除此之外,还有面向所有 soydev 的官方 TypeScript 库,以及社区维护的.NET 客户端。另外还有一个 Zig 库,不过……稍后再细说。:-)

智能家居

BUSY BarMatter中表现为一个单一的开关端点,即一个模拟开关,启动状态可配置为offontogglelast。将其打开会启动BUSY计时器,关闭则会结束计时,从而使该集成成为一个触发器。要向Matter回传状态,需要在Settings ➔ Smart home中开启该功能,之后专注时段即可驱动自动化,例如在计时开始时调暗灯光或锁门。

配对通过背面屏幕或网页界面上的二维码完成,设备可同时加入多个 Fabric。

Home Assistant的集成通过 HTTP API 并利用通用 REST 功能实现,可双向工作:既能让设备作为自动化触发器,也能让它作为家中其他设备的输出端。

应用

BUSY Bar为智能手机提供了配套的移动应用。我试用了它的 iOS 版,只能说,还行吧。本来我就不太常用手机应用,不过还是在这里说说我的看法。

该应用基本上就是镜像显示 BUSY Bar 的当前状态,并提供一些基础控制。启动计时器后,如果你已通过 Flipper 云端配置好应用,就会看到它推送一条常驻通知,在手机锁屏上显示计时器。还可以配置勿扰模式,在计时器运行时阻止其他应用打扰你的专注时段。

对我来说这些更像是噱头,但对其他人或许有价值。话虽如此,这些应用的评分并不高,虽然我在测试 iOS 版的几天里没有遇到什么问题,但无论外观还是功能,它都给人一种有点廉价的感觉。就像某些大型硬件厂商里那些企业老派人士想出来的应用,误以为自己迎合了当今年轻一代的需求。

不足之处

有几处让我不太满意的地方,不过都算不上致命缺陷。

Wi-Fi 认证仅使用一个共享的数字密钥,按 API 模式限制为^[0-9]{4,10}$,通过局域网内未加密的 HTTP 以明文请求头发出。在最低 4 位长度下,密钥空间只有 10000 种可能,而且我没有找到任何关于限流的说明。访问模式的枚举中除了key还有一个enabled值,这意味着 API 可以在局域网上完全无密钥开放。因此,最好使用 10 位密钥,并避免让设备接入你无法掌控的网络。

然后就是一堆即将推出的功能。安装用户应用、JS SDK、Windows 应用程序以及更丰富的应用库,这些目前都还只是未来的承诺。我并不怀疑 Flipper 团队最终会兑现,但可以想象,对于非技术用户来说,花钱买到一台目前几乎干不了什么的设备,尤其是在 Windows 电脑上,可能会非常令人沮丧。现阶段到手的设备,无非就是一个专注计时器、一块时钟和一个状态显示屏。

最后是价格。它面向候补名单用户的首发价为 179 美元,随后前 3000 台为 199 美元,最终零售价定为 249 美元。以 249 美元的价格,尤其是在目前的软件状态下,很难让人下手。如果你是技术用户,真心想拿来折腾,那或许还算值,但正如我过去所展示的,类似的设备完全可以自己以低得多的成本做出来,特别是当你已经深陷折腾的兔子洞时。

总结

Flipper 打造出了我预期中他们会做出来的设备——这是一句真心的赞美。就像Flipper的硬件一贯如此,这台状态灯在硬件上可谓过度设计:真正的机械开关、真正的编码器、可更换的 18650 电池、官方拆解指南,而且全机无一处用胶。

它是否值这个价,完全取决于你打算拿它来做什么。如果只是想靠它告诉同事“别来打扰”,那它不仅太贵,而且根本不管用——那些会打断你的人,并不会因为一块写着“请勿打扰”的牌子就罢休。换句话说:花比BUSY Bar零售价低大约 50 美元的钱,你就能在桌上摆上一把Smith and Wesson的某款产品,恐怕更能有效地阻止同事来找你搭话。

然而,作为一块小巧、做工精良、完全可编程的 RGB 点阵屏,配备 8 GB 文件系统、WebSocket 以及一套精巧的优先级系统,让多个程序可以共享同一块屏幕而互不覆盖,它在同类产品中是最开放、也可能是最好的。我相信社区会发掘出连 Flipper 自己都未曾想到的用途。

PS:关闭BUSY Bar就像退出 Vim 一样,找不到显而易见的方法。是的,顶部的拨杆有一个“OFF”档,但它只是关闭屏幕,BUSY Bar本身仍在运行并保持 Wi-Fi 连接。如果你想彻底关机以避免耗电,必须将拨杆拨到“Settings”档,依次进入SystemPowerShutdown,并用Yes确认关机。只有这样设备才会真正关闭。

彩蛋:busybar.zig

如前所述,我想随这篇评测分享一个小彩蛋:一个尽可能贴近BUSY Bar当前 OpenAPI 规范实现的 Zig 库,它还提供了一个busybar命令行工具,让你可以通过 HTTP API 控制设备。

该库仅使用 Zig 的std标准库,因此支持 Zig 的所有平台目标,本身也相当轻量、易于使用。我自己就在BUSY Bar上使用它,体验非常好。命令行工具还包含一些提升体验的小功能,例如用于启动和停止忙碌模式的简易命令,否则这些操作就需要手动编写 JSON 载荷。

长话短说,如果你已经订购了BUSY Bar,正想把它集成到 Zig 工具链中,或者只是想用自己的脚本把它接入桌面环境,欢迎去看看busybar.zig仓库。如果只是想拿 CLI 工具来把玩一下BUSY Bar,可以在GitHub 的发布页找到适用于所有支持平台的构建版本。

本文章由 muse-spark-1.2-contributor 进行翻译

评论