Om microcontrollers och i synnerhet ESP32

För några år sedan laborerade jag med microcontrollers, specifikt med Arduino. Jag kom i kontakt med området genom att en arbetskamrat på Ericsson tog med mig till ett s k “Maker lab” här i Linköping. Där fick vi en snabb introduktion till ämnet och fick sedan i uppgift att försöka konstruera en apparat som vattnade en blomkruka automatiskt vid behov. En inte helt lätt uppgift, skulle det visa sig. Men detta fick mig i alla fall att bli förtjust i konceptet microcontrollers, eftersom det till skillnad från en dator som kör ett operativsystem tillåter användaren att ha fullständig kontroll över vad som händer.

Så för den som inte är så insatt i ämnet skall jag först berätta vad en microcontroller är. En microcontroller är en pytteliten och billig dator med inbyggt minne och anslutningar för olika typer av periferi-enheter såsom knappar, displayer och sensorer. Det som främst skiljer den från en vanlig dator som också kan ha inbyggt minne och anslutningar för periferi-enheter är att den inte kör något fullständigt operativsystem som t ex Windows eller Linux. För att köra ett riktigt operativsystem behöver CPU’n ha en s k MMU (Memory Management Unit) som ser till att hålla olika processer åtskiljda i minnet och att kunna hantera stora mängder av RAM och vid behov spara undan till en hårddisk om minnet inte räcker till. En microcontroller å andra sidan jobbar i allmänhet bara med en sak åt gången (en process) och det är användaren/programmeraren som bestämmer vad som skall hända i detalj. Det är detta som gör det så givande – man känner att man har fullständig kontroll över allt som händer.

Nåväl, i dessa tider när riktiga datorer och framförallt minnen har blivit jättedyra tänkte jag att det skulle vara kul att prova på att programmera microcontrollers igen. Så jag har skaffat ett gäng sådana tillsammans med olika periferi-enheter såsom knappar, lysdioder, displayer och olika typer av sensorer. De flesta av mina microcontrollers tillhör en och samma familj: ESP32 från en firma som heter Espressif. Dessa kretsar kännetecknas av att de flesta av dem har inbyggt WiFi och många av dem har dessutom inbyggt Bluetooth och s k 802.11.15 radio som används för Zigbee och Thread protokollen. Thread är det nya, häftiga protokollet som tillsammans med Matter på nästa nivå utgör grunden för det Smarta Hemmet. IKEA har gått över från sin serie “Trådfri” som baserades på Zigbee protokollet till detta nya Matter/Thread och deras nya Hubb kallas Dirigera. Av IKEA kan man nu köpa prylar som GRILLPLATS (en styrbar ström-plugg), TIMMERFLOTTE (en termometer och luftfuktighetsgivare), KAJPLATS (styrbara lampor) m fl. Och det fina med Matter/Thread-prylar är att de fungerar ihop utan att de behöver komma från samma tillverkare. Därför tänker jag mig att själv skapa sådana prylar med hjälp av microcontrollers.

ESP32-familjen av microcontrollers kan programmeras på olika sätt: Man kan antingen gå på tillverkarens egna utvecklingsmiljö – Espressif IDE – eller så kan man gå på Arduino’s IDE som har massor med bra bibliotek (drivrutiner hade det kallats om det var en dator) för periferi-enheter, eller, om man främst vill göra något som fungerar bra ihop med HomeAssistant så använder man med fördel ESPHome. Och ESPHome är ett jätteintressant sätt att programmera eftersom det inte liknar vanlig, proceduriell kod, utan mer en beskrivning av typen “jag har den här och den här prylen och de är kopplade till varandra på det här sättet, och nu vill jag att när pryl a rapporterar det här så skall detta hända”. Denna beskrivning skrivs i ett språk som kallas YAML (Yet Another Modelling Language) och det är precis samma språk som används när man beskriver hur en Docker container skall startas upp. Det är bara en sak som gör det lite klurigt: Antalet mellansteg först på raden är en del av syntaxen, eller uttryckt på ett annat sätt: Det spelar roll hur långt in på raden varje kommando börjar. Och här gör man bort sig med jämna mellanrum…

Så vilka experiment har jag då gjort hittills? Om vi bortser från den obligatoriska “få en lysdiod att blinka” så har jag gjort en display (med e-Paper teknik) som visar dagens elpriser plus en väderleksprognos. Den är faktiskt väldigt användbar där den står i köket och hela tiden visar aktuellt pris och kommande priser. För att kunna driva den med ett batteri så sover den mest hela tiden och vaknar upp varje kvart för att flytta en markör “NU” för var vi är i prisdiagrammet och vaknar också ett antal gånger per dygn för att uppdatera väderprogrosen och sist men inte minst en gång per dygn för att hämta nya elpriser från Nord Pool integrationen i HomeAssistant.

Nästa experiment var att göra en musikspelare som ansluter till Music Assistant – en serverprogramvara som också har koppling till HomeAssistant. Där fick jag, tillsammans med ChatGPT en fungerande uppkoppling och där en billig touch-display visade album-bild och spelarkontroller. Där behövde jag också använda en extern digital-till-analogomvandlare eftersom detta inte är inbyggt i microcontrollern.

Det senaste experimentet var att se om det gick att göra en webserver av en microcontroller, och det korta svaret är “ja då”, men i praktiken är det ett inte speciellt bra sätt att göra en webserver på, åtminstone inte om den skall betjäna mer än ett par användare.

Nu tar jag nästa steg och ser om jag kanske skall hitta ett sätt att få microcontrollern att lyssna på ett kontrollord (typ “Hey Google”, fast ett annat ord) och sedan starta en inspelning. Jag tänker mig att om detta fungerar skulle den få sitta i badrummet i källaren för i duschen får jag ofta bra tankar som jag vill spara ner så fort jag kan så att jag inte glömmer 🙂

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

Denna webbplats använder Akismet för att minska skräppost. Lär dig om hur din kommentarsdata bearbetas.