Skip to content

kickingkeys/OpenPager

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenPager

A pager-style AI device that connects to OpenClaw via Telegram. Captures images and voice, sends queries to Claude, displays condensed responses on a 0.96" OLED.

Hardware

Component Detail Status
MCU ESP32 (with camera + mic) Have
Display 0.96" OLED 128x64, SSD1306, I2C, yellow-blue split (Great Bobot module w/ 4 buttons) Confirmed
Audio output Soberton WT-1209T piezo transducer (passive, 12mm) Have
Battery TBD capacity Have
Buttons 4 on-board buttons (K1-K4 on the OLED module PCB) Have

Display Specs

  • Resolution: 128x64 monochrome
  • Controller: SSD1306
  • Interface: I2C (GND, VCC, SCL, SDA)
  • Color zones: Top 16 rows = yellow, Bottom 48 rows = blue
  • Text budget: 21 chars/line x 5 lines (6x8 font) = ~105 chars/screen
  • Library: U8g2 (not LVGL — overkill for monochrome)
  • Yellow zone: Status bar (time, signal, battery) — 16px
  • Blue zone: Content area — 48px (~5 lines of text)

Button Mapping

Button Press Long Press
UP Scroll up / previous item Jump to previous date
DOWN Scroll down / next item Jump to next date
CAPTURE Take photo and send Hold to record voice -> transcribe -> send
SELECT Open / confirm / drill in Back / exit current view

Architecture

[ESP32 Pager] --WiFi--> [Telegram Bot API] <---> [OpenClaw on Mac/Server]
                                                        |
                                                   [Claude API]

Dual Output System

Every Claude response produces two versions:

  1. Full response -> posted to main Telegram chat (read on phone)
  2. Condensed display version -> routed to pager channel (ESP32 reads this)

Second-stage compression via cheap/fast model, or structured output from Claude.

UI Framework Decision

Leading option: U8g2 (monochrome display library)

  • Best font selection for SSD1306 OLEDs
  • Tiny memory footprint (~1KB framebuffer for 128x64)
  • Hardware I2C support for ESP32
  • Hundreds of built-in fonts at all sizes

Architecture reference: Sentry Alert TX-1 ("Beeper OS")

UI Screens

  1. Home/Idle — clock, battery, signal strength, message count
  2. Message List — chronological, one line per message, date dividers inline
  3. Message Detail — full condensed text, scrollable
  4. Capturing — camera/recording feedback
  5. Sending/Loading — progress indicator while waiting for Claude
  6. Connection Error — WiFi/Telegram status, retry countdown

Navigation Model

Pebble-style window stack (push/pop):

  • SELECT pushes a new screen (drill in)
  • BACK pops the current screen (go back)
  • UP/DOWN navigate within the current screen
  • 2 levels max: List -> Detail (not 3-level folder structure)

Key References

Project What to take from it Link
Sentry Alert TX-1 Screen management, button handling, buzzer, sleep https://github.com/KyleTryon/sentry-alert-tx-1
Meshtastic device-ui LVGL chat panel, scroll containers https://github.com/meshtastic/device-ui
MeshCore-Cardputer-ADV Chat bubble rendering, themes https://github.com/Stachugit/MeshCore-Cardputer-ADV
Pebble SDK Window stack architecture, card pattern https://developer.rebble.io
Flipper Zero SceneManager pattern, state per scene https://github.com/jamisonderek/flipper-zero-tutorials/wiki/User-Interface
OpenCharm BLE bridge, Claude bridge, transcriber foundations https://github.com/kickingkeys/opencharm

Prototyping Tools

  • Wokwi (wokwi.com) — browser ESP32 simulator with TFT rendering
  • LVGL PC Simulator — run LVGL on Mac via SDL, 240x240
  • EEZ Studio — free drag-and-drop LVGL screen designer

Voice

  • No voice activation / wake word (tried, didn't work)
  • Push-to-talk via CAPTURE long press -> record -> transcribe -> send as text
  • Transcription via MLX Whisper (from OpenCharm pipeline)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors