Skip to content

GraffJosh/largeEink

Repository files navigation

largeEink — 7.5" E‑Paper Smart Display

Small project to drive a 7.5" grayscale e‑ink panel from an ESP32. Includes:

  • An ESP32 firmware (eInkDriver.c) that fetches BMP images, converts to 4‑level grayscale with ordered dither + gamma LUT, and displays them on an e‑paper module.
  • A Python helper (convertImage.py) to convert PNG/JPEG images into 4bpp C arrays for embedding.
  • MQTT/Home Assistant integration for remote control.
image image image image

Subscript: I don't like writing docs, so genAI helped with this page. If you're reading this, and you're a human a) I'm surprised you found my project b) I'm happy to help you implement this on your project.

Repository layout

  • eInkDriver/
    • eInkDriver.c — main ESP32 firmware
    • convertImage.py — Python tool to convert images to 4bpp C arrays
    • icons.h, secrets.h, other project files (expected)
  • imageServer/
    • imageServer.py - serves images over HTTP to the esp32.
    • eInkImage.py - Helper class for the image server (

Prerequisites

  • Hardware: ESP32 board compatible with the e‑paper module used (pins in firmware), 7.5" e‑paper display.
  • Toolchain: Arduino/PlatformIO or preferred ESP32 toolchain to compile and flash the C firmware.
  • Python 3 + associated image libraris to run the conversion script.
    • Install: pip install pillow

Configuration

  • secrets.h — add WIFI_SSID, WIFI_PASS, MQTT_SERVER, MQTT_PORT, MQTT_USER, MQTT_PASSWORD and any URL constants (URL1, URL2, URL3, etc.).

Using the Python image converter

Script: convertImage.py Usage: python3 convertImage.py

  • inputDirectory: folder with .png/.jpg/.jpeg files.
  • OutputFilename: path to the generated C header (appends arrays).
  • width/height: desired target size to resize each image to.

The script writes PROGMEM C arrays and width/height constants for each image.

Firmware behavior

  • Downloads BMP image(s) from configured URLs, converts streamed BMP rows to 4bpp via a dithered/gamma LUT, and pushes rows to the display.
  • Maintains persistent preferences (imageCount, displayIndex), Reducing unecessary flickering after deep sleep
  • Exposes MQTT/Home Assistant entities for page selection, aux URL, refresh, and battery sensors (via HA-MQTT integration).
  • Supports deep sleep wake via buttons and timer.

MQTT / Home Assistant

  • Device ID and friendly name defined in eInkDriver.c (HA_DEVICE_ID, HA_DEVICE_FRIENDLY_NAME).
  • Provided entities include page selection, aux URL, refresh button and battery sensors. Configure your Home Assistant MQTT discovery or use the included HA‑MQTT helper to register entities.

Troubleshooting

  • BMP download: server must serve uncompressed BMP with expected resolution/pixel format.
  • The driver must receive exactly 480x800 pixels image, in 8bit BMP format.

Tips

  • Make sure you setup your secrets file with the correct URLS and credentials for MQTT etc

Future Work

  • It would be cool to do partial updates or less flickering.
    • For example an indicator showing that it's thinking or working.

About

Xiao 7.5" display custom grayscale driver for displaying BMP.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages