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.
Jeg har udviklet systemarkitekturen, PHP-backenden, ESP32-koden og informationsvisningen og samlet delene gennem løbende test på den fysiske hardware.
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 med et konkret spørgsmål, som jeg hurtigt afprøver på fysisk hardware. Før arbejdet med det store dashboard brugte jeg mindre ESP32-skærme til at undersøge enkelte dele af idéen: Kan en microcontroller hente aktuelle data fra nettet? Hvordan skal informationen forenkles, før den sendes til en lille enhed? Og hvordan opdateres et e‑paper-display uden at tegne hele skærmen igen? De små forsøg gav et praktisk grundlag for at samle kalender, vejr, temperaturer og benzinpris i én løsning.
Projektet bygger videre på disse eksperimenter med små ESP32-baserede displays. En mindre ESP32-C6-skærm fungerede som mobilt testmiljø for datahentning, opdateringslogik, 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.
AI som udviklingsværktøj
Jeg brugte ChatGPT og Codex som tekniske sparringsværktøjer til kodegennemgang, fejlsøgning og dokumentation. Systemvalg, implementering og vurdering foregik gennem mine egne forsøg: Hver løsning blev tilpasset, uploadet og afprøvet på den fysiske hardware, før den blev en del af det samlede system.
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