IoT og smarthus

UIFlow 2.0 og MicroPython: programmer M5Stack med blokker

Kompakt ESP32-enhet med sensor foran UIFlow-blokker og MicroPython-kode

UIFlow 2.0 er M5Stacks nettbaserte utviklingsmiljø for grafisk programmering. Du setter sammen Blockly-blokker for skjerm, knapper, sensorer, nettverk og logikk, og miljøet lager MicroPython-kode av dem. Det gjør verktøyet egnet både til det første møtet med programmering og til raske prototyper på kompatible M5Stack-enheter.

Kort forklartFlash UIFlow 2-firmware med M5Burner, velg nøyaktig samme kontrollermodell i nettleseren og koble til med USB eller Access Code. Bygg et lite program og test det med Run Once før du bruker Run Always. Åpne Code Preview underveis: blokkene viser idéen, mens MicroPython-koden viser hva programmet faktisk gjør. Blokker og API varierer med firmwareversjon og enhet, så bruk dokumentasjonen som passer din versjon.

Slik fungerer UIFlow 2

I arbeidsområdet finnes blokker for system, tid, WLAN, MQTT, HTTP, filsystem, GPIO, I2C, UART og enhetens innebygde maskinvare. Moduler og Unit-sensorer legges til som utvidelser. En enhet med skjerm får i tillegg en UI-editor der tekst, bilder og knapper plasseres visuelt.

Run Once kjører programmet én gang for testing. Run Always laster programmet ned til enheten og setter det til å starte automatisk ved oppstart. Test først med USB og WebTerminal synlig, så ser du feil før programmet blir standard ved oppstart.

Kom i gang: M5Burner og tilkobling

  1. Installer M5Burner på PC-en. Det er M5Stacks offisielle verktøy for å legge firmware på enheten.
  2. Velg nøyaktig enhetsmodell i M5Burner og last ned UIFlow 2-firmware for akkurat den modellen.
  3. Flash firmware og sett opp nettverk. M5Burner kan legge inn WiFi-innstillinger under flashingen og gi deg en Access Code.
  4. Åpne UIFlow 2 i nettleseren og velg samme kontrollermodell som du flashet.
  5. Koble til med USB-kabel eller med Access Code, og kontroller at enheten vises som tilkoblet før du bygger programmet.
TilkoblingSlik virker detFordelBegrensning
USBKabel mellom PC og enhetRask opplasting, og WebTerminal viser feil direkteEnheten må stå ved PC-en, og kabelen må overføre data
Access CodeEnheten er på WiFi, og koden kobler den til prosjektetTrådløs programmering og test der enheten skal ståKrever stabilt WiFi og internett; feilmeldinger er tyngre å følge

Hva passer UIFlow 2 til?

ProsjektNyttige blokkerNybegynnerfokusNeste steg
TemperaturdisplayI2C-sensor, variabel, label og timerLes verdi og oppdater skjermenValider måling, filtrer og logg feil
WiFi-knappKnapp, WLAN, HTTP eller MQTTEt knappetrykk sender en meldingTidsavbrudd, ny tilkobling og autentisering
Mini-dataloggerSensor, klokke, fil og SD-kortSkriv verdi med tidsstempelBuffer, trygg filskriving og rotasjon av loggfiler
Enkel motorstyringPWM, inngang og stoppbetingelseSe sammenhengen mellom inngang og utgangEndestopp, strømvern og sikker tilstand
SkjermmenyUI-editor, knapp eller touch og siderBygg en synlig tilstandsmaskinSkill visning, data og hendelseslogikk

Første prosjekt: sensorverdi på skjerm

Velg en kontroller med display, for eksempel en M5StickC Plus SE, og en sensor som UIFlow oppgir støtte for. Koble til med strømmen av, og kontroller porttype, spenning og pinout. At kontakten ser ut som Grove, betyr ikke at alle moduler bruker samme spenningsnivå eller buss.

  1. Opprett prosjektet: velg eksakt kontroller og riktig tilkoblingsmetode.
  2. Legg til sensoren: finn den konkrete Unit-modellen og velg porten den faktisk er koblet til.
  3. Lag en label: plasser et tekstfelt i UI-editoren med plass til verdi, enhet og feilmelding.
  4. Les i et fast intervall: ikke oppdater skjerm og buss så raskt som løkken klarer. Bruk en timer eller pause som passer sensoren.
  5. Valider: avvis verdier utenfor sensorens dokumenterte område, og vis «ingen måling» ved kommunikasjonsfeil.
  6. Test i WebTerminal: skriv ut råverdi og feilkode før data lagres eller sendes videre.

Den samme oppgaven kan bygges på en M5Dial med dreieknapp, touch og RFID, men skjermoppsettet og hendelsene blir annerledes. Kopier derfor ikke et blokkprosjekt til en annen kontroller uten å kontrollere innebygd maskinvare og pinnetilordning.

Koden bak blokkene

Den eksakte koden varierer med kontroller, widgets og UIFlow-firmware. Offisielle UIFlow 2-eksempler følger likevel et gjenkjennelig mønster: import av M5-modulene, en setup()-funksjon, en loop() som kaller M5.update(), og feilhåndtering rundt hovedprogrammet.

import time
import M5
from M5 import *

def setup():
    M5.begin()
    # UIFlow setter inn oppsett av skjerm, sensor og widgets her.

def loop():
    M5.update()
    # UIFlow setter inn blokklogikken her.
    time.sleep_ms(20)

if __name__ == "__main__":
    try:
        setup()
        while True:
            loop()
    except (Exception, KeyboardInterrupt) as e:
        print("Feil:", e)

Dette er et forkortet strukturbilde, ikke et komplett program for alle M5Stack-kort. M5.update() leser blant annet knappene på nytt, og derfor må den kalles i hver runde av løkken. Widget- og sensor-API må hentes fra dokumentasjonen som passer UIFlow-versjonen og kontrollermodellen. Fordelen med Code Preview er at du kan se nøyaktig hvilken import og metode hver blokk blir til.

Fra blokker til egne funksjoner

Når prosjektet vokser, gjør du gjentatte blokker om til funksjoner. En god sensorfunksjon returnerer enten en validert verdi eller en tydelig feiltilstand. Hold visning og nettverk utenfor selve målingen. Da kan den samme funksjonen brukes på skjermen, i en logger og i en MQTT-melding.

def validate_temperature(raw_value, low=-40.0, high=85.0):
    if raw_value is None:
        return None
    if not (low <= raw_value <= high):
        return None
    return round(raw_value, 1)

sensor_value = 21.37  # i praksis: verdien fra sensorblokken
temperature = validate_temperature(sensor_value)
status = "ingen måling" if temperature is None else "måling klar"

Grensene over er bare eksempler på programstruktur, ikke en spesifikasjon for din sensor. Bytt dem ut med produsentens dokumenterte måleområde, eller med et snevrere plausibelt område når prosjektet krever det. I en mer avansert løsning bør du også skille mellom «ingen data», «bussfeil» og «verdi utenfor område».

Run Once, Run Always og feilsøking

Bruk Run Once så lenge maskinvare og blokker endres. Følg med i WebTerminal etter importfeil, I2C-feil og unntak. Starter enheten på nytt, kontroller strømforsyningen og loggen før du antar at koden er årsaken. Skjerm, WiFi-sending og sensor sammen kan gi en helt annen belastning enn et tomt program.

Run Always er riktig når programmet er testet og skal starte av seg selv. Sørg først for at du kan koble til eller flashe enheten på nytt hvis programmet henger. La aldri programmet slå på motor, relé eller varmeelement i setup() før innganger og sikker tilstand er kontrollert.

Tips: Legg inn en kort pause eller en knappesjekk i starten av programmet mens du utvikler. Da er det lettere å komme inn på enheten igjen hvis et program med Run Always låser seg i en løkke.

Prosjektfiler og versjonskontroll

UIFlow 2 skiller mellom ressurser på enheten og ressurser i prosjektet. Ifølge offisiell dokumentasjon kan USB-modus lagre filer lokalt på én enhet, mens prosjekt- og WiFi-flyten kan knytte ressurser til prosjektet. Bilder og lyd må derfor dokumenteres sammen med blokkprosjektet.

Eksporter prosjektet jevnlig, og noter UIFlow-versjon, firmwareversjon og kontrollermodell sammen med filen. Ta også vare på et skjermbilde av blokkene og en kopi av den genererte koden ved viktige milepæler. Koden er nyttig dokumentasjon, men du trenger fortsatt prosjektfilen fra UIFlow for å redigere blokkene senere.

Når bør du gå videre?

Bli i UIFlow så lenge blokkene er oversiktlige, maskinvaren er støttet og prosjektet kan testes. Gå over til ren MicroPython når du trenger egne moduler, mer strukturert kode, automatiske tester eller et bibliotek som ikke har blokker. Vurder Arduino C++ eller ESP-IDF når minne, timing, strømstyring, drivere eller langsiktig vedlikehold krever mer kontroll.

En kompakt M5Stamp Pico Mate kan programmeres både med blokker og i tekstbaserte miljøer og er derfor fin når du vil sammenligne det samme prosjektet. Les først oversikten over programmering av ESP32 og M5Stack, og gå videre til Arduino, PlatformIO og ESP-IDF når prosjektet trenger en mer klassisk kildekodeflyt. Er du ny på ESP32-maskinvare, gir ESP32 for nybegynnere grunnlaget for kobling, spenning og feilsøking.

Kilder og videre lesing

Oppsett, M5Burner, USB og Access Code samt kjøring er kontrollert mot M5Stacks UIFlow 2 Web IDE-guide og enhetens programmerings- og tilkoblingsguide. Grensesnitt, Code Preview og generert MicroPython følger den offisielle layout-dokumentasjonen. Kodestrukturen er kontrollert mot M5Stacks åpne UIFlow MicroPython-repositorium og deres offisielle eksempler.

Oppsummering

UIFlow 2.0 gjør M5Stack-programmering synlig: blokkene beskriver logikken, Code Preview viser MicroPython, og WebTerminal gir tilbakemelding fra enheten. Velg riktig kontroller og firmware, test med Run Once, valider sensordata og eksporter prosjektet sammen med versjonsnumrene. Når blokkene blir for trange, kan du ta med den samme logikken videre til MicroPython, Arduino eller ESP-IDF.

Alle guider

Produkter omtalt i denne guiden

Produktene som brukes og sammenlignes i guiden, med pris og lagerstatus.