A versatile ESP32-based controller for e-paper displays with web interface support. This project allows you to upload and display images on e-paper displays through a web interface.
I’m not a C++ developer and don’t understand many concepts of this language. I’ll be happy to receive pull requests and feature requests in the Issues section.
- 🖼️ Support for e-paper displays (specifically GxEPD2_750c)
- 🌐 Web interface for image upload and control
- 📡 Wi-Fi connectivity
- 💾 SPIFFS file system for image storage
- 🎨 Support for both monochrome and color images
- 🔄 Async web server for better performance
- 📊 System monitoring endpoints
- 💩 Not all features work as intended. The code mostly works for my use cases (e.g., a pet weather station project). The code likely contains bugs, but I’ve tried to make it as readable as possible.
- ESP32 development board
- Waveshare 7.5" three-color e-paper display
- Power supply (USB or external)
Display connections:
- BUSY -> GPIO25
- RST -> GPIO26
- DC -> GPIO27
- CS -> GPIO15
- CLK -> GPIO13
- DIN -> GPIO14
- Install PlatformIO IDE (VSCode extension)
- Clone this repository
- Update WiFi credentials in
src/config.cpp
- Build and upload the project:
# Using PlatformIO CLI
pio run -t upload
# Monitor serial output
pio device monitor
GET /
- Hello world testGET /api/system/memory
- System memory usageGET /api/system/list
- List files in SPIFFSGET /api/image/draw
- Trigger display refreshPOST /api/image/upload
- Upload new imageGET /fs/*
- Static file server (SPIFFS)
# Upload an image
curl -X POST -F "[email protected]" http://esp32-ip/api/image/upload
# Trigger display refresh
curl http://esp32-ip/api/image/draw
# Check system memory
curl http://esp32-ip/api/system/memory
- Format: BMP or raw RGB565
- Resolution: 640x384 pixels
- Color: Three-color (black, white, red/yellow)
main/
├── src/
│ ├── main.cpp # Main application entry
│ ├── webserver.cpp # Web server implementation
│ ├── display.cpp # Display controller
│ ├── image_utils.cpp # Image processing utilities
│ ├── filesystem.cpp # SPIFFS operations
│ └── config.cpp # Configuration
├── include/
│ └── *.h # Header files
└── platformio.ini # PlatformIO configuration
- Install dependencies:
lib_deps =
ESP Async WebServer
AsyncTCP
ArduinoJson
Adafruit GFX Library
GxEPD2
Wire
- Configure your environment:
# Edit WiFi settings
nano src/config.cpp
- Build and upload:
pio run -t upload
- Display not updating: Check SPI connections and reset the device.
- Upload fails: Verify WiFi connection and file size (max 3MB).
- Memory errors: Reduce image size or clear SPIFFS.
No license. If you see the code, feel free to use it however you want. I don’t care.