Foto av färdig klimat- och ljusmätare samt inklippt skärmklipp från molntjänsten IO
Molnkopplad klimat- och ljusmätare. Foto: (CC BY)

Gör-det-själv-guide till IoT i museet

Du har säkert hört uttrycket IoT, Internet of Things, på svenska ”sakernas internet” och har en viss bild av vad det handlar om, men har kanske inte reflekterat över hur det kan vara användbart i en utställnings-/museimiljö. Den här guiden är ett insteg till IoT i museet och enklare programmering.

IoT handlar om hur fler och fler elektroniska produkter är konstant uppkopplade mot internet och genom det sammankopplade med varandra. Nya bilar är till exempel uppkopplade och bilens mjukvara kan uppdateras och uppgraderas utan att besöka verkstaden. Eller så kan bilen spåras via GPS i händelse av stöld och du kanske även kan fjärrstarta den via telefonen.

Smarta lösningar ökar

Det smarta hemmet är ett annat område som växt enormt de senaste åren, med fjärrstyrda lampor, rullgardiner, strömmande bild och ljud, tvättmaskiner, larm, övervakningskameror, energiövervakning, med mera.

Men, hur ser det ut med våra utställningar och museiföremål?

Värdefulla och stöldbegärliga föremål har ofta en säkerhetsklass som kräver säkerhetsmonter och i många fall uppkopplade larm, men övervakas det lokala klimatet i montern? Kanske ligger det i bästa fall en logger i närheten av föremålet, men den är inte alltid så ”smart”, utan behöver ”tankas ur” manuellt.

Det finns givetvis färdiga produkter och system för att skapa tillförlitlig övervakning av klimat och liknande i utställningslokaler och magasin och för kritiska användningsområden ska givetvis dessa användas. I den här guiden kommer jag gå igenom hur man kan använda billig och ”smart” teknik för att fjärrövervaka klimat- och ljusförhållanden i en lokal eller monter.

IoT kan också förstås användas för publika ändamål på museet, alltså för att skapa interaktion med besökaren och presentera media eller liknande.

Beskrivning

Målsättningen med den här guiden är att ge en inblick IoT-världen och hur du själv kan komma igång. Exemplet använder en krets som olika sensormoduler ansluts till och som kopplar upp sig mot befintligt trådlöst nätverk för att föra över informationen till molnet för fjärrövervakning.

I exemplet laddas data upp till elektronikleverantören Adafruits moltjänst för IoT-prototyper (”IO”), men det finns förstås många olika molntjänster och andra som är bättre lämpade för storskaliga implementationer.

Det går också att skapa ett ”lokalt moln”, men det kommer inte att tas upp i den här guiden.

M5StickC Plus

M5StickC Plus med API Key-fönstret på skärmen.
M5StickC Plus. Foto: Oscar Engberg (CC BY)

En av de vanligaste elektroniska kretsar som används för IoT är ESP32, som förutom processor har inbyggt Wi-Fi, Bluetooth och diverse in- och utgångar för att koppla till externa komponenter. Den här guiden kommer att använda en variant av ESP32 som heter M5StickC Plus av följande anledningar:

  • M5StickC plus är ”färdigbyggd”, med display, ett par tryckknappar, lysdiod, batteri, med mera.
  • Det går att koppla till så kallade ”Hats” och ”Units”, det vill säga olika sensorer och liknande.
    Hats kopplas en i taget in i överdelen, medan Units kopplas med en standardiserad kabel/kontakt (”Grove”) in via I2C, som är ett parallellt gränssnitt, där alltså flera ”Units” kan kopplas in samtidigt.
  • Den kan programmeras genom att skriva traditionell kod (Arduino/MicroPython), eller via UIFlow, en webbaserad visuell kodredigerare, där man drar omkring olika grafiska element/block.
  • Både M5StickC Plus och tillhörande Units är förhållandevis billiga.

Sammantaget gör dessa faktorer att det är rätt så enkelt att komma igång, eftersom du varken behöver kunna löda eller skriva kod.

Units och Hats

Det finns också ett stort antal Units att beställa och testa med, där det går snabbt att växla mellan olika enheter.

Urval av Units och Hats till M5StickC.
Urval av Units och Hats till M5StickC. Foto: Oscar Engberg (CC BY)

I exemplet kommer två olika Units att användas, ENV III och Dlight.

  • ENV III mäter temperatur, luftfuktighet och barometriskt tryck. Temperaturmätaren har en mätnoggranhet av ±0.2℃ inom normalt användningsområde (0-60℃) och luftfuktighet mäts med ±2% noggrannhet.
  • Dlight mäter omgivande ljustyrka i lux, med en upplösning av 1 lux.

Bränna firmware

Innan enheten kan programmeras behöver den laddas med en firmware, eller grundmjukvara, som ställer in den på att logga in på ett trådlöst nätverk och att den ska kunna programmeras av webbversionen av UIFlow.

För att kunna göra det behöver du ladda ned och installera ”M5 Burner” från: docs.m5stack.com/en/download.

Skärmdump från M5Burner som visar en översikt av mjukvaran.
Skärmdump från M5Burner, https://www.m5stack.com/. Foto: (CC0)
  1. Koppla in M5StickC Plus med den medföljande USB-C-kabeln till din dator och kör M5Burner.
  2. Välj ”STICKC” i vänsterspalten och välj ”Download” under ”UIFLOW(StickC plus)”.
  3. Välj ”Burn” och skriv in ditt trådlösa nätverks namn samt i lösenord. Obs! Om du gör detta på din arbetsplats bör du välja ett gästnätverk så att du inte utsätter arbetsplatsens nätverk för eventuella säkerhetsrisker.
  4. Välj ”Next”, kolla att det finns en COM-port angiven under ”COM:” och att det under ”BaudRate:” står ”1500000” och välj ”Start”.
  5. Nu ”bränns” den nya konfigurationen in i minnet och enheten kopplar upp sig till det trådlösa nätverket. Du kan alltid göra om det här steget om du vill byta firmware eller ändra inställningar förtrådlöst nätverk.

När enheten anslutit till nätverket och skärmen är blå med texten ”API KEY” följt av åtta tecken är du redo för nästa steg.

Programmering – UIFlow

Skärmdump från UIFlow som visar en översikt av mjukvaran.
Skärmdump från UIFlow – översikt, https://flow.m5stack.com/. Foto: (CC0)

Till M5StickC Plus finns alltså ett visuellt kodredigeringsverktyg som heter UIFlow. Det går att köra dels som ett eget program, men även via webben. UIFlow bygger på Googles öppna programvara Blockly och består, som namnet antyder, av olika byggblock som motsvarar kodsträngar. När du programmerar UIFlow behöver du förstå logiken, men inte själva koden.

När det gäller kod så är det viktigt med formatering och det räcker med att ett tecken eller indrag blir fel för att inget ska fungera (och utan att ge relevant återkoppling till vad som är fel). Även fast kodningen sker visuellt via block, kan du hela tiden se koden som skapas genom att klicka på ”Python” längst upp i fönstret. Klicka på ”Blockly” för att återgå till visuell programmering.

UIFlow når du här: flow.m5stack.com/
För att komma igång med UIFlow kan du ladda ned den här guiden:
m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/UIFlow-StickC-Book-English.pdf

API-nyckel

När du startar UIFlow första gången möts du av ett popup-fönster där du anger den API-nyckel om du ser i M5Stick Plus display, samt väljer typ av enhet följt av ”OK”.

Skärmdump från UIFlow som visar fönstret Setting.
Skärmdump från UIFlow – Setting, https://flow.m5stack.com/. Foto: (CC0)
 

Om du skulle skriva fel så når du samma fönster igen genom att klicka på menyknappen längst upp till höger följt av ”Setting”.

Om allt går som det ska så kommer det tillfälligt stå ”Connected” längst upp till höger. I menyraden uppe till höger finns en knapp för att logga in/registrera sig. Det kan vara bra att göra för att spara projekt i molnet (det är också bra att även spara projekten på din dator, via ”Save as”-knappen).

Koppla in och lägga till klimatsensorn ENV III

Nu har du fått upp ett redigeringsfönster med bara ett block, ”Setup”. Till vänster ser du en bild på enheten och under finns knapparna ”Units”, ”Hats” och ”Stamps”. Se till att ”Units” är vald och klicka på plusknappen där under. Nu dyker det upp en lista med tillgängliga Units att koppla in. Kryssa i ”ENV III” och ”OK”. Nu har ENV III lagts till som en Unit under bilden på M5StickC Plus. Till vänster om den bilden finns en rad med knappar (”Title”, Label”, ”Rect”, etc). Det är olika grafiska element som du kan dra och släppa i displayfönstret på bilden.

Nere till höger i UIFlow finns knapparna ”Run” och ”Download”. Skillnaden mellan dessa är att det som överförs med Run försvinner när enheten startas om, men du kan fortsätta ladda upp nya versioner utan att göra något. Om du använder ”Download” så sparas programmet på enheten permanent, men om du behöver göra ändringar måste enheten sättas i UIFlow-läge igen genom att starta om (knappen på vänstra sidan) och sen trycka på M5-knappen (under displayen) när det står ”Setting” och en gång till på samma knapp när det står ”Code”.

Lägga till text i skärmen

  1. Koppla in ENVIII-modulen med tillhörande kabel till porten på under laddporten på M5Stick. Starta om M5Stick genom att trycka på knappen på vänstra sidan.
  2. I UIFlow, dra ut en ”Label” och placera den till upptill till vänster. I fältet ”Name:” skriver du ”labelTemp” och i fältet ”Text:” skriver du ”Temperatur”
    Skärmdump från UIFlow som visar hur en Label läggs till.
    Skärmdump från UIFlow – Label, https://flow.m5stack.com/. Foto: (CC0)
  3. Dra ut en ”Label” och placera den till under föregående. I fältet ”Name:” skriver du ”temperature” och i fältet ”Text:” skriver du ”-”.
    Skärmdump från UIFlow som visar hur en Label läggs till.
    Skärmdump från UIFlow – Label, https://flow.m5stack.com/. Foto: (CC0)
  4. Dra ut en ”Label” och placera den till under ”-”. I fältet ”Name:” skriver du ”labelHumidity” och i fältet ”Text:” skriver du ”Luftfuktighet”
  5. Dra ut en ”Label” och placera den under föregående. I fältet ”Name:” skriver du ”humidity” och i fältet ”Text:” skriver du ”-”
  6. Dra ut en ”Label” och placera under ”-”. I fältet ”Name:” skriver du ”labelPressure” och i fältet ”Text:” skriver du ”Lufttryck”
  7. Dra ut en ”Label” och placera under föregående. I fältet ”Name:” skriver du ”pressure” och i fältet ”Text:” skriver du ”-”.
    Skärmdump från UIFlow som visar den simulerade skärmen med Labels.
    Skärmdump från UIFlow – Display, https://flow.m5stack.com/. Foto: (CC0)
  8. Klicka på ”Run” för att se resultatet.

Skapa en loop

Nästa steg är att göra själva programmeringen. Den stora svarta ytan är programmeringsfönstret och till vänster om den finns en meny med tillgängliga block. I grundläget finns det bara ett block som heter ”Setup”. Setup är det som körs en gång när enheten startar, själva huvudprogrammeringen läggs i en ”Loop”, som alltså körs om och om igen. För att bara visa värdena från ENV III på displayen behövs inget under ”Setup”.

Gör så här för att skapa en ”Loop”:

  1. Klicka i blockmenyn på blocket ”Event” och dra ut en ”Loop” och koppla ihop den med ”Setup” genom att släppa den i underkant.
    Skärmdump från UIFlow som visar menyrubriken
    Skärmdump från UIFlow – Event, https://flow.m5stack.com/. Foto: (CC0)

    Skärmdump från UIFlow som visar Loop.
    Skärmdump från UIFlow – Loop, https://flow.m5stack.com/. Foto: (CC0)

Variabler

När vi ska mäta de olika värdena kan det vara bra att spara mätvärdet som en variabel. En variabel är ett objekt vars värde kan ändras och som representerar ett annat värde (i det här fallet de tre olika mätvärdena). Genom att använda sig av variabler kan dessa återanvändas i olika stadier av programmeringen och själva mätningen behöver då bara göras en gång per loop (kommer visa sig när programmeringen blir mer komplex).

  1. Klicka därför i blockmenyn på blocket ”Variables” och ”Create variable…” och skriv in ”varTemperature” och ”OK”. Gör samma sak med ”varHumidity” och ”varPressure”.
  2. Klicka i blockmenyn på blocket ”Variables” och dra ut ”set[varPressure]to” och placera inuti loopen.
    Skärmdump från UIFlow som visar funktionen
    Skärmdump från UIFlow – set[variable]to Foto: (CC0)
  3. Dubbelklicka på det block du precis drog ut för att kopiera det, placera kopian under den första och upprepa så att det ligger tre stycken block i loopen.
  4. Ändra blocken så att de heter ”set[varTemperature]to”, ”set[varHumidity]to”, ”set[varPressure]to”
    Skärmdump från UIFlow som visar funktionen
    Skärmdump från UIFlow – set[variable]to Foto: (CC0)
  5. Klicka i blockmenyn på ”Units (1)” och vidare på blocket ”ENV” och dra ut ”Get-env3_0-Pressure” och koppla ihop på högersidan av ”set[varPressure]to”. Gör samma sak med ”temperature” och ”humidity”. I det här steget läses värdena in och sparas som variabler.
    Skärmdump från UIFlow som visar hur data hämtas från ENV III.
    Skärmdump från UIFlow – hämta data från sensor, https://flow.m5stack.com/. Foto: (CC0)
  6. Nu ska variablerna kopplas till displayen. Klicka i blockmenyn på blocket ”UI”, följt av ”Label” och dra ut ”Label[]show-Hello M5” och placera inuti loopen under den sista ”set[]to”.
  7. Klicka i blockmenyn på blocket ”Variables” och dra ut ”varTemperature” och placera i rutan ”Hello M5” på föregående block. Kopiera det blocket till tre stycken och ändra till respektive variabel genom att klicka på variabeln på blocken. Ändra också till höger om ”Label” i samma block till respektive namn (”temperature”, ”humidity”, ”pressure”)
    Skärmdump från UIFlow som visar funktionen
    Skärmdump från UIFlow – ändra Label, https://flow.m5stack.com/. Foto: (CC0)
  8. För att inte riskera att programmet kraschar på grund av konstanta loopar/mätningar lägger vi in en paus innan loopen börjar om.
    Klicka i blockmenyn på blocket ”Timer” och dra ut ”Wait-1-s” och lägg sist i loopen.
  9. Ändra ”Wait” till 10 sekunder och klicka sen på ”Run” för att köra programmet.
    Skärmdump från UIFlow som visar funktionen
    Skärmdump från UIFlow – Wait 10s, https://flow.m5stack.com/. Foto: (CC0)
    M5StickC Plus med ENVIII - råvärden
    M5StickC Plus med ENVIII – råvärden Foto: Oscar Engberg (CC BY)

Nu visas de olika mätvärdena i displayen och uppdateras var tionde sekund. Som du ser är det väldigt många decimaler, vilket gör att det inte får plats, samt att lufttrycket visas i pascal (Pa) istället för hektopascal (hPa), som är det som används. Vi behöver därför avrunda temperatur (lämpligtvis till tiondels grad), luftfuktighet (till hela procent) samt omvandla lufttryck från Pa till hPa och avrunda till hela hPa.

Runda av mätvärden

Det finns en matematisk funktion som heter ”round” som avrundar ett värde till närmaste heltal. För att kunna avrunda till tiondel (en decimal), så behöver värdet tiodubblas, avrundas och efter det divideras med 10.

  1. Klicka i blockmenyn på ”Math” och dra ut blocket ”round” till en tom yta.
  2. Klicka i blockmenyn på ”Math” och dra ut det andra blocket uppifrån till en tom yta.
  3. Ändra i det senaste blocket från ”+” till ”x” för att multiplicera.
  4. Klicka i blockmenyn på ”Math” och dra ut det första blocket uppifrån till högra sidan om ”x” i det föregående blocket.
  5. Ändra värdet på senaste objektet till ”10”.
  6. Duplicera blocket med multiplikationen genom att dubbelklicka på det och ändra kopian till ”÷” för att dividera med 10.
    Skärmdump från UIFlow som visar funktionen
    Skärmdump från UIFlow – round, https://flow.m5stack.com/. Foto: (CC0)
  7. Dra loss ”Get[env3_0]Temperature” och släpp i rutan till vänster om ”x 10”.
    Skärmdump från UIFlow som visar funktionen
    Skärmdump från UIFlow – round, https://flow.m5stack.com/. Foto: (CC0)
  8. Ta hela det sammansatta blocket och koppla på blocket ”round”
    Skärmdump från UIFlow som visar funktionen
    Skärmdump från UIFlow – round, https://flow.m5stack.com/. Foto: (CC0)
  9. Ta nu hela detta block och släpp i rutan till vänster om ”÷ 10” och koppla sedan dessa till ”set[varTemperature]to”.
    Skärmdump från UIFlow som visar funktionen
    Skärmdump från UIFlow – round, https://flow.m5stack.com/. Foto: (CC0)
    Skärmdump från UIFlow som visar funktionen
    Skärmdump från UIFlow – round, https://flow.m5stack.com/. Foto: (CC0)
  10. För ”humidity” räcker det om du lägger till ett ”round”-block innan värdet läses in eftersom det räcker om det avrundas till hela procent och för ”pressure” dividerar du först med ”100” innan ”round” för att få utvärdet i hela hPa.
    Skärmdump från UIFlow som visar tillägg av funktionen
    Skärmdump från UIFlow – round, https://flow.m5stack.com/. Foto: (CC0)
  11. Klicka på ”Run” för att se resultatet.
    M5StickC Plus med ENVIII - avrundade värden
    M5StickC Plus med ENVIII – avrundade värden Foto: Oscar Engberg (CC BY)

Lägga till ljussensorn – Dlight

Nu ska även ljussensorn Dlight kopplas in och läggas till i programmeringen:

  1. Koppla ur ENVIII-modulen från M5Stick och koppla in den och Dlight-modulen via Grove Hub till M5Stick. Du behöver tre kablar. Starta om M5Stick.
  2. I UIFlow, under bilden på M5StickC Plus klickar du på plustecknet under ”Units”, kryssar i ”Dlight” och ”OK”.
  3. I displaybilden ovanför dubbelklickar du på ”Lufttryck” för att skapa en kopia och placerar ut den i linje med övriga ”labels”. Klicka på den och ändra ”Name:” till ”labelBrightness” och ”Text:” till ”Ljusstyrka”.
    Kopiera ”-” under ”Lufttryck:”, placera ut den och ändra ”Name:” till ”brightness”.
  4. I blockmenyn klickar du på ”Units (2)”och drar ut ”[dlight_0]continous mode[H-Res1]” och placerar mellan ”Setup” och ”Loop”.
    Skärmdump från UIFlow som visar tillägg av dlight till Setup-delen.
    Skärmdump från UIFlow – dlight, https://flow.m5stack.com/. Foto: (CC0)
  5. Klicka på ”Variables” och ”Create variable…” och skriv in ”varBrightness” och ”OK”.
  6. Klicka på ”Variables” och dra ut ”set[]to” och placera under de övriga ”set”-blocken.
  7. Ändra föregående rads block till ”set[varBrightness]to”.
  8. Klicka på ”Units(2)” och dra ut och koppla ihop med ”set[varBrightness]to”.

Du kan också passa på att lägga till enheter till varje label.

  1. Klicka på ”Text” i blockmenyn och dra ut det 1:a och det 15:e blocket.
  2. Placera det 1:a blocket i det 15:e blockets högra sida och i vänstra sidan placerar du respektive variabel.
  3. Kopiera och dra till ”Label…Show”. Skriv in enheterna i respektive textblocksfrifält (”C”, ”%”, ”hPa”, ”lx”)
    Skärmdump från UIFlow som visar tillägg av
    Skärmdump från UIFlow – dlight, read lux value, https://flow.m5stack.com/. Foto: (CC0)
  4. Klicka på ”Run” för att se resultatet.
    M5StickC Plus med ENVIII och DLIGHT
    M5StickC Plus med ENVIII och DLIGHT Foto: Oscar Engberg (CC BY)

Ladda upp mätvärden till molnet

M5StickC och Adafruit IO molntjänst
M5StickC och Adafruit IO molntjänst Foto: Oscar Engberg (CC BY)

Nu är alltså själva mätningen programmerad, men värdena syns bara i displayen och sparas inte någonstans. Eftersom M5StickC Plus inte har något minneskort så kommer vi ladda upp mätvärden till molnet kontinuerligt. På det sättet kan man också fjärrövervaka och se statistik på hur mätvärden förändras över tid. Det finns många olika molntjänster att använda sig av och en del har redan inbyggt stöd i UIFlow som nås under rubriken IoTCloud (Microsoft Azure, Amazon AWS, Tencent, Blynk, AliIoT) i blockmenyn. Företaget bakom M5StickC Plus, M5Stack, har också en egen gratis molntjänst, EzData, som har en egen rubrik i blockmenyn.

