An ESP32-driven WS2813 LED matrix system was developed to display 320×640 images using block-based streaming, while an Android application performs camera-based calibration and reconstructs the displayed image block-by-block for end-to-end verification.
This project presents an image streaming and reconstruction system that combines an ESP32-controlled WS2813 LED matrix with an Android camera application for optical feedback. The ESP32 reads 320×640 BMP images from a microSD card, divides each image into 20×40 blocks (arranged as a 16×16 grid), and renders the blocks sequentially on a 20×40 LED matrix (800 LEDs). Communication between the ESP32 and the phone is performed over a WebSocket connection while the ESP32 operates as a Wi-Fi access point.
A calibration stage is used to map physical LED locations to a stable 20×40 grid in the camera frame. The Android application uses CameraX and OpenCV blob detection to detect LED positions and build a sampling map. During image streaming, the ESP32 announces each displayed block using a session token and block indices, and the phone captures a frame, samples LED colors, and acknowledges completion before the next block is transmitted. The captured blocks are stitched into a full reconstructed image and compared against the original image received from the ESP32 in chunks.
The implemented workflow demonstrates reliable block-level synchronization, practical handling of hardware constraints such as brightness and power limitations, and successful camera-based reconstruction of large images from a physical LED display.
