Jeg har lenge likt å reparere ting, bygge små løsninger og bruke det jeg allerede har liggende. Elektronikk har også alltid vært interessant, men programmering har vært den delen jeg har vært minst trygg på.
Da jeg begynte å lese om ESP32, tenkte jeg først at dette sikkert var mest for folk som allerede kunne mye kode. Et lite kretskort med Wi-Fi, Bluetooth og masse tilkoblinger så både spennende og litt komplisert ut.
Samtidig virket det som en ganske billig måte å eksperimentere på. Jeg hadde allerede loddeutstyr, testbrett, ledninger og forskjellige smådeler liggende. Derfor kjøpte jeg noen ESP32-kort og bestemte meg for å prøve.
Planen var å starte enkelt.
Som vanlig vokste ideen litt underveis.
Først måtte kortet bare gjøre noe
Det første målet var ikke å bygge noe avansert. Jeg ville bare få et ESP32-kort til å koble seg til datamaskinen og kjøre et enkelt program.
Jeg brukte Arduino IDE, valgte riktig kort og prøvde å laste opp kode. Det ble litt prøving med USB-drivere, riktig port og innstillinger før ting begynte å virke.
Da den første teksten dukket opp i Serial Monitor, var det faktisk ganske tilfredsstillende. Det betydde at jeg hadde kontakt med kortet, og at koden kjørte.
Neste steg var å koble til en sensor.
Jeg lærte fort at det var mye lettere å forstå kode når den gjorde noe fysisk. Når en verdi endret seg fordi jeg lyste på en sensor eller holdt fingeren på en knapp, ble sammenhengen mye tydeligere.
Jeg lærte ikke programmering først og bygde etterpå. Jeg lærte programmering fordi prosjektet trengte det.
Home Assistant gjorde ESP32 mye mer interessant
Rundt samme tid begynte jeg å bruke Home Assistant mer aktivt.
Home Assistant samler lys, sensorer, termostater, kameraer og andre smarthusenheter på ett sted. Det interessante var at jeg også kunne koble inn ting jeg bygde selv.
Da begynte ESP32 virkelig å gi mening for meg.
En ESP32 kunne stå et sted og følge med på en sensor. Home Assistant kunne vise statusen, lagre historikk og sende varsel til telefonen.
Enkelt forklart ble det slik:
Sensor → ESP32 → Wi-Fi → Home Assistant
Det første store målet var derfor å få en verdi fra ESP32 inn i Home Assistant.
For kommunikasjonen valgte jeg MQTT. Det er et meldingssystem hvor ESP32-en sender små beskjeder til en MQTT-server, og Home Assistant leser dem.
Første gang en egen sensor dukket opp i Home Assistant, føltes det som et ganske stort gjennombrudd. Det var ikke lenger bare en verdi i et svart tekstvindu på datamaskinen. Nå var det en faktisk sensor med navn, status og historikk.
Et lite problem ble det første nyttige prosjektet
Et av de første ordentlige prosjektene var en varsler for en luftavfukter.
Luftavfukteren har en lampe som blinker når vanntanken er full. Problemet var bare at man måtte være i samme rom for å se det.
Jeg kunne sikkert ha åpnet apparatet og forsøkt å hente ut et elektrisk signal, men jeg prøvde først den enkleste løsningen.
Jeg satte en lyssensor over varsellampen.
Når lampen blinker, registrerer lyssensoren dette. ESP32-en tolker signalet og sender beskjed til Home Assistant. Derfra kan jeg få varsel på mobilen om at tanken må tømmes.
Det er kanskje en litt omstendelig måte å følge med på én lampe, men løsningen virker.
Prosjektet lærte meg samtidig at det ikke holder at koden fungerer på testbrettet. Sensoren måtte plasseres riktig og skjermes mot annet lys. Hvis romlyset traff den, kunne den registrere feil.
Det var et tidlig eksempel på noe jeg senere har sett mange ganger: Den fysiske monteringen er ofte like viktig som programvaren.
Fra testbrett til noe som faktisk brukes
Etter det første prosjektet kom det raskt flere ideer.
Jeg bygde videre på en vanlig trådløs ringeklokke, slik at den fortsatt kunne ringe som før, men også sende beskjed til Home Assistant. Senere kunne varslingen kombineres med et kamerabilde.
Jeg laget også sensorer som følger med på statuslampene til vaskemaskin og tørketrommel.
Her var grunnideen den samme som med luftavfukteren. En lyssensor ser om lampen på maskinen lyser. ESP32-en bruker dette til å finne ut om maskinen går eller er ferdig.
Det høres enkelt ut, men lampene blinker og oppfører seg forskjellig. Derfor kunne ikke ESP32-en reagere på hvert lille blink.
Koden måtte vente og kontrollere at lyset hadde vært stabilt en stund før statusen ble endret. Hvis lampen hadde vært på lenge nok, ble maskinen satt som aktiv. Hvis den hadde vært mørk lenge nok, ble den satt som ferdig.
Jeg 3D-printet også små hetter som holder sensorene på plass og skjermer dem mot romlys. Før det var det mer midlertidige løsninger med teip og ledninger som gjerne flyttet på seg.
Da sensorene fikk ordentlig innkapsling, ble de mye mer stabile.
Ikke alt virket på første forsøk
Et temperaturprosjekt ga meg en annen nyttig lærdom.
Jeg koblet en temperatursensor til et lite ESP32-kort. Målingen virket, men temperaturen var høyere enn forventet.
Det viste seg at selve ESP32-kortet ble varmt og påvirket sensoren.
Sensoren var altså ikke ødelagt. Den målte bare temperaturen på feil sted.
Løsningen ble å bruke et annet kort og plassere temperatursensoren et stykke unna elektronikken.
Slike feil er egentlig noe av det mest lærerike. Når en verdi ser feil ut, er det lett å mistenke koden først. Men problemet kan like gjerne være strømforsyningen, plasseringen, en løs ledning eller varme fra en annen komponent.
Jeg laget en felles grunnkode
Da jeg hadde laget noen prosjekter, oppdaget jeg at store deler av koden var nesten lik hver gang.
Alle ESP32-enhetene måtte:
koble seg til Wi-Fi
koble seg til MQTT
prøve igjen hvis forbindelsen falt ut
fortelle Home Assistant om de var tilgjengelige
sende signalstyrke og oppetid
kunne startes på nytt
Derfor samlet jeg dette i en felles grunnkode.
Nå kan jeg starte et nytt prosjekt med en ferdig base og konsentrere meg om selve sensoren eller funksjonen. Grunnkoden tar seg av nettverk, MQTT og diagnostikk.
Dette gjorde nye prosjekter mye enklere å komme i gang med. I stedet for å bygge alt fra bunnen av hver gang, trenger jeg stort sett bare å endre navn og legge inn det nye prosjektet skal gjøre.
Hva jeg har lært
Jeg er fortsatt ikke programmerer, men jeg forstår mye mer av hva koden gjør enn da jeg startet.
Det viktigste jeg har lært, er å ta én ting om gangen.
Først får jeg sensoren til å reagere.
Deretter sjekker jeg verdien i Serial Monitor.
Så kobler jeg inn MQTT.
Etter det får Home Assistant vise statusen.
Til slutt lager jeg varsling, dashboard og permanent montering.
Når jeg prøver å gjøre alt samtidig, blir feilsøkingen fort vanskelig. Da kan problemet ligge i sensoren, koblingen, koden, Wi-Fi, MQTT eller Home Assistant.
Det er også lett å gjøre et lite prosjekt mye større enn nødvendig. En enkel temperatursensor trenger ikke nødvendigvis skjerm, tre knapper, meny og egen strømforsyning før den har klart å måle temperaturen riktig.
Den regelen prøver jeg å følge nå:
Få én nyttig funksjon til å virke først. Resten kan komme senere.
Fra ukjent kretskort til et nyttig verktøy
Da jeg startet, så jeg på ESP32 som et ganske ukjent kretskort for folk som kunne programmering.
Nå ser jeg på det mer som et verktøy.
Det kan koble en gammel ringeklokke, en varsellampe, en temperatursensor eller en knapp til Home Assistant. ESP32-en gjør selve jobben, mens Home Assistant gir oversikt, historikk og varsling.
Det jeg liker best, er at løsningene ikke bare er tester på et breadboard. Flere av dem er i vanlig bruk og løser små problemer i hverdagen.
Det var egentlig slik jeg startet med ESP32 og Home Assistant. Ikke med en stor plan, men med én sensor, litt kode og et konkret problem jeg hadde lyst til å løse.
Så kom det bare noen flere ideer etter hvert.
Stikkord:
ESP32
Home Assistant
Elektronikk og DIY
ESP32
Home Assistant
MQTT
Arduino IDE
smarthus
sensorer
3D-printing
elektronikk
hobbyprosjekter