Open source · ESP32 · E-ink

pip2026boy

An M5Paper e-ink wrist terminal that receives messages and approvals from Claude Code — via Ably, from any session.

M5Paper v1.1 · 4.7" e-ink 540 × 960 · 16-gray Ably REST polling BLE fallback Claude Code skill
How it works
01
Pair once
SD card holds pip2026boy.env with your Ably key + channel name. Device reads it at boot.
02
Claude publishes
Any Claude Code session runs the m5paper skill — posts a notice or approval request to Ably REST.
03
Device polls
On the Messages tab, M5Paper polls Ably every 20 s. WiFi powers off on other tabs to save battery.
04
You decide
Tap APPROVE or REJECT on screen. Decision is published back to the channel; Claude Code unblocks.
HOME
TEMP
MSG
ABOUT

Your SD card, full screen

Scans every .jpg and .png on the SD card at boot. Each image is fill-scaled to the full 540 × 960 panel — no letterboxing.

Tap anywhere on the Home tab to advance to the next image. The rotary encoder on the side also steps forward. Image index and filename are shown in the footer.

While on any tab other than Messages, WiFi stays off — the M5Paper runs entirely from its 1 000 mAh battery in low-power mode.

HOME
TEMP
MSG
ABOUT
Temperature
24.3 C

Time (GMT+8, 24 h)
19:42:08

Humidity
63.1 %

Ambient sensor + NTP clock

Reads the built-in SHT30 sensor for temperature and humidity. Refreshes every 30 seconds while the tab is open.

The clock is synced from NTP the first time WiFi connects each boot — usually on the first visit to the Messages tab — then the RTC keeps time locally, no network required.

E-ink only redraws on change, so the panel consumes near-zero power between refreshes.

HOME
TEMP
MSGwifi
ABOUT
> Push --force to main?
git push origin main --force
Branch: feat/ably-polling · 3 commits
⚠ Rewrites remote history.
- Vault Summary — Aug 9
V76: net liq ~$30,744 · XOM GTC $0.79
V20: INTC +$79k · G/L +$2,630
- Deploy b0e8a4d OK
pip2026boy firmware flashed successfully.
APPROVE
REJECT

Claude Code sends.
You approve.

Any Claude Code session can push a notice (status update) or an approval request (blocking, awaits your tap) to the device via the m5paper skill:

# from any Claude session /m5paper Deploy to prod?

Approval requests get a double-border highlight and arm the APPROVE / REJECT buttons. Tap your answer — the decision is published back to Ably and unblocks Claude Code.

WiFi connects automatically on entering this tab and disconnects on leaving — Ably polls every 20 s while open, BLE as an optional always-on fallback.

HOME
TEMP
MSG
ABOUT
pip2026boy
M5Paper e-ink client

FW: b0e8a4d
CH: pip2026boy:20260708m5paper
BLE: E8:9F:6D:2A:11:C4

WiFi: TagHeuer (connected)
IP:   192.168.1.42
RSSI: -54 dBm

Ably: connected

Batt: 87% (4050 mV)
github.com/reachlin/pip2026boy
WIFI ON

Device info & transport toggle

Shows firmware commit hash, paired Ably channel, BLE device address, last-known WiFi details (SSID, IP, RSSI), connection status, and live battery voltage.

The WIFI ON / BLE ON button at the bottom toggles the transport mode. WiFi uses Ably REST polling; BLE is always-on and doesn't wake the radio — useful in areas with unreliable WiFi.

The two are mutually exclusive: running a TLS handshake while BLE's stack is resident causes heap contention on the ESP32 — the toggle writes your choice to SD and takes effect on next boot.