Et fysisk statusdashboard, der samler kalender, vejr, temperaturmålinger, benzinpris, dato og klokkeslæt på en 7.5″ tricolor e‑paper-skærm.
Projektet undersøger, hvordan hverdagsdata kan vises på et roligt, fysisk display frem for i endnu en app, browser eller notifikationsstrøm. Løsningen kombinerer en ESP32 med en PHP-backend, der henter og forenkler data fra blandt andet Google Kalender, MET/Yr og OK’s benzinpriser. ESP32’en modtager små JSON-feeds, holder styr på tid og opdaterer e‑paper-displayet med både full refresh og partial updates.
Hvorfor projektet er interessant
Projektet er interessant, fordi det ikke primært handler om at bygge en vejrstation eller tilslutte en skærm til en microcontroller. Det handler om at gøre digitale hverdagsdata tilgængelige i et fysisk format, der opfører sig anderledes end almindelige skærme.
E‑paper er langsomt, har begrænsede farver og kræver omtanke ved opdatering. Til gengæld kan det stå fremme uden baggrundslys, uden animationer og uden hele tiden at kræve opmærksomhed. Det gør teknologien velegnet til information, der skal være synlig, men ikke påtrængende: dagens aftaler, vejrudsigten, temperaturer og andre små beslutningsdata.
Projektet blev derfor en undersøgelse af, hvordan man designer et embedded informationsdisplay, hvor datakilder, displaylogik, hukommelsesbegrænsninger og brugeroplevelse skal fungere sammen.
Forarbejde og udviklingsproces
Mange af mine projekter starter som en undren. Kan man egentlig?
Derfor har jeg som regel en lille ESP32 med en skærm, som jeg hurtigt kan kode. Skærmen har den fordel at jeg hurtigt kan se et eller anden output. Så undrede jeg mig omkring noget data. Kan jeg hente data fra hjemmesider. Kan jeg hente den aktuelle temperatur, et eller andet sted fra. Og så var det året hvor benzinpriserne blev meget opad og ned ad. Kan man læse den aktuelle standerpris, og så den vist på en arduino? Hvorda?. Osv. Små projekter som bliver til som tanker, o bygges hurtigt på en lille bitte esp32 med skærm.
Så dette projekt bygger videre på tidligere eksperimenter med de små ESP32-baserede displays. Før arbejdet med det store 7.5″ e‑paper-dashboard lavede jeg mindre moduler til en lille ESP32-C6-skærm, som jeg ofte havde med mig. Den fungerede som et mobilt testmiljø, hvor jeg kunne afprøve enkelte dele af idéen i mindre skala: visning af data, opdateringslogik, små informationsfelter og samspillet mellem netværksdata og embedded hardware.
Det større dashboard samler disse erfaringer i et mere komplekst system. Fokus ligger derfor ikke primært på elektronik eller grafisk design, men på datahentning, databehandling og visning på begrænset hardware.
Undervejs blev projektet bygget op modul for modul. WiFi, tid, display, sensordata, vejr, kalender og benzinpris blev testet hver for sig, før de blev samlet i ét dashboard. Det gjorde det muligt at finde fejl i rækkefølgen mellem displaybuffer, HTTP-kald, JSON-parsing og e‑paper-rendering.
Hvad blev konkret udviklet?
Løsningen består af en ESP32, et 7.5″ tricolor e‑paper-display og en PHP-backend på en webserver.
ESP32’en håndterer WiFi, tidsstyring via NTP, datahentning, JSON-parsing og rendering på e‑paper-displayet. Den viser blandt andet temperatur fra to sensorer, aktuel benzinpris, dato og klokkeslæt, syv dages vejrudsigt og en syv-dages kalenderoversigt med helligdage og fødselsdage.
PHP-backenden fungerer som mellemled mellem ESP32’en og de eksterne datakilder. Den henter og forenkler data fra Google Kalender, MET/Yr og OK’s benzinpriser og leverer dem som små JSON-feeds. På den måde skal ESP32’en ikke selv håndtere store API-svar, OAuth-flow, refresh tokens eller komplekse datamodeller.
Den arbejdsdeling er central for projektet: webserveren håndterer de tunge og følsomme integrationer, mens ESP32’en håndterer den lokale, fysiske visning.
Google Kalender
Kalenderdelen krævede mere end bare et API-kald. Jeg satte en Google Cloud-integration op med OAuth, Calendar API, redirect URI, testbruger og calendar.readonly-adgang. Først godkendes adgangen via en browser, hvorefter serveren gemmer et refresh token i en privat mappe udenfor web-roden.
Når dashboardet skal bruge kalenderdata, er det derfor ikke ESP32’en, der taler direkte med Google. PHP-backenden bruger refresh token til at hente et access token, læser kalenderen via Google Calendar API og omsætter aftaler, helligdage og heldagsaftaler til et lille syvdages JSON-feed, som ESP32’en kan parse.
Vejrdata som eget JSON-feed
Vejrdata kommer fra MET/Yr, men ESP32’en henter ikke det rå vejr-API direkte. Det rå svar er for stort og for komplekst til, at det giver mening på microcontrolleren. I stedet henter PHP-backenden vejrdata for Grevinge, cacher svaret og omsætter timeseries-data til syv enkle dagsposter.
Det JSON-feed, ESP32’en modtager, indeholder kun de felter, dashboardet skal vise: ugedag, vejrtekst, dagtemperatur, nattemperatur, regn, vindstyrke og vindretning. På den måde bliver det store vejr-API reduceret til et format, der passer til både skærmens layout og ESP32’ens hukommelse.
Benzinpris som eget JSON-feed
Benzinprisen hentes også gennem en PHP-backend. Serveren kalder OK’s brændstofdata, finder de relevante stationer og laver et mindre JSON-svar med blandt andet stationsnavn, opdateringstidspunkt og pris for Blyfri 95.
ESP32’en skal derfor ikke kende OK’s fulde datastruktur. Den leder kun efter stationen Grevinge og feltet for price_blyfri_95, hvorefter prisen kan vises og kun opdateres på skærmen, hvis den faktisk har ændret sig.
Data som materiale
En vigtig del af projektet har været arbejdet med at hente data ind fra forskellige kilder og gøre dem brugbare i et personligt fysisk interface. Det har været interessant at arbejde med forskellige API’er, dataformater og metoder til at hente information udefra — og derefter kombinere disse data med egne sensordata og interne aftaler.
Projektet viser på den måde en form for praktisk datakontrol: muligheden for at trække data fra verden ind i egne projekter, bearbejde dem og vise dem præcis i det format, der giver mening i den konkrete hverdag. Vejr, benzinpriser og kalenderaftaler er ikke bare separate services; de bliver omsat til et samlet overblik, hvor eksterne forhold, familiens planer og egne målinger vises side om side.
Kalenderdelen er et godt eksempel. Familien kan bruge en almindelig delt kalender og invitere eller oprette aftaler dér, hvor de allerede arbejder. Dashboardet henter derefter kalenderdata og viser dem i et fast, fysisk display sammen med vejr, temperaturer og andre statusdata. På den måde bliver både ydre påvirkninger og interne aftaler samlet i ét overblik, vist på den måde jeg selv har brug for.
Valg af skærm og platform
Valget af en 7.5″ tricolor e‑paper-skærm var et kompromis mellem læsbarhed, fysisk størrelse, strømforbrug, pris og teknisk kompleksitet. En mindre skærm ville være billigere og lettere at arbejde med, men ville hurtigt gøre dashboardet for kompakt. En større e‑paper-skærm ville give mere plads, men også øge kravene til billedbuffers, hukommelse, opdateringstid og fysisk indbygning.
7.5″ blev derfor et praktisk mellemformat: stort nok til at vise kalender, vejr, temperaturer, benzinpris og ur samtidig, men uden at projektet blev flyttet op i en helt anden pris- og størrelsesklasse.
Skærmen er ikke valgt som fuldfarve-display, fordi projektets formål ikke er at vise billeder, video eller en traditionel grafisk brugerflade. Den begrænsede farvepalette passer bedre til et statusdisplay, hvor farve bruges selektivt til struktur og fremhævelse. Sort bruges til hovedinformation, hvid til baggrund og rød til markeringer som dato, overskrifter og særlige kalenderfelter.
ESP32 blev valgt frem for Raspberry Pi, fordi projektet skulle være et embedded dashboard og ikke en lille computer med operativsystem. En Raspberry Pi ville give mere processorkraft, men også højere strømforbrug, længere opstartstid og mere systemvedligeholdelse. ESP32’en passer bedre til et device med én tydelig opgave: forbinde til WiFi, hente små JSON-feeds, holde styr på tid og opdatere et e‑paper-display.
Grafik på displayet
Grafikken på dashboardet er ikke lavet som færdige billeder, der bare vises på skærmen. Layoutet bliver tegnet direkte i firmwaren med tekst, linjer, felter og simple grafiske former. Det gælder også vejr-ikonerne, som tegnes som sol, sky, regn, sne, tåge eller torden ud fra vejrteksten.
Kalenderen tegnes på samme måde i faste dagskolonner. Helligdage får rød markering, aftaler bliver ombrudt eller afkortet, og fødselsdage får et lille Dannebrog, som også tegnes direkte i koden. Det gør grafikken tæt koblet til de data, der kommer ind, i stedet for at være statiske billeder.
Faktaboks:
- 7.5″ tricolor e‑paper-dashboard med ESP32.
- Viser kalender, vejr, temperaturer, benzinpris, dato og klokkeslæt.
- PHP-backend forenkler data fra Google Kalender, MET/Yr og OK.
- JSON-feeds er tilpasset begrænset embedded hardware.
- Projektet er bygget op modulvist med fysisk test på hardware.
Udfordringer og læring
En central udfordring var at få flere forskellige datakilder til at fungere sammen i ét stabilt display. Det handlede både om eksterne services, egne sensordata, kalenderdata, tidsstyring og e‑paper-displayets særlige opdateringsmønster.
Kalenderdelen var særligt kompleks, fordi Google Calendar kræver OAuth, refresh tokens og en datastruktur, som er for tung til at håndtere direkte på ESP32’en. Derfor blev kalenderintegration placeret på webserveren, mens ESP32’en kun modtog et forenklet syvdages JSON-feed.
E‑paper-displayet gav også særlige udfordringer. Full refresh er langsomt, mens partial updates skal bruges forsigtigt, så gamle tekstområder ryddes korrekt. Samtidig kræver tricolor-displayet særskilt håndtering af sort/hvid og rød visning.
Projektet gav især erfaring med at placere kompleksitet det rigtige sted i systemet: API-kald, OAuth og databehandling på serveren; timing, lokal status og visning på ESP32’en.
Arbejde med AI
Projektet blev udviklet i samspil med AI-værktøjer som ChatGPT og Codex. AI blev brugt som teknisk sparringspartner til at strukturere kode, foreslå modulopdeling, gennemgå fejl, skrive dokumentation og fastholde overblik undervejs.
Det afgørende arbejde foregik dog stadig gennem test på fysisk hardware. Hver løsning skulle uploades, afprøves, vurderes og justeres. AI fungerede derfor ikke som erstatning for hardwarearbejdet, men som et værktøj til at holde projektet opdelt i mindre, kontrollerbare trin.
Perspektivering
Projektet peger på en type digitalt interface med en anden logik end mobilen og computeren. Når information hænger fast på væggen eller står fremme som et fysisk display, bliver den opfattet og brugt anderledes end data, man først skal finde frem i forskellige apps. Det faste display gør informationen lettere tilgængelig i situationen: man kan stille sig hen foran det og få et samlet overblik uden at åbne kalender, vejrudsigt, sensordata og andre tjenester hver for sig.
I stedet for at efterligne mobilens interaktion med scrolling, notifikationer og navigation mellem apps bruger projektet e‑paper som et roligt fysisk medie til data, der skal være synlige, men ikke påtrængende.
For mig er projektet interessant, fordi det samler flere faglige spor: embedded prototyping, dataintegration, backendstruktur, informationsdesign og fysisk visning. Det er et projekt, hvor brugeroplevelsen ikke kun ligger i layoutet på skærmen, men også i valget af teknologi, opdateringsrytme, datamængde og systemarkitektur.

Seneste kommentarer