Flipper BUSY Bar
한때 Lemon을 만들었던 사람이 전하는 Flipper BUSY Bar 리뷰입니다. 72x16 RGB LED 매트릭스를 탑재한 탁상 기기로, GPL 펌웨어와 HTTP API, Matter 호환을 지원합니다.

네, 실존합니다. 지금 제 손에 들고 있습니다. Flipper가 온라인 곳곳에서 이 불길한 기기를 두고 몇 년간이나 티징을 이어온 끝에, 이제야 정말 실재한다고 확실히 말씀드릴 수 있습니다.
BUSY Bar는 Flipper Zero와 아직 한창 개발 중인 Flipper One을 만든 Flipper Devices의 250g 탁상 기기입니다. 기본적으로 72x16 RGB LED 매트릭스에 다양한 정보를 표시하는 작은 디스플레이인데, 이 글을 쓰는 시점에서 가장 내세우는 기능은 뽀모도로 방식의 집중 타이머를 실행할 수 있다는 점과, USB와 로컬 네트워크, 인터넷을 통해 접근할 수 있는 완전한 HTTP API로 기기를 제어할 수 있다는 점입니다.
BUSY Bar 상단에는 5단 셀렉터가 있어 두 가지 집중 모드(BUSY와 CUSTOM, 기능은 동일하고 기본값만 다릅니다)와 실제로는 두 화면을 모두 끄는 절전 모드에 가까운 OFF 위치, 현재는 시계만 들어 있는 앱 위치, 그리고 말 그대로 설정을 위한 설정 위치 사이를 전환합니다. 중앙의 큰 기계식 버튼으로 세션을 시작하고 일시 정지하며, 스크롤 휠로 타이머를 조절하고 OK 버튼으로도 사용할 수 있습니다. 마지막으로 뒤로 가야 할 때 쓰는 뒤로 가기 버튼이 있습니다.
뒤 얘기가 나와서 말인데, 기기 뒷면에는 타이머와 배터리 잔량, Wi-Fi와 Bluetooth, USB 상태를 보여주는 1.54인치 모노크롬 OLED가 있습니다. 덕분에 내장 마운트로 모니터 상단 가장자리에 끼워 메인 매트릭스 디스플레이를 사용자로부터 반대쪽으로 향하게 해도 기기 소유자는 여전히 기기를 활용할 수 있습니다.
제원

기기는 168.6 x 55.2 x 40.8mm 크기이며 무게는 250g/8.82oz입니다. 본체는 PC/ABS 재질에 앞뒤 패널은 PC, 모니터 마운트 패딩은 TPE로 만들어졌습니다. 바는 두께가 최대 21mm인 모니터에 장착할 수 있으며, 곡면 디스플레이에서도 동작함을 직접 확인했습니다. 다만 특히 얇은 모니터(이를테면 휴대용 디스플레이)에는 제대로 걸리지 않습니다.
Flipper 공식 문서에 게시된 전체 사양은 다음과 같습니다:
| 항목 | 세부 정보 |
|---|---|
| 메인 디스플레이 | 72x16 RGB LED 매트릭스, 활성 영역 158.4x35.2mm, 60 Hz; LED 크기 1.23x1.2mm, 피치 2.2mm, common anode; ICND2153 + ICN2012 드라이버; 조도 센서를 통한 수동 또는 자동 밝기 조절 |
| 후면 디스플레이 | 1.54인치 모노크롬 OLED, 160x80, 16단계 그레이, 60 Hz; SPI 연결 SSD1320 컨트롤러 |
| 메인 MCU | STM32U595RI, Arm Cortex-M33 @ 160 MHz, MPU/FPU/DSP 탑재; 2 MB 플래시, 2.5 MB SRAM |
| 무선 MCU | Silicon 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; Bluetooth Low Energy 5.4 |
| 저장 공간 | 8 GB eMMC NAND |
| 오디오 | 모노; I2S 연결 NS4168 DAC(44.1 kHz), 내장 class D 앰프; 6옴, 0.8W |
| 배터리 | 1셀 18650, 3250 mAh, A2007-H04 4핀 커넥터; 과충전, 과방전, 과열·저온 보호 |
| 충전 | 18W 이상 PD 충전기 사용 시 2.5시간, 그 외에는 7~8시간 |
| USB-C | USB 2.0 Full Speed 디바이스, 12 Mbit/s; PD 3.0, 5V⎓3A 및 9V⎓1.5A |
| 컨트롤 | 기계식 스위치, 스크롤 휠 엔코더, 5단 모드 셀렉터, 뒤로 가기 버튼 |
72x16 매트릭스는 16비트 그레이스케일 시프트 레지스터와 LED 개방 감지, 고스팅 저감을 위한 프리차지 회로를 갖춘 16채널 정전류 PWM 싱크 드라이버 ICND2153과 ICN2012 8채널 파워 스위치로 구동됩니다.
2026년 시점에서 살짝 아쉬운 점은 Wi-Fi가 2.4 GHz 전용이라는 것입니다. 기기와 전자레인지로 가득한 사무실 환경에서 바는 가장 혼잡한 대역을 사용하게 됩니다. USB 쪽도 최대 속도 12 Mbit/s로, 뭐랄까 가볍게 유지되어 있지만, 웹 UI와 HTTP API를 제공하는 가상 이더넷 인터페이스 용도로는 충분히 빠릅니다.
충전 측면에서는 문서상 2.5시간 충전을 위해 18W 이상 PD 충전기를 요구하지만, 기기 자체는 PD 모드로 5V⎓3A(15W)와 9V⎓1.5A(13.5W)만 사용하는 것으로 보입니다.
디스플레이 밝기에 대해서는 불일치가 하나 있습니다. 기술 사양 페이지에는 밝기 수치가 아예 없고, 제품 페이지에는 현재 400니트라고 적혀 있으며, CNX Software와 XDA의 출시 보도에서는 모두 800니트로 표기되어 있습니다. 측정 장비가 없어 어느 수치가 맞는지 알 수는 없지만, 밝게 조명된 공간에서도 충분히 밝다는 점은 확실히 말씀드릴 수 있습니다.
내부 구조

