Story
MQTT Configurable Electronic Shelf Label System with Elecrow 3.7" E-Paper Display and Web Server
Welcome to this tutorial where we bring together IoT, MQTT, Docker, ESP-IDF and e-paper display technology to create a sleek and modern Electronic Shelf Label system using Elecrow 3.7" E-Paper Display!

In this project, you'll learn how we:
✅ Rendered dynamic product info like price and description using a custom web editor
✅ Converted HTML text to binary images ready for e-paper rendering
✅ Sent remote updates over MQTT from the browser to E-Paper display
✅ Built it all with ESP32-S3, ESP-IDF and Docker
It's a lightweight, wireless, and totally customizable solution for smart signage, shelf tags, or even retro-style dashboards.
Let's dive in and build something awesome. 🧠💡
🧩 How the Smart ESL Project Works
🧑💻 1. Customize Shelf Tag in the Browser

The user opens a simple web app that includes an editor to define:
- 
Price (with formatting for currency) 
- 
Product description (with support for bold styling using **text**)
- 
Tag ID (the MAC address of the ESL device) 
The preview updates in real time, giving the user a visual feel of what will be displayed.
🖼️ 2. Convert HTML to Monochrome Binary Image
When ready to publish:
- 
The browser captures a screenshot of the price and description areas using html2canvas
- 
It crops and converts each canvas into column-major binary format (1-bit per pixel, black & white), optimized for e-paper displays 
- 
The binary images are ready to be sent to the tag 
📡 3. Send Binary Images Over MQTT
The browser connects to a public or local MQTT broker via WebSocket and publishes the binary images to these topics:
- 
esl/<tag_id>/price
- 
esl/<tag_id>/description
Each topic represents a specific region of the tag to update.
📶 4. ESP32-S3 Receives Images via MQTT
On the ESP32 side:
- 
The ESP32 connects to Wi-Fi and subscribes to its designated MQTT topics (based on its MAC address) 
- 
It receives chunked binary data, reconstructs the image, and knows which region to update 
- 
Once both price and description are fully received, it proceeds to update the screen 
🖤 5. Partial Update on E-Paper Screen
To avoid flickering and unnecessary redraws:
- 
The ESP32 uses partial refresh mode of the UC8253 e-paper driver 
- 
It only updates the framebuffer regions (price or description) that changed 
- 
Then it triggers a partial display update, showing the new content clearly without ghosting 
🛠️ Ready to Try It Yourself?
You can replicate this entire project on your own by following the step-by-step instructions in the README of our GitHub repository.
There you’ll learn how to:
✅ Clone the project
✅ Build and run the web editor locally using a Docker container
✅ Customize your own price/description tags
✅ Send them to your MQTT-connected ESP32 e-paper device
Happy hacking! 🧠💡
 
    
 
                                         
                                         
                                         
                                         
                                         
                                         
                                         
                                         
                                         
                                         
                                        


 
                             
                            
 
                                                                                         
                                             
                                                 
                                     
                                     
                                     
                             
                             
                             
                             
                     
                                                 
                                                 
                                         
                                                 
                                         
                                                 
                                         
                                                 
                                         
                                                 
                                         
                                                 
                                         
                                         
                                                 
                                         
                                         
                                         
                                                 
                                         
                                                 
                                         
                                                
