pip2026boy.env with your Ably key + channel name. Device reads it at boot.m5paper skill — posts a notice or approval request to Ably REST.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.
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.
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:
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.
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.