Adafruit IO

Men, i det här exemplet kommer jag använda Adafruits molntjänst IO. Adafruit är ett företag som säljer IoT-produkter och gör-det-själv-elektronik och som också har väldigt många bra tutorials kring elektronik och IoT. Molntjänsten IO är lättanvänd och gratis att komma igång med, samt har bra visualiseringar av såväl aktuellt mätvärde som statistik.

  1. Skapa ett konto på https://io.adafruit.com/
  2. Lägg inte till något ”device”, utan gå istället till ”Feeds” och lägg till ”temperature”, ”humidity”, ”pressure” och ”brightness” som nya ”Feeds”.
    Skärmdump från Adafruits molntjänst IO som visar fliken Feeds, med brightness, humidity, prssure och temperature
    Skärmdump från Adafruits molntjänst IO – Feeds, https://io.adafruit.com/. Foto: (CC0)
  3. Klicka på nyckelikonen uppe till höger i webbläsaren och kopiera nyckelsträngen vid ”Active key”. Ditt användarnamn och nyckeln är det som identifierar kommunikationen mellan M5StickC Plus och Adafruit IO.
    Skärmdump från Adafruits molntjänst IO som visar IO Key.
    Skärmdump från Adafruits molntjänst IO – Key, https://io.adafruit.com/. Foto: (CC0)

MQTT i UIFlow

För att kommunicera mellan M5StickC Plus och IO så används ett nätverksprotokoll som heter MQTT. Det används för IoT som ”maskin-till-maskin”-kommunikation och kräver lite bandbredd och processorkraft. För att konfigurera UIFlow med IO gör du så här:

  1. I blockmenyn i UIFlow klickar du på ”Advanced”, följt av ”MQTT” och drar ut det stora blocket under ”init” och placerar det direkt under ”Setup”.
  2. Vid ”set client id” kan du skriva ”M5Stick”.
  3. Vid ”server” skriver du ”io.adafruit.com”.
  4. Vid ”user” anger du ditt användarnamn hos Adafruit IO och vid ”password” klistrar du in nyckeln därifrån.
  5. Klicka på ”Advanced”, ”MQTT” och dra ut ”mqtt start” och placera under ”Setup”, precis innan ”Loop”.
    Skärmdump från UIFlow som visar koden frö Adafruit IO under Setup-delen
    Skärmdump från UIFlow, https://flow.m5stack.com/. Foto: (CC0)
  6. Klicka på ”Advanced”, ”MQTT” och dra ut ”Publish topic[]msg[]Qos[0]” och placera under ”Loop”, precis innan ”Wait”.
  7. Kopiera föregående block så att du får fyra stycken ovanför varandra.
  8. Efter ”publish topic” skriver du ditt användarnamn på IO följt av ”/feeds/temperature”, ”/feeds/humidity”, ”/feeds/pressure” och ”/feeds/brightness” för respektive block.
  9. Klicka på ”Variables” i blockmenyn och dra ut variablerna (varTemperature, etc) till respektive block efter ”msg”.
    Skärmdump från UIFlow som visar koden i loopen för att koppla ihop med Adafruit IO
    Skärmdump från UIFlow – Adafruit IO/MQTT, https://flow.m5stack.com/. Foto: (CC0)
  10. Klicka på ”Run” och kolla att värdena uppdateras i displayen.

Läsa av värden i Adafruit IO

  1. Gå till ”Feeds” på Adafruit IO och nu ska dina värden förhoppningsvis komma in.
    Skärmdump från Adafruits molntjänst IO som visar fliken Feeds, med brightness, humidity, prssure och temperature
    Skärmdump från Adafruits molntjänst IO – Feeds, https://io.adafruit.com/. Foto: (CC0)
  2. Klicka på exempelvis ”temperature”.
  3. Nu kan du se en graf och en växande lista med loggade värden.
    Skärmdump från Adafruits molntjänst IO som visar fliken Feeds med statistik för temperatur.
    Skärmdump från Adafruits molntjänst IO – Feeds/Temperature, https://io.adafruit.com/. Foto: (CC0)

Dashboards – visuella mätare

  1. Gå till menyn ”Dashboards” och klicka på ”New Dashboard” och skriv in exempelvis ”M5StickCPlus”. Här kan du visualisera de senaste mätvärdena:
  2. Klicka på kugghjulet till höger och välj ”Create New Block”.
  3.  Välj ”Gauge” och kryssa sen i ”temperature”, följt av ”Next step”.
  4. ”Block Title”: ”Temperatur”.
  5. ”Gauge Min Value”: lägsta förmodade temperatur, t ex ”15”.
  6. ”Gauge Max Value”: högsta förmdade temperatur, t ex ”35”.
  7. ”Gauge Label”: ”C” för Celsius
  8. ”Low Warning Value”: vid vilken temperatur som skalans färg ska ändras till rött när det är för kallt.
  9. ”High Warning Value”: vid vilken temperatur som skalans färg ska ändras till rött när det är för varmt.
  10. Kryssa i ”Show Icon” och välj en lämplig ikon i rullgardinsmenyn, exempelvis ”w:thermometer”.
  11. Gör samma för övriga mätvärden och konfigurera enligt hur du vill ha det.
  12. Om du klickar på kugghjulet kan du dels placera om mätarna som du ha dem, göra kontrollpanelen publik och visa den i helskärmsläge.
    Skärmdump från Adafruits molntjänst IO som visar fliken Dashboard, med fyra mätare för temperatur, luftfuktighet, lufttryck och ljusstyrka.
    Skärmdump från Adafruits molntjänst IO, https://io.adafruit.com/. Foto: (CC0)
  13. Under menyn ”Actions” kan du lägga till funktioner som att du får ett epostmeddelande om till exempel temperaturen överskrider ett visst värde.

Nu har du alltså skapat en klimat- och ljusmätare som är uppkopplad till molnet!

Kapsling och extrafunktioner

M5StickC Plus med ENVIII och DLIGHT - 3d-pritnad kapsling
M5StickC Plus med ENVIII och DLIGHT – 3d-pritnad kapsling Foto: Oscar Engberg (CC BY)
M5StickC Plus med ENVIII och DLIGHT - 3d-pritnad kapsling
M5StickC Plus med ENVIII och DLIGHT – 3d-pritnad kapsling Foto: Oscar Engberg (CC BY)

Min kollega Gustav Löfgren har skapat en kapsling till enheterna som du kan ladda ned och skriva ut i en 3d-skrivare, eller skicka till en 3d-skrivartjänst på nätet. Det finns också ett program till UIFlow med utökade funktioner, exempelvis varvtalsstyrning av en fläkt vid överskriden temperatur (via MOSFET-kretsen i materiallistan)
Filerna hittar du här i komponent- och fillistan längst ned på sidan.

Spara programmet i M5StickC

När du känner dig klar med programmeringen klickar du på ”Download” i UIFlow, så sparas programmet i M5StickC Plus och startar upp igen om den stängts av.

Det visade sig dock att när jag valde att ladda ned programmet till M5Stick så visas inte rubrikerna i displayen. Det avhjälps genom att lägga till UI/Label/Set[***}show för samtliga rubriker och placera under Setup.

För att återgå till UIFlow-läge startar du M5StickC Plus (knappen på vänstra sidan), trycker på ”M5”-knappen på när det står ”Setting” och stegar till ”Code” med knappen på högra sidan, följt av ”M5”-knappen. På samma ställe kan du istället välja ”Setup” om du exempelvis vill koppla upp enheten till ett annat (tidigare använt) trådlöst nätverk.

Säkerhet

IoT-produkter kan utgöra säkerhetsluckor för hackare att ta sig vidare in i en organisations nätverk och även om det inte är troligt med detta program, som endast skickar information, så bör du kolla med din IT-support innan du kopplar upp M5StickC Plus mot nätverket, allra helst om det gäller organisationens interna nätverk. Mer information om detta finns i MSB:s Säkerhet i cyberfysiska system.

Mätnoggrannhet

De olika sensorerna står sig väl i en jämförelse med de några av mätinstrument Riksantikvarieämbetet har tillgängliga. Men, dessa lågprismoduler är förstås inte professionella, kalibrerade sensorer och bör användas med hänseende till detta.

I väldigt låga ljusnivåer (<70 lux), visar bilderna nedan på relativt stor felmarginal (-20,5% vid 68 lux till -60% vid 30 lux), med det är känsligt med placeringen av ljussensorerna vid dessa låga nivåer och små förslyttningar ger stort utslag. Vid högre ljusnivåer blir felmarginaler bättre, +0,3% till +1,5%.

