Open firmware for e-paper shelf labels
OpenESL runs on SoluM ZBS243 tags (2.9" and 1.54", black and white; the 2.9" with red is experimental) and an ESP32 access point: one ESP32-C6 board to start, or an ESP32-S3 with a C6 as its radio for up to about 1000 tags. The access point is a plain HTTP API: any software can put text on a tag by its MAC, and the AP sends it to the tag over 802.15.4 radio. This page has the tools to design the labels and to put the firmware on the hardware, all in the browser.
Design labels
Lay out text, inverted fields, lines and boxes for each tag model, with a preview drawn by the AP's own code. Save the layout file for the AP.
Open the designerFlash a tag
Put the OpenESL firmware on a tag in the jig with a ZBS_Flasher. The stock firmware is backed up first and kept in this browser.
Open the tag flasherFlash the access point
Put the AP firmware on an ESP32-C6, an ESP32-S3 + C6 or another supported board over USB. The page helps you choose.
Open the AP flasherHow it fits together
- Flash the AP on an ESP32-C6 (or an S3 + C6) and connect it to your computer or network. The Set up tab sets its WiFi and API token over USB.
- Flash the tags one by one in the jig. Each tag gets its MAC written to its info page and starts polling the AP.
- Design the layouts and upload the layout file to the AP with
PUT /api/layouts/{model}. The AP draws each tag's screen from it and sends the image over the radio. - Send content from your own software with
PUT /api/tags/{mac}, naming a layout and its fields (see API). - Keep it running:
GET /api/healthlists the tags that need attention, and a webhook posts the same report when it changes;"at"schedules prices for a given time;POST /api/otaupdates the AP's firmware without a cable, keeping its stored tags;esl-client tag-otasends new tag firmware to the tags over the radio;esl-client loglogs a long-term test;esl-client backupandrestoremove the stored tags, layout files and settings to a file and onto another AP.
What you need
- Chrome or Edge on a computer for flashing (Web Serial). The designer works in any modern browser.
- For tags: a Wemos D1 mini with atc1441's ZBS_Flasher, and a pogo-pin jig.
- For the AP: an ESP32-C6 board with USB (up to about 500 tags), or an ESP32-S3 N16R8 with a C6 as its radio for up to about 1000 tags. The ESP32-C5 is experimental.
Setting up and running the AP: the wiki. API documentation: the API tab. Source and the radio protocol: github.com/mathiasbk/openesl.