TECH 으로 돌아가기
TECH HACKER NEWS 7분 읽기 23 READS

25달러 스마트워치에 최신 마이크로파이썬을 되살리다

25달러 스마트워치에 최신 마이크로파이썬을 되살리다
SOURCE IMAGE · HACKER NEWS

파인타임(PineTime)은 핀64(Pine64)가 내놓은 저렴하고 개방적인, 그리고 마음껏 뜯어볼 수 있는 스마트워치다. 겉모습만 보면 애플워치 같은 기기를 떠올리기 쉽지만 성격은 전혀 다르다. 700달러에 달하는 애플워치와 달리 이 기기는 25달러 수준이며, 컬러 디스플레이와 블루투스, 걸음 수 측정, 심박 센서를 갖춘 '프로그래밍 가능한 카시오 시계'에 가깝다. 한 개발자가 서랍 속에 묵혀 두었던 자신의 파인타임을 꺼내, 파이썬 기반 시계 운영체제인 wasp-os를 최신 마이크로파이썬 위에서 다시 돌아가게 만든 과정이 이번 이야기의 핵심이다.

킬로바이트 단위의 제약

이 작업이 흥미로운 이유는 하드웨어 사양 자체가 극단적으로 빠듯하기 때문이다. 파인타임은 64MHz ARM Cortex-M4 프로세서에 램이 단 64KB, 펌웨어용 플래시 512KB, 파일 저장용 외장 플래시 4MB를 갖췄다. 블루투스 스택과 마이크로파이썬 자체가 메모리를 나눠 쓰고 나면 앱이 실제로 쓸 수 있는 램은 약 12KB에 불과하다. 화면은 1.3인치에 240×240 픽셀, 인치당 약 260픽셀로 또렷한 편이지만, 배터리 수명 문제로 상시 표시(always-on)는 지원하지 않는다. 이는 과거 애플워치도 겪었던 제약이다. 요컨대 이 기기 위에서 돌아가는 모든 소프트웨어는 작아야만 한다.

파인타임은 기본적으로 C++로 작성된 인피니타임(InfiniTime)을 탑재해 출하된다. 그 자체로 문제는 없지만, 파이썬 커뮤니티를 운영하는 입장에서는 마이크로파이썬 기반인 wasp-os 쪽이 자연스러운 선택이었다. 문제는 이 프로젝트가 2023년 시점에 이미 사실상 방치 상태였다는 점이다. 2019년 버전의 마이크로파이썬을 포크해서 쓰고 있었고 빌드도 까다로웠으며, 최근에는 유지보수자가 새 관리자를 찾는다는 안내까지 붙었다. 오래된 포크에 묶여 있다는 것은 상류(upstream)의 버그 수정과 개선을 받지 못한다는 뜻이고, 이는 임베디드 오픈소스 프로젝트가 서서히 고사하는 전형적인 경로다.

포크를 버리고 본류로

이번 작업에서 가장 실질적인 성과는 wasp-os를 2019년 포크에서 벗어나 마이크로파이썬 본류(mainline)로 옮긴 부분이다. 이 포팅 과정에서 마이크로파이썬 자체에도 손을 대야 했고, 개발자는 세 건의 풀 리퀘스트를 상류에 제출했다. 고정 네이티브 코드(frozen native code), PWM 할당 수정, ADC 샘플 시간 옵션이 그것이다. 세 건 모두 병합되면서 wasp-os는 처음으로 포크 없이 최신 본류 마이크로파이썬 위에서 동작하게 됐다. 해당 변경은 12월로 예정된 마이크로파이썬 1.30을 목표로 하고 있다. 자신이 쓰려는 기능을 로컬 패치로 쌓아 두는 대신 상류에 반영시켜 포크 부채 자체를 없앴다는 점은, 소규모 임베디드 프로젝트를 다루는 실무자에게 참고할 만한 접근이다.

되살린 플랫폼 위에서 개발자는 몇 가지 워치페이스를 직접 만들었다. 첫 번째는 기존 '주간 시계'를 네덜란드어로 옮긴 것으로, 요일을 두 글자로 축약해 'ma 26 okt 2026'처럼 표시한다. 메모리가 워낙 작아 다국어를 통째로 담는 전면적 국제화는 불가능하지만, 워치페이스 하나만 번역해 빌드한 뒤 올리는 방식으로 현지화를 해결할 수 있다는 점을 보여준다. 두 번째는 8비트풍 시계로, 6×7 픽셀의 작은 폰트에서 가져온 숫자를 시간은 7×7, 나머지는 3×3 화면 픽셀 블록으로 그려 복고풍을 낸다. 별도의 폰트 데이터가 전혀 필요 없으며, 시간과 ISO 8601 날짜 아래에 유닉스 에포크를 초 단위로 세어 보여준다.

작은 플래시를 다루는 기술

마무리로 만든 '귀도(Guido) 앱'은 파이썬 창시자 귀도 반 로섬의 블록 형태 초상화를 보여주고, 스와이프할 때마다 파이썬 로고, 마이크로파이썬 로고, 그리고 지역 모임인 파이썬 레이던 밋업 로고로 넘어간다. 여기서 드러나는 것이 플래시 용량과의 싸움이다. 펌웨어가 쓸 수 있는 공간은 약 330KB인데, 전체 화면 한 장을 원시 픽셀로 저장하면 112KB, 즉 전체의 3분의 1을 잡아먹는다. 개발자는 사진당 최대 16색에 런렝스 인코딩(RLE)을 적용한 작은 이미지 포맷을 직접 만들고, 화면에 곧바로 그려 넣는 약 40줄짜리 디코더를 붙였다. 그 결과 그림 네 장을 합쳐 12KB 미만으로 줄였다. 초상화는 80×80 픽셀 16색을 세 배로 확대해 240×240 화면을 채웠고, 로고는 전체 해상도로 선명하게 그렸다. 원본 사진은 쿠샬 다스가 파이콘 US 2024에서 촬영해 CC BY-SA 4.0으로 공개한 것이며, 블록 버전도 같은 라이선스로 공유된다.

다만 이 재미있는 앱조차 기본 포함되기에는 용량이 부담스러워, 사용자가 직접 빌드에 추가해야 하는 선택 요소로 남겨 뒀다. 이런 결정은 극소형 기기 개발에서 '있으면 좋은 것'과 '항상 넣을 것'을 어떻게 구분하는지를 보여준다. 한편 핀64는 410×502 AMOLED 화면, GPS, 듀얼코어 Cortex-M33, 디지털 크라운을 갖춘 후속작 파인타임 프로(PineTime Pro)를 개발 중이다. 아직 초기 단계로 출시일은 없고 기존 파인타임도 계속 생산된다. 이 프로젝트는 당장 모두가 따라 할 실용 가이드라기보다, 수명이 다한 듯 보이던 오픈소스를 상류 기여로 되살리고 12KB 남짓한 램 안에서 쓸 만한 결과를 뽑아내는, 제약 속 엔지니어링의 좋은 사례에 가깝다. 모든 코드는 개발자 wasp-os 포크의 pinetime-upstream-micropython 브랜치에 공개돼 있다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://tildeweb.nl/~michiel/python-on-my-wrist.html
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기 →
처리 중...