iDotMatrix panels are cheap LED pixel displays (16×16, 32×32 or 64×64) that you’re supposed to control over Bluetooth Low Energy from a phone app. This project drives them from a computer instead, through a Wi-Fi bridge to make this work on machines without Bluetooth too.
The code started as a fork of the community python3-idotmatrix-library, whose authors reverse-engineered the protocol. I reworked it into a Python package built around an IDotMatrixClient with a connection manager and feature modules for text, images, GIFs, clock, countdown, stopwatch, effects, scoreboard, graffiti, eco mode and system commands. On top of that there are helpers to convert images and GIFs, a digital picture-frame mode watching a folder, and work/rest (pomodoro-style) timer with a small web interface.
The ESP32 bridge#
Next to the Python code sits Rust firmware for ESP32 boards. The board joins the Wi-Fi network, announces itself over mDNS as idotmatrix.local and exposes a small HTTP API, while updates to the panel keep going over BLE. Rendering and timer state live on the ESP32, which lets computers on the network can drive the display, and the firmware core can be tested on the host.
The next version#
This section is a plan. The current ESP32 is a classic module with 4 MB of flash and no PSRAM, and that’s tight, since about a fifth of the update slot is free. I want to move the firmware to an ESP32-S3 with more flash and PSRAM. That would leave room for richer information on the panel, for example calendar events fetched by the board itself, and for more elaborate animations. A calendar screen for the 64×64 panel exists so far as mockups.
Licence: GPL. Source on GitHub.