A collaborative drawing system with a web interface that syncs to an e-paper display.
- Real-time collaborative drawing interface
- Web-based access from any device
- E-paper display sync every 3 minutes
- Multi-user support via WebSocket
- Tri-color display support (black, white, and red)
Try out the web demo here
Read my blog post to get an overview of the project
This project uses a 7.5" tri-color e-paper display to display the drawing from the web interface. The website is real-time and supports multiple concurrent users with websockets. The e-paper display will update every three minutes.
Total cost: ~$45-$85
- Waveshare 7.5 B V3 E-Paper Display (~$30-$50)
- Waveshare ESP32 E-Paper Driver Board (~$10-$20)
- 3D printed case front, back, and cover (~$2-$10)
- A micro USB to USB-C adapter (~$5)
- A USB-C cable and a power supply
- Print the three case components
- Place the display in the front
- Put the back plate on, feed the ribbon cable through the hole
- Glue the back plate to the front
- Place the ESP32 on the back plate and hot glue it in place
- Placement is right above the hole with the headers touching the back plate
- Test placement with the cover on top before gluing
- Put the micro USB to USB-C adapter into the microcontroller
- Place the cover over the microcontroller
- Glue the cover to the back plate
-
Install CircuitPython on the ESP32 board:
- I used the DOIT ESP32 firmware
- Follow the CircuitPython ESP32 Quick Start Guide to get your device on your network and the code editor running
-
Install required CircuitPython libraries:
- Download the Adafruit CircuitPython Library Bundle for your version of CircuitPython
- Install the following libraries to your lib folder with the web file manager:
- adafruit_connection_manager
- adafruit_requests
-
Copy the CircuitPython files to your device through the web file manager or code editor:
waveshare7in5bv3.py
draw.py
- Make sure to set the host variable to your server's domainbmpread.py
-
Once you're ready to test, edit
code.py
to rundraw.py
import draw
-
Clone the repository:
git clone <repository-url> cd inklink
-
Deploy using Docker Compose:
docker compose up -d
-
(Optional) Set variables:
VITE_WEB_TITLE
- The title of the web interface (build time variable)CLEAR_CRON
- The cron schedule for clearing the drawing (e.g.0 6 * * 1
for every Monday at 6am)
-
Update the hostname in
draw.py
to your server's domain
This project is licensed under the MIT License - see the LICENSE file for details.