Flipper는 iFixit에 공식 분해 가이드를 공개했는데, 정말 멋진 일입니다. 21단계로 구성된 이 가이드는 수리 용이성을 염두에 두고 설계된 기기를 보여줍니다. 후면 커버는 8개의 클립으로 고정되어 플라스틱 카드로 분리할 수 있습니다. 그 아래에는 PH1 십자 나사 5개가 있으며, 하단에 1개, 후면에 4개가 있습니다. 배터리는 누름 래치 커넥터로 연결되어 있어 다른 어떤 작업보다 먼저 분리해야 합니다. 디스플레이 플렉스 케이블은 스퍼저로 여는 래치를 사용하고, 메인 PCB는 나사 3개, 컨트롤 PCB는 래치 5개, 전면 디스플레이 후면 커버는 래치 6개, 버튼 스태빌라이저는 나사 3개로 고정되어 있습니다. 모니터 마운트 다리는 마찰 끼워 맞춤 방식입니다.
접착된 부분은 하나도 없고 배터리는 4핀 커넥터에 연결된 표준 18650 셀이라, 대부분의 전자 부품 상점에서 쉽고 저렴하게 교체품을 구할 수 있습니다. 2026년 소비자 기기로서는 수리할 권리를 지지하는 분들이 좋아할 만한 부분일 겁니다.
펌웨어

펌웨어 소스는 GitHub의 busy-app/busybar-firmware에 공개되어 있습니다. 대부분 자사 코드는 GPL, furi 라이브러리는 MIT, 그래픽 자산은 CC-BY 4.0, 폰트는 OFL 1.1이며, 모두 REUSE 매니페스트에 명시되어 있습니다.
빌드 시스템은 Flipper Zero에도 쓰이는 SCons 기반 Flipper Build Tool인 FBT이며, 의존성은 Flipper 자체 furi 추상화 아래 FreeRTOS, TCP/IP용 lwIP, USB 디바이스용 TinyUSB, 임베디드 HTTP·WebSocket 서버인 Mongoose, TLS용 mbedTLS, UI용 LVGL 등 일반적인 임베디드 스택으로 구성되어 있습니다.
바에는 lib/jerryscript에 있는 JerryScript도 포함되어 있으며, lib/js_app과 js_runner 서비스를 통해 연결되어 있습니다. 이는 Flipper Zero가 스크립팅 앱에 사용하는 것과 동일한 JavaScript 엔진입니다. 엔진이 이미 펌웨어에 들어 있는 만큼, 아직 빠져 있는 것은 기기에 직접 스크립트를 올리는 문서화된 방법뿐인 것으로 보입니다.
HTTP API

