Public Access
Nano / driver: - No full on/off flip at boot; the first display() after boot is a forced full redraw instead, since the physical dot state is unknown - Send READY when booted ESP32: - relayOn() only switches and waits when the relay was off, and waits for the Nano's READY (3 s timeout) instead of a fixed 3 s on every frame - relayOff() ends Serial and releases the TX pin so the idle-high line no longer back-powers the Nano through its RX pin - No display commands are sent while the relay is off - Switching the relay on cancels a pending power-off countdown Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ESP32: controller
PlatformIO environments: esp32 (OTA) and esp32_usb (USB)
The ESP32 decides what is shown on the display. It never touches the panel itself. The
BROSE9323 driver is built with -D ESPSERIAL, so every GFX call is sent over Serial
(115200 baud) to the Nano.
Files
| File | Contents |
|---|---|
main.cpp |
setup, OTA, clock / power logic, Home Assistant callbacks |
libs.h |
includes and global objects (display, MQTT, WiFi, pins, timezone) |
bitmaps.h |
1-bit bitmaps (Pikachu, thought bubble, Nintendo logo, ...) |
secrets.example.h |
template for secrets.h (WiFi and MQTT credentials, gitignored) |
Features
- OTA updates through ArduinoOTA. Hostname:
FlipDotDisplay. - OTA panic window: after a crash or watchdog reset, the ESP32 runs only the OTA handler for 15 seconds before it starts the main code. A firmware that crashes on boot can still be replaced over the air.
- NTP time with timezone
CET-1CEST,M3.5.0,M10.5.0/3(Europe/Amsterdam). - Home Assistant through MQTT (
home-assistant-integrationlibrary) with two switches:FlipDotDisplayClock: clock on, or the Nintendo logo when offFlipDotDisplayPower: turns the display off through the relay
- Relay on GPIO 13 switches the power for both the panels and the Nano.
LOWturns it on.- On: the ESP waits for the Nano's
READYmessage, at most 3 s (NANO_BOOT_TIMEOUT), before it sends frames. The relay stays on while it is needed; the ESP only waits when it actually switches the relay on. - Off: the ESP stops sending and releases its TX pin (
Serial.end()and the pin set to input). An idle UART line is high and would otherwise power the Nano through its RX pin.
- On: the ESP waits for the Nano's
- Status LED (built-in) blinks fast when WiFi is down and slowly when connected. It is off at night or when the display is powered off.
Schedule
| Time | Display |
|---|---|
| 07:00 – 17:00 | Pikachu and the clock, updated every minute |
| 17:00 – 22:00 | Yawning Pikachu and the clock |
| 22:00 – 23:30 | Clock drawn only on the quarter hour; power is off in between |
| night | Screen cleared, power off |
Adding bitmaps
Convert an image with image2cpp to "Arduino code",
horizontal, 1 bit per pixel. Paste the array into bitmaps.h and draw it with
display.drawBitmap(x, y, bitmap, w, h, 1). The display is 84 × 19 pixels.