← Tilbage til projekterIoT · ESP32 · LED-panel
Husnummer

Husnummeret der kan skifte tøj

Et 64×64 LED-panel på husmuren viser vores husnummer. Det nye er, at det nu kan skifte udseende — flag på fødselsdage, sne i december, en kylling der lister ind i hjørnet til påske — uden at jeg skal have en computer med ud i haven og genprogrammere noget.

Hvad den gør

Sådan virker det

Panelet skal to ting på samme tid: skubbe 4.096 pixels ud 60 gange i sekundet over en realtidsbus, og holde en WiFi-forbindelse i live. De to opgaver passer dårligt sammen på én chip — så løsningen blev to hjerner:

Web UI ──MQTT──▶ Gateway (WiFi, ekstern antenne)
                     │ UART, 3 ledninger

              Controller (WiFi slukket, HUB75-display)

                [ 64×64 panel ]

En lille gateway-chip håndterer netværk og MQTT. Den gamle ESP32 blev degraderet til ren displaycontroller med WiFi helt slukket. De to taler sammen over tre ledninger, og gatewayen uploader scener til controllerens eget filsystem — linjen bruges kun ved ændringer, ikke til at strømme billeder. Konsekvensen: dør netværket, sker der ingenting. Jeg mister fjernstyringen, ikke husnummeret.

Animationerne er ikke kode, men en JSON-beskrivelse controlleren fortolker — lag, sprites, bevægelse over tid. Det betyder nye animationer kan uploades uden at genflashe firmwaren.

Det, der var svært

Controlleren genstartede i ring, men kun forsynet gennem panelets egen 5V — klassisk brownout. En kondensator over 5V og GND løste det, verificeret ved at følge oppetiden over tre gange tre minutter uden USB tilsluttet.

Fire ud af ti filoverførsler fejlede på checksum. Ikke protokollen, men en modtagerbuffer der løb over mens controlleren havde travlt med skærmopdateringen. Større buffer løste det.

Et MQTT-bibliotek genbrugte sin egen buffer til både indgående og udgående beskeder — en filoverførsel kunne overskrive sig selv midt i afsendelsen. Fundet ved en gennemlæsning af koden, ikke ved en fejlmelding. Den slags giver ellers mystiske, uregelmæssige problemer måneder senere.

Teknikken, kort

Controller Gateway
Kort ESP32 WROOM-32 XIAO ESP32-C3
Rolle HUB75-display, WiFi slukket WiFi, MQTT, OTA
Watchdog 10 s 30 s

Begge enheder har en watchdog der genstarter dem, hvis hovedløkken hænger, og reset-årsagen rapporteres til Home Assistant, så en genstart aldrig sker ubemærket.

Hvad jeg tager med

Den beslutning, jeg er gladest for, er at gøre animation til data frem for kode — det gjorde hele systemet redigerbart uden genflashning. Og WiFi’et derude driller stadig, formentlig fordi panelets eget fladkabel forstyrrer gatewayens antenne. Muren har dog ikke bemærket noget — den viser husnummeret videre, uanset hvad netværket laver.