BUSY Bar는 HTTP 서버를 실행하며 OpenAPI 3.1로 문서화된 동일한 API를 세 가지 전송 경로로 제공합니다.
기기를 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를 통한 로컬 웹 인터페이스에서 활성화해야 합니다. 활성화한 뒤에는 인증용 토큰을 선택할 수 있으며, 토큰을 설정한 경우
X-API-Token헤더에 넣어 사용합니다:curl -s http://192.168.1.42/api/status \ -H 'Accept: application/json' \ -H 'X-API-Token: 12345678'인터넷을 통한 접근은
cloud.busy.app에서 생성한 bearer 토큰으로 Flipper 클라우드를 거쳐 이루어지며, 단일 기기 또는 계정 단위로 범위를 지정할 수 있습니다: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 discovery 헬퍼, 펌웨어 호환성 체크 기능도 포함되어 있습니다.
그 외에도 모든 soydev를 위한 공식 TypeScript 라이브러리와 커뮤니티에서 유지 관리하는 .NET 클라이언트가 있습니다. 그리고 Zig 라이브러리도 있는데… 잠시 후에 더 자세히 다루겠습니다. :-)
스마트 홈

BUSY Bar는 Matter에서 시작 상태가 off, on, toggle 또는 last로 설정 가능한 단일 on/off 엔드포인트, 즉 에뮬레이트된 스위치로 자신을 표시합니다. 이를 켜면 BUSY 타이머가 시작되고 끄면 종료되므로, 연동은 트리거로 동작합니다. 상태를 다시 Matter로 보고하려면 설정 ➔ 스마트 홈을 켜야 하며, 그러면 타이머가 켜질 때 조명을 어둡게 하거나 문을 잠그는 등 집중 세션으로 자동화를 실행할 수 있습니다.
페어링은 후면 화면이나 웹 인터페이스에 표시되는 QR 코드로 이루어지며, 기기는 여러 패브릭에 동시에 커미셔닝될 수 있습니다.
Home Assistant 연동은 범용 REST 기능을 이용한 HTTP API로 이루어지며, 양방향으로 동작합니다. 즉, 자동화의 트리거로서의 기기, 그리고 집 안의 다른 요소를 위한 출력 장치로서의 기기 모두로 활용할 수 있습니다.
앱
BUSY Bar에는 스마트폰용 모바일 앱이 함께 제공됩니다. iOS 앱을 테스트해 봤는데, 뭐… 그냥 그럭저럭 괜찮았습니다. 원래 스마트폰 앱을 많이 쓰는 편은 아니지만, 여기서 두어 마디 덧붙이겠습니다.
앱은 기본적으로 바의 현재 상태를 그대로 보여주고 간단한 제어를 제공합니다. 타이머를 시작하고 앱을 (Flipper 클라우드를 통해) 설정해 두면, 스마트폰 잠금 화면에 타이머를 표시하는 상시 알림을 앱이 푸시합니다. 또한 타이머가 실행되는 동안 다른 앱이 집중 세션을 방해하지 못하도록 방해금지 모드를 설정할 수도 있습니다.
제게는 이런 기능들이 그저 장식에 가깝지만, 다른 사람들에게는 의미가 있을 수도 있습니다. 그렇다고는 해도 앱 평점은 그다지 높지 않으며, 며칠간 iOS 버전을 테스트하는 동안 별다른 문제는 겪지 않았지만 앱의 외관과 동작 방식에서 어딘가 싼 티가 난다는 인상을 받았습니다. 대형 하드웨어 제조사에서 일하는 꼰대 임원들이 오늘날 세대가 원하는 것과 부합한다고 착각하며 만들어 냈을 법한 앱처럼 느껴졌습니다.
아쉬운 점
거슬리는 부분이 몇 가지 있지만, 어느 것도 결정적인 단점은 아닙니다.
Wi-Fi 인증은 API 스키마상 ^[0-9]{4,10}$로 제한된 단일 공유 숫자 키이며, 로컬 네트워크에서 암호화되지 않은 HTTP의 평문 헤더로 전송됩니다. 네 자리 최소값 기준으로는 가능한 경우가 10,000가지에 불과하며, 속도 제한(rate limiting)에 대한 문서도 찾지 못했습니다. 접근 모드 enum에는 key 외에도 enabled 값이 있어, 키 없이도 LAN에서 API를 개방할 수 있습니다. 따라서 열 자리 키를 사용하고, 직접 관리하지 않는 네트워크에서는 기기를 꺼 두는 것이 좋습니다.
다음으로는 온통 출시 예정인 것들입니다. 사용자 앱 설치, JS SDK, Windows 애플리케이션, 확장된 앱 라이브러리 등은 모두 앞으로 나올 것이라는 약속일 뿐입니다. Flipper 팀이 결국에는 내놓을 거라 믿어 의심치 않지만, 비전문 사용자가 당장 거의 아무 기능도 할 수 없는 기기를 샀을 때는 매우 답답할 수 있으리라 생각합니다. 특히 Windows 기기에서는 더 그렇습니다. 오늘 도착하는 기기는 집중 타이머이자 시계이며, 상태 표시등 그 이상도 이하도 아닙니다.
마지막으로 가격입니다. 대기 명단 멤버에게는 179달러, 이후 선착순 3,000대에는 199달러로 출시되었고, 최종 정상가는 249달러로 고지되었습니다. 249달러라면, 특히 현재 소프트웨어 상태를 고려하면 선뜻 손이 가지 않는 가격입니다. 기술에 밝은 사용자라서 이 기기를 직접 만져보고 싶어 구매하는 것이라면 그만한 가치가 있을지도 모릅니다. 하지만 과거에 제가 보여드렸듯 이미 tinkering의 세계에 깊이 들어와 있다면 훨씬 더 저렴하게 비슷한 기기를 직접 만들 수 있습니다.
총평

