↓ Skip to main content
  1. Work/

iDotMatrix client and ESP32 bridge

··Index: 6·View as Markdown·

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.

Two ways to reach an iDotMatrix panel: Bluetooth directly from Python, or HTTP to an ESP32 bridge that talks BLEPython clientIDotMatrixClientComputerwithout BluetoothESP32 bridgeRust, mDNS, HTTP APILED panel16, 32 or 64 pxBLEWi-FiBLErendering and timer state live on the ESP32
Direct Bluetooth from Python, or Wi-Fi through the ESP32 bridge

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.

Related