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.
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
- Installer M5Burner på PC-en. Det er M5Stacks offisielle verktøy for å legge firmware på enheten.
- Velg nøyaktig enhetsmodell i M5Burner og last ned UIFlow 2-firmware for akkurat den modellen.
- Flash firmware og sett opp nettverk. M5Burner kan legge inn WiFi-innstillinger under flashingen og gi deg en Access Code.
- Åpne UIFlow 2 i nettleseren og velg samme kontrollermodell som du flashet.
- Koble til med USB-kabel eller med Access Code, og kontroller at enheten vises som tilkoblet før du bygger programmet.
| Tilkobling | Slik virker det | Fordel | Begrensning |
|---|---|---|---|
| USB | Kabel mellom PC og enhet | Rask opplasting, og WebTerminal viser feil direkte | Enheten må stå ved PC-en, og kabelen må overføre data |
| Access Code | Enheten er på WiFi, og koden kobler den til prosjektet | Trådløs programmering og test der enheten skal stå | Krever stabilt WiFi og internett; feilmeldinger er tyngre å følge |
Hva passer UIFlow 2 til?
| Prosjekt | Nyttige blokker | Nybegynnerfokus | Neste steg |
|---|---|---|---|
| Temperaturdisplay | I2C-sensor, variabel, label og timer | Les verdi og oppdater skjermen | Valider måling, filtrer og logg feil |
| WiFi-knapp | Knapp, WLAN, HTTP eller MQTT | Et knappetrykk sender en melding | Tidsavbrudd, ny tilkobling og autentisering |
| Mini-datalogger | Sensor, klokke, fil og SD-kort | Skriv verdi med tidsstempel | Buffer, trygg filskriving og rotasjon av loggfiler |
| Enkel motorstyring | PWM, inngang og stoppbetingelse | Se sammenhengen mellom inngang og utgang | Endestopp, strømvern og sikker tilstand |
| Skjermmeny | UI-editor, knapp eller touch og sider | Bygg en synlig tilstandsmaskin | Skill 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.
- Opprett prosjektet: velg eksakt kontroller og riktig tilkoblingsmetode.
- Legg til sensoren: finn den konkrete Unit-modellen og velg porten den faktisk er koblet til.
- Lag en label: plasser et tekstfelt i UI-editoren med plass til verdi, enhet og feilmelding.
- Les i et fast intervall: ikke oppdater skjerm og buss så raskt som løkken klarer. Bruk en timer eller pause som passer sensoren.
- Valider: avvis verdier utenfor sensorens dokumenterte område, og vis «ingen måling» ved kommunikasjonsfeil.
- 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.
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.