Flipper는 제가 기대했던 바로 그 기기를 만들어 냈고, 이는 진심 어린 칭찬입니다. 하드웨어는 상태 표시등 치고는 과하게 잘 만들어졌습니다. Flipper 하드웨어가 늘 그렇듯 진짜 기계식 스위치와 진짜 엔코더, 교체 가능한 18650 배터리, 공식 분해 가이드가 있고 접착제도 전혀 사용되지 않았습니다.
돈값을 하느냐는 무엇을 하려고 사느냐에 전적으로 달려 있습니다. 동료에게 말을 걸지 말라는 신호를 보내는 용도라면 너무 비싸고 전혀 효과적이지도 않습니다. 끼어드는 사람들은 하지 말라는 표지판 따위에 멈추지 않기 때문입니다. 이렇게 말하겠습니다. BUSY Bar 정상가보다 약 50달러 저렴한 가격으로 책상 위에 Smith and Wesson 제품 중 하나를 올려놓는 편이 동료의 말을 막는 데는 아마 더 효과적일 겁니다.
하지만 8 GB 파일 시스템과 WebSocket, 그리고 여러 프로그램이 서로 덮어쓰지 않고 한 화면을 공유할 수 있도록 하는 정교한 우선순위 시스템을 갖춘, 작고 튼튼하며 완전히 스크립트 가능한 RGB 매트릭스로서는 동급에서 가장 개방적이고 아마도 가장 훌륭한 제품이며, 커뮤니티가 Flipper가 아직 생각하지 못한 활용법을 찾아낼 거라 기대합니다.
추신: BUSY Bar를 끄는 것은 Vim을 종료하는 것과 비슷합니다. 명확한 방법이 없다는 점에서 그렇습니다. 네, 상단에 “OFF” 위치가 있는 스위치가 있습니다. 하지만 그건 단순히 디스플레이만 끄고, BUSY Bar 자체는 계속 켜진 채 Wi-Fi에도 연결된 상태로 유지됩니다. 배터리를 전혀 소모하지 않도록 기기를 완전히 종료하려면 스위치를 “Settings” 위치로 옮긴 뒤 System, Power, Shutdown으로 이동해 Yes로 전원 끄기를 확인해야 합니다. 그제야 기기가 실제로 꺼집니다.
보너스: busybar.zig
앞서 언급했듯 이번 리뷰와 함께 공유하고 싶은 보너스가 하나 있는데, 바로 BUSY Bar의 현재 OpenAPI 명세를 최대한 충실히 구현하고 HTTP API를 통해 기기를 제어할 수 있는 busybar 커맨드라인 도구를 제공하는 Zig 라이브러리입니다.
이 라이브러리는 Zig의 std 라이브러리만 사용하므로 Zig가 지원하는 모든 플랫폼 타깃에서 동작하며, 가볍고 사용하기 쉽습니다. 제 BUSY Bar에서 사용 중인데 아주 잘 동작하고 있습니다. 커맨드라인 도구에는 바쁜 모드를 시작하고 중지하는 간단한 명령어처럼, 직접 JSON 페이로드를 작성해야 하는 수고를 덜어주는 여러 편의 기능이 들어 있습니다.
요컨대, BUSY Bar를 주문한 분들 중 Zig 도구로 연동하거나 단순히 직접 작성한 스크립트로 데스크톱 환경에 통합하려는 분이 있다면 busybar.zig 저장소를 확인해 보시길 권합니다. CLI 도구만 가지고 놀고 싶다면 GitHub 릴리스 페이지에서 지원되는 모든 플랫폼용 빌드를 찾을 수 있습니다.
글을 무작위로 읽기