M5StickC Plus med ENVIII och DLIGHT - Ljusnivå/jämförelse
M5StickC Plus med ENVIII och DLIGHT – Ljusnivå/jämförelse Foto: Oscar Engberg (CC BY)

Klimat- och ljusmätare sida vid sida med professionell ljusmätare, där den förra visar 54 lux och den senare 68 lux.
M5StickC Plus med ENVIII och DLIGHT – Ljusnivå/jämförelse. Foto: Oscar Engberg (CC BY)
Klimat- och ljusmätare sida vid sida med professionell ljusmätare, där den förra visar 721 lux och den senare 732 lux.
M5StickC Plus med ENVIII och DLIGHT – Ljusnivå/jämförelse. Foto: Oscar Engberg (CC BY)
Klimat- och ljusmätare sida vid sida med professionell ljusmätare, där den förra visar 1664 lux och den senare 1658 lux.
M5StickC Plus med ENVIII och DLIGHT – Ljusnivå/jämförelse. Foto: Oscar Engberg (CC BY)
Klimat- och ljusmätare sida vid sida med professionell ljusmätare, där den förra visar 5422 lux och den senare 5350 lux.
M5StickC Plus med ENVIII och DLIGHT – Ljusnivå/jämförelse. Foto: Oscar Engberg (CC BY)

Möjlig påverkan på föremål

Om du har tänkt använda enheten i en monter tillsammans med känsliga föremål, så är det troligtvis så att plasten i M5StickC Plus, sensorer och kablar, samt kapslingen, kan påverka föremålen i montern. Detta har jag dock inte tagit hänsyn till i denna guide.

Om du väljer att skriva ut kapslingen så kan du välja ett filament som har fått godkänt i Riksantikvarieämbetets kulturarvslaboratoriums Oddytestlista.

Närliggande tekniker

Som alternativ till enheter som kommunicerar via befintligt trådlöst nätverk kan nämnas Zigbee, BLE (Bluetooth Low Energy), Lora, med flera. Här går det att hitta färdiga produkter till en låg kostnad, som är batteridrivna och där batterierna i vissa fall kan räcka i flera år. Det är möjligt dels eftersom enheten stängs ned i intervall mellan mätningar/uppladdningar och dels för att dessa former av radiokommunikation kräver mycket mindre energi än trådlöst nätverk/WiFi. Det behövs då en speciell hub eller router som blir en brygga mellan befintligt IP-nätverk och Zigbee/BLE/LORA.

Värt att nämna är också Thread/Matter som spås ta över som en typ av standard inom IoT, som sammanlänkar olika typer av IoT-produkter/kommunikationsgränssnitt.

Sammanfattning

Den här guiden är alltså tänkt som ett insteg till IoT och programmering för utställnings- och museibruk och nu har du förhoppningsvis fått mersmak och kanske vill ge dig in på att skriva kod, som exempelvis Arduino eller Python. Det finns många bra och gratis kurser och guider för det på webben. IoT, Arduino, ESP32, Raspberry Pi med mera går att använda till mycket mer än vad den här guiden gått igenom.

På Riksantikvarieämbetets utställningsverkstad används denna och liknande teknik ofta i publika gränssnitt mot museibesökaren, exempelvis för att skapa roligare och mer fysiska alternativ till pekskärmar som gränssnitt för interaktion.

Det är mycket möjligt att det till en låg kostnad går att skapa en storskalig klimat- och ljusmätande implementation med M5StickC Plus och Adafruit IO eller liknande för hela museet, men det kan kanske vara rimligare att köpa in ett heltäckande system för detta, inte minst för att ”hemsnickrade” lösningar tenderar att bli personknutna och känsliga för i det fall den som drivit projektet slutar. Om ni ändå vill gå vidare med en sån lösning, se till att testa, dokumentera noggrant och utbilda flera i personalen i hur det fungerar.

Om du kör fast, vill dela med dig av era lösningar eller liknande, tveka inte att höra av dig!
Det finns också, om du inte redan visste det, ett forum för utställnings- och museitekniska frågor.

Läs mer och anmäl dig till Forumet här

 


Komponentlista och filer

Komponenterna finns från flera svenska elektronikåterförsäljare, länkarna går till tillverkarens hemsida.