Files
Flipdot-display/docs/how-it-works.md
T
mangavalkandClaude Opus 5.5 090c2bf8ae Fix shifted pictures: non-blocking Nano drawing, frame check, refresh settings
The Nano's periodic full redraw blocked for ~0.8 s. A frame that arrived
meanwhile overflowed its 64-byte serial buffer; lost bytes in a bitmap
shift the rest of the image (picture moved up), and diff frames never
repaired it.

- Nano: all drawing (frames, effects, the dot refresh) runs from update()
  in ~1 ms slices; the refresh pauses while a frame is received or shown
- New commands: C (reply with the image checksum) and I (refresh minutes,
  EEPROM)
- ESP32: NanoMonitor asks for the checksum after frames and sends the whole
  image again on a mismatch, missing answer or Nano restart; counts ERR
  replies. Periodic whole-image resync.
- Settings: "Dot refresh" and "Image resync" intervals (settings v5,
  v4 records are migrated)
- System tab: loop timing, free memory, frame check counts
- test_driver: the real driver against a simulated panel

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 15:20:26 +02:00

2.0 KiB
Raw Blame History

How it works

← Back to the README

  1. ESP32 boot. The ESP32 connects to WiFi and starts ArduinoOTA. After a crash it runs only OTA for 15 seconds, and after repeated crashes it goes to safe mode. Bad OTA firmware is rolled back automatically, see Keeping OTA alive. It then switches the display relay on, waits for the Nano's READY message (at most 3 s), shows "Connecting...", starts NTP and connects to MQTT.
  2. Clock. Once the time is synced, the ESP32 sends a new frame whenever the screen changes, mostly once a minute:
    • 08:00–22:00: the page: the chosen page (by default the built-in Clock page, Pikachu with a thought bubble showing HH:MM, yawning from 17:00), or what the schedule and rules pick.
    • 22:00–23:30: the clock is only shown during the minutes :00, :15, :30 and :45. 30 seconds after each of those minutes, the relay turns the display off.
    • 23:31–08:00: the screen is cleared (or shows the off image chosen in the web UI) and power is cut after 30 seconds.
  3. Home Assistant: switches, dropdowns and sensors over MQTT, see Home Assistant.
  4. Nano. The Nano reads commands from the serial line and updates its frame buffer. On D it flips only the dots that changed, in small steps so it never stops reading the serial port. Every 2 minutes (Settings, "Dot refresh") it flips every dot once more to fix dots that did not flip.
  5. Frame check. After a frame the ESP asks the Nano for a checksum of its image and compares it with what it sent. When they differ (lost bytes can shift the picture), the Nano doesn't answer, or it restarted, the ESP sends the whole image again. It also does that every 10 minutes (Settings, "Image resync"); only dots that differ flip, so normally nothing changes. The counts are on the System tab.

The serial protocol is described in src/nano/README.md.