TL;DR
- Deskflower는 Waveshare ESP32-C6-LCD-1.47의 172×320 IPS 디스플레이에서 동작하며, 관리 없이 유지되는 절차적 식물 테라리움과 주변 시계를 구현함.
- L-시스템(L-system) 기반 식물은 흔들리고 꽃을 피우며 교차수분하고, 지역 날씨와 시간대에 반응함.
- Wi-Fi 6, Open-Meteo, SNTP, ESP-NOW를 통해 실시간 날씨·시각 동기화와 기기 간 꽃가루 공유를 제공함.
- 브라우저 플래셔를 이용하면 Arduino IDE나 명령줄 도구 설치 없이 펌웨어를 설치할 수 있으며, 단일 클릭·더블 클릭·길게 누르기로 주요 기능을 제어함.
- LittleFS 상태 저장, 안전한 휴면, 야간 백라이트 조절을 포함하며, Arduino CLI 빌드와 MIT 라이선스를 지원함.
Deskflower
- Deskflower는 Waveshare ESP32-C6-LCD-1.47 보드의 172×320 IPS 디스플레이에서 실행되는 디지털 식물 테라리움 겸 주변 시계임.
- L-시스템을 이용해 살아 있는 듯한 절차적 식물을 시뮬레이션하며, 식물은 흔들리고 꽃을 피우며 교차수분하고 지역 날씨와 시간대에 반응함.
- 책상 위에 두고 관리할 필요가 없도록 설계됐으며, 식물은 자체 기준 수분량을 조절하고 시들어 사라지지 않음.
빠른 설치: 브라우저 플래셔
- Google Chrome 또는 Microsoft Edge를 사용하면 Arduino IDE나 명령줄 도구를 설치하지 않고 브라우저에서 Deskflower를 플래시할 수 있음.
- 웹 플래셔를 열거나
dist/index.html을 로컬에서 열어 설치를 시작함. - ESP32-C6를 USB-C 케이블로 컴퓨터에 연결하고,
Install Deskflower를 클릭한 뒤 팝업에서 직렬 포트를 선택함. - 진행률 표시줄이 100%에 도달하면 화면이 즉시 Deskflower로 부팅됨.
조작
- 토양에 물 주기: 버튼을 한 번 클릭하면 수분이 22% 증가하고 빗방울 입자 효과가 작동하며 청록색 LED가 점멸함.
- 표본 변이: 버튼을 두 번 클릭하면 다음 세대로 이동하고, 16자 시드 코드(Seed Code)를 직렬 포트로 내보내며 호박색 LED가 점멸함.
- Wi-Fi 설정 포털: 버튼을 2초 넘게 누르면
Deskflower-Setup이라는 캡티브 액세스 포인트(AP)가192.168.4.1에서 시작되고 자홍색 LED가 점멸함.
기능
- 절차적 식물 생성기: 자연스러운 위쪽 굴광성, 가늘어지는 줄기, 프랙털 가지치기를 구현하며 네 가지 표현형인 Highland Orchid, Dwarf Fern, Micro-Succulent, Flowering Bonsai를 제공함.
- 일주기 분위기: 하늘 색조와 조명이 다섯 단계에 걸쳐 부드럽게 전환됨.
- 새벽: 복숭아색·라벤더색
- 낮: 하늘색
- 골든아워: 호박색
- 황혼: 보라색
- 밤: 별이 빛나는 하늘과 생물 발광 반딧불이
- 실시간 날씨 및 시계 동기화: Wi-Fi 6을 통해 Open-Meteo와 SNTP에 동기화해 실제 날씨 상태인 맑음·구름·비·안개·달과 현지 기온·습도를 상단 HUD에 표시함.
- 로컬 웹 대시보드: 집 Wi-Fi에 연결된 휴대전화나 노트북에서
http://deskflower.local에 접속해 수분 상태 데이터를 확인하고, 테라리움 이름을 변경하며, 시드 코드를 복사하거나 가져올 수 있음. - ESP-NOW 피어 메시: Deskflower 기기가 여러 대 가까이 있으면 서로 자동으로 검색하고, 화면 사이에서 이동하는 꽃가루 포자를 공유해 잡종 품종을 만들어냄.
- 사계절 변화 및 야생 생물: 달력에 맞춰 가을 단풍, 겨울 서리, 봄 벚꽃 색상으로 바뀌며 픽셀 무당벌레, 난쟁이나방, 흙달팽이가 가끔 방문함.
- 안전한 하면과 상태 유지: 물을 주지 않으면 보기 흉한 갈색 상태 대신 안전한 휴면 모드에 들어감. 전체 유전체, 나이, 수분 통계는 전원이 끊겨도 LittleFS를 통해 유지됨.
- 야간 모드 백라이트: 어두운 방에서 편안하게 사용할 수 있도록 22:30~06:00 사이 디스플레이 PWM 밝기를 자동으로 낮춤.
하드웨어 및 핀 배치
- 대상 보드는 Waveshare ESP32-C6-LCD-1.47이며, ST7789 172×320 IPS 디스플레이, WS2812 RGB LED, 부트 버튼을 포함함.
- LCD MOSI는 GPIO 6(SPI 데이터, 80MHz), LCD SCLK는 GPIO 7(SPI 클록), LCD CS는 GPIO 14(ST7789 칩 선택), LCD DC는 GPIO 15(데이터/명령), LCD RST는 GPIO 21(하드웨어 리셋)에 연결됨.
- LCD 백라이트는 GPIO 22(5kHz LEDC 백라이트 PWM), SD CS는 GPIO 4(공유 SPI 절연, HIGH 유지), 부트 버튼은 GPIO 9(다중 제스처 입력, 액티브 로우), RGB LED는 GPIO 8(온보드 WS2812 LED)에 연결됨.
Arduino CLI로 빌드
- 소스에서 빌드하는 경우 필요한 구성 요소는
arduino-cli, ESP32 Arduino Core 3.x(esp32:esp32),GFX_Library_for_Arduino임. - 컴파일 시 CDC-on-Boot와 Huge App 파티션 테이블을 지정하며, 대상 보드 식별자는
esp32:esp32:esp32c6:CDCOnBoot=cdc,PartitionScheme=huge_app임. - 연결된 보드에 업로드할 때 직렬 포트 예시는
/dev/cu.usbmodem101임. - 직렬 상태 데이터를 확인할 때는 같은 포트를 사용하고 전송 속도를 115200 보드로 설정함.
코드베이스 구성
deskflower.ino: 메인 루프, 타이밍 조정, 버튼 이벤트 처리config.h: 핀 정의, 기하 구조, 렌더링 상수hal_display.*: ST7789 SPI 드라이버, 전체 캔버스 프레임 버퍼, 백라이트 PWMhal_peripherals.*: 단일 클릭·더블 클릭·길게 누르기 버튼 디바운싱, WS2812 LED 밝기 변화hud_manager.*: 시계, 소형 날씨 기호, 세대 인덱스를 표시하는 상단 24픽셀 HUDmicro_font.*: 점멸하는 콜론이 있는 5×7 마이크로 타이포그래피 글꼴 엔진weather_glyphs.*: 8×8 소형 날씨 아이콘 비트맵time_atmosphere.*: 5단계 일주기 하늘 색상과 천체 반짝임particle_system.*: 산소 거품, 비, 안개, 동물군 입자 물리 시스템plant_engine.*: L-시스템 생성기, 표현형, 시드 코드, 바람 흔들림moisture_system.*: 비대칭 수분 감소, 자율 이슬 회복, 토양 게이지net_sync.*: Wi-Fi 6, SoftAP 캡티브 포털, SNTP 시각, Open-Meteomesh_sync.*: ESP-NOW 피어 검색과 화면 간 꽃가루 공유web_dashboard.*:http://deskflower.local용 임베디드 HTTP 서버state_storage.*: CRC32 마모 평준화를 사용하는 LittleFS 플래시 상태 저장renderer.*: 기층·식물·하늘·HUD를 합성하는 프레임 버퍼 파이프라인dist/: 사전 컴파일된 바이너리와 원클릭 ESP Web Tools 플래셔
라이선스
- MIT 라이선스이며 오픈소스 공개 준비가 완료된 상태임.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요