papermono-shopping-list README

The project's README from github.com/seamusc/papermono-shopping-list. As one markdown file: README.md.

PaperMono Shopping List

Firmware for the M5Stack PaperMono e-paper device. It turns the device into a household shopping list that lives on the fridge and stays in sync with a phone web app.

The PaperMono on a fridge, showing a shopping list grouped by aisle    The PaperMono settings screen: frontlight, sync now, Wi-Fi, last sync and battery

The PaperMono is an ESP32-S3 with a 3.97" 480×800 e-paper touchscreen. This project is a complete, working app for it that's small enough to read: about 2,400 lines of C++. You can use it as a shopping list, or as a starting point for your own PaperMono firmware.

What it shows on the PaperMono

How it works

The device shows the list grouped by aisle, in the order you walk the shop. Tap an item to tick it off, or add one with the on-screen keyboard. Everyone else adds things from their phone.

The phone web app showing the shopping list grouped by aisle    The phone web app's aisle editor, for setting the order you walk the shop

A small server in between stores the list. It remembers which aisle every item belongs to and can optionally sort brand-new items into the right aisle with Claude.

flowchart LR
    device["PaperMono<br/>(firmware/)"] -- "Wi-Fi, hourly or on tap<br/>and after each edit" --> server
    phone["Phone browser"] -- HTTP --> server
    subgraph server["Server (server/)"]
        api["FastAPI + SQLite"]
        web["Web UI"]
    end
    api -. "new item names only" .-> claude["Claude Code CLI<br/>(optional)"]

Repository layout

firmware/   PlatformIO project for the PaperMono (C++ / Arduino)
server/     FastAPI server, SQLite store, phone web UI, tests
docs/       Hardware notes, architecture, API, build and deploy guides, design notes

Quick start

1. Run the server

cd server
python3 -m venv .venv && .venv/bin/pip install -e .
SHOPPING_LIST_CLASSIFIER=none .venv/bin/uvicorn shopping_list.main:app --host 0.0.0.0 --port 8000

Open http://<server-ip>:8000/ on your phone, tap Aisles, and add your shop's aisles in the order you walk them. See docs/server.md for systemd and Docker deployment and for turning on auto-sorting.

2. Build and flash the firmware

You need PlatformIO and a PaperMono connected over USB-C.

cd firmware
cp src/secrets.example.h src/secrets.h   # set Wi-Fi SSID/password and the server URL
pio run -t upload

Back up your device's flash before the first flash. It holds that unit's factory calibration data. docs/firmware.md covers the backup, download mode and flashing from a browser.

Documentation

Doc What's in it
Hardware notes Pin map, I²C devices, bring-up sequence, display, touch and power details; reusing the drivers
Firmware Building, configuring, flashing and recovering the device; using it; troubleshooting
Architecture Components, data model, the sync protocol, offline behaviour, display refresh policy
Server Running and deploying the server, configuration, auto-sorting, security
HTTP API Every endpoint, request and response
Design notes Where the firmware came from, decisions and trade-offs, known limitations

Status

A personal project, running on one device at home. It works, but it isn't a product. There's no on-device Wi-Fi setup (credentials are compiled in), no authentication on the server (keep it on your LAN or behind an authenticating reverse proxy), and only the PaperMono C153 has been tested. See known limitations.

Author

Built by Seamus Cawley, who builds Bronto, the logging and observability platform, by day.

Credits

The firmware's board support, e-paper and touch drivers, keyboard layout and widget style are adapted from MonoMesh by andrecolz, an independent Meshtastic-compatible firmware for the same hardware. docs/design-notes.md lists exactly what was reused.

License

GNU General Public License v3.0, the same license as MonoMesh, which parts of the firmware derive from.

papermono-shopping-list (seamusc/papermono-shopping-list)

Searching Database…

这是什么?一套固件和配套服务器,把 M5Stack PaperMono 电子墨水屏设备变成贴在冰箱上的家庭购物清单,并与手机网页应用保持同步。
这只是固件,还是也包含服务器?它是针对 PaperMono 硬件的 C++ 固件,外加一个小型 Python FastAPI 服务器,负责存储清单,并在电子墨水屏设备和手机网页界面之间同步。
怎么让它跑起来?先运行服务器,在手机上打开它添加你超市的货架分区,然后用 PlatformIO 编译固件并烧录到 PaperMono 上。
编译和烧录固件需要什么?需要 PlatformIO,以及一台通过 USB-C 连接的 PaperMono 用于烧录;服务器端只需要 Python/FastAPI,可选择用 Docker 或 systemd 运行。
目前有哪些局限?设备上没有 Wi-Fi 配置界面,因为凭据是编译进去的;服务器没有身份验证,所以应留在局域网内或置于反向代理之后;目前只测试过 PaperMono C153 型号。
没有 Wi-Fi 购物清单还能用吗?能用,勾选和添加条目完全支持离线;Wi-Fi 大约每小时(或编辑后立即)才开启以同步,在此之前编辑内容会排队保存在闪存中。
PaperMono 硬件本身是什么?它是一台配备 3.97 英寸 480x800 电子墨水触摸屏的 ESP32-S3 设备,这个项目把它变成了购物清单显示屏。
新条目能自动归入货架分区吗?可以选择开启:服务器第一次见到某个条目名称时,可以把它发给 Claude,让它归入正确的货架分区;如果你手动移动了它,这个更正会被记住。
电子墨水屏界面实际体验如何?点击、滚动和输入使用快速局部刷新,没有闪烁;每 10 次局部刷新会强制做一次全刷以减少残影;灰色以 1 位点阵图案呈现,因此观感保持一致。
我能把它复用到自己的 PaperMono 项目里吗?可以。作者既把它做成了一个能用的购物清单,也把它作为其他 PaperMono 固件的紧凑易读(约 2,400 行 C++)的起点。
Creator
seamusc
Size
1 MB
Stars
205
Updated
CommitOct 15
Age
20d
Commits · 90 Days