Skip to content
github-actions[bot] edited this page Nov 2, 2026 · 7 revisions

OpenESL

Open firmware for SoluM e-paper shelf labels and an ESP32 access point. Put prices and text on the labels from any software, with one HTTP request.

A 2.9-inch label with a price and a QR code next to a 1.54-inch label   A 1.54-inch label showing a 3D printer's progress

This wiki is the user guide: how to get from a box of labels to labels that show your prices. The technical details (protocol, firmware internals, hardware notes) live next to the code in the repository, and the pages here link to them. New words are explained in the Glossary.

What can I use it for?

  • Prices in a shop: product name, price, unit price, EAN or QR code, offers that start and end at a set time.
  • At home: the weather, today's calendar, the bin collection day, the room temperature, the guest WiFi as a QR code, from Home Assistant or your own scripts.
  • In the workshop: a 3D printer's progress, labels on filament spools, boxes and shelves.

The labels are shop shelf labels, often sold cheaply second-hand. They run for years on a coin cell and keep showing their screen without power.

What you need to get started

A 2.9-inch label
Labels
A SoluM 2.9" or 1.54". Check the product name on the back.
Have another label? We would like to support more: tell us.
An ESP32-C6 Super Mini board
An access point
An ESP32-C6 Super Mini (about 5 $) is enough to start. Other boards
Another board in mind? Support for more is welcome: see how.
A label in the 3D-printed flashing jig
A flashing jig
A small board running ZBS_Flasher (a Wemos D1 mini, an ESP32, an Arduino Nano and others) and pogo pins, to flash each label once. How to build it
A computer
With Chrome or Edge, to flash from the web page. Nothing to install.

Plus a USB cable for the AP and one for the flasher board, and CR2450 cells for the labels. The full list: What you need.

How it works, in short

flowchart LR
    you["<b>Your software</b><br/>Home Assistant, a script,<br/>a till system"]
    ap["<b>Access point</b><br/>a small ESP32 board<br/>on your WiFi"]
    labels["<b>Labels</b><br/>e-paper, on a battery"]
    you -- "text and prices<br/>(HTTP)" --> ap
    ap -- "the finished screen<br/>(802.15.4 radio)" --> labels
Loading

Your software sends text, the access point (AP) draws the screen from a layout you choose, and each label fetches its new screen by radio about once a minute. The details: How it works.

New here?

  1. What you need: the labels, the access point and the flashing jig.
  2. Getting started: from nothing to the first label, on one page.
  3. Sending content: put text and prices on the labels from your own software.

No hardware yet? The simulator runs the label firmware and the AP together on a PC, and the label designer works in any browser.

Want to help? Photos of a label we do not support yet, a report from a board marked experimental, a new template or a clearer sentence here are all welcome. See Contributing.

The guide

Getting started How it works · Glossary · Getting started · What you need · Roadmap

Access point Choosing a board · ESP32-C6 · ESP32-C6 with screen · ESP32-C5 · ESP32-S3 + C6 · ESP32-S3 + wireless C6 · Flashing the AP · WiFi and API token · AP settings

Labels Supported labels (2.9", 1.54") · The flashing jig · Flashing labels · Label backups

Layouts Label designer · Label templates · Getting layouts onto the AP · Layout elements and limits

Sending content Overview · HTTP API · esl-client · Price lists from CSV · Scheduled prices · Home Assistant · Weather

Running it Dashboard · Health and webhook · Updating the AP · Updating labels · Upgrading from older versions · Backup and restore · Moving to a new AP

Help Troubleshooting · FAQ

Developers Contributing · Building from source · Adding hardware

Links

Clone this wiki locally