Back to engineering work

Firmware + hardware integration

Large-format LED bingo display

An ESP32 controls a large bingo display using WS2812 pixels. Wireless game updates select number highlights, with a pixel map linking each number to its panel position.

Large format Bingo displayFirmware and hardware integration
The illuminated Bingo panels at the physical installation
Photograph of the LED installation. The original demonstration is included below.

Engineering scope

  • ESP32 display firmware and game-state handling
  • Mapping game numbers to physical pixel regions
  • Wireless updates and LED-panel integration

System flow

From game state to the LED panels

  1. Receive the updateRead the incoming Bingo game state.
  2. Find the numberResolve the selected number on the display map.
  3. Choose its pixelsAddress the corresponding panel region.
  4. Update the panelsShow the number’s current state.

Number-to-pixel mapping

The firmware maps game numbers to the physical panel wiring. An incoming game update selects the corresponding LED region rather than addressing the display as a simple sequential strip.

Coordinated panel updates

The project record describes more than 10,000 pixels controlled by one ESP32. The work covers wireless update handling, display-state logic and integration with the LED panels.

Installation demonstration

The project recording shows number highlighting on the physical installation. It provides a view of the display in operation alongside the installation photograph.

Firmware flow

How a Bingo number is cleared

Selected number-to-pixel clearing routine.

Result · NoIgnore an out-of-range number
Action · YesFind that number’s pixel list
Result · List completeLeave the updated buffer ready

Accept only numbers from 1 to 90, look up the stored pixel list for that number and set those pixels to black in the LED buffer.

The routine updates the pixel buffer. It does not include the command that displays that buffer or establish installation size or frame rate.

Read the implementation

clearRows · selected source lines 156–167. Source inspection is not a hardware test.

// Clear rows for a specific number
void clearRows(int number) {
    if (number < 1 || number > 90) return;  // Ensure valid range STOP BLINK FOR MORE 90 !!!!!!

    int index = number - 1;  // Convert 1-based number to 0-based index
    int pixelCount = pgm_read_word(&numberPixelCount[index]);  // Read count from PROGMEM pgm_read_word (small)  or pgm_read_byte (original big)

    for (int i = 0; i < pixelCount; i++) {
        int pixelIndex = pgm_read_word(&numberPixels[index][i]);  // Read pixel index from PROGMEM
        strip.SetPixelColor(pixelIndex, blackColor);  // Turn off the pixel
    }
}
Open the exact source-level diagram

Prototype demonstration.

Original project recording · 1:03
Bingo display demonstration · 1:03. Open the original video file.
All projectsArchive record

Project enquiries

Discuss your project.

Tell us what you’re developing and where you need engineering support.

Discuss your project