MicroPython är en implementation av programmeringsspråket Python som är anpassad för små mikrokontrollers. Det gör det möjligt att programmera exempelvis Raspberry Pi Pico, ESP32 och många andra mikrokontrollers med vanlig Python-kod.
Det låter kanske som en liten förändring, men det öppnar upp ett helt annat sätt att arbeta med elektronik.
Traditionellt programmeras Arduino och många andra mikrokontrollers i C eller C++. Det ger mycket kontroll och är effektivt, men det innebär också att man behöver hantera betydligt mer detaljer.
Ett enkelt program kan exempelvis se ut så här i Arduino C:
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
}
Samma idé i MicroPython blir betydligt mer kompakt:
from machine import Pin
import time
led = Pin("LED", Pin.OUT)
while True:
led.value(1)
time.sleep(0.5)
led.value(0)
time.sleep(0.5)
MicroPython-koden ligger nära hur man skulle beskriva problemet: skapa en pinne, sätt den som utgång och ändra dess värde.
Med traditionell Arduino-programmering skriver man programmet, kompilerar det och laddar sedan ner programmet till mikrokontrollern.
Med MicroPython finns istället en Python-miljö direkt på mikrokontrollern. Man kan ansluta datorn, skriva kod och köra den direkt.
Det gör experimenterandet väldigt snabbt.
Man kan till exempel skriva:
from machine import Pin
led = Pin("LED", Pin.OUT)
led.on()
och LED-lampan tänds direkt.
Det går också att läsa värden och testa funktioner direkt från den interaktiva Python-miljön. Det gör MicroPython särskilt trevligt när man håller på att experimentera med elektronik.
Det är viktigt att MicroPython inte är en simulator eller något som körs på en vanlig dator.
Python-programmet körs på själva mikrokontrollern.
Man kan därför arbeta direkt med:
GPIO
digitala in- och utgångar
PWM
ADC
UART
SPI
I²C
timers
interrupts
sensorer
displayer
motorer
reläer
nätverk och Wi-Fi
Det gör att en liten Raspberry Pi Pico eller ESP32 kan bli en komplett styrdator för ett elektronikprojekt.
MicroPython har också en intressant egenskap: det är lätt att bygga upp program av små funktioner och objekt.
Istället för att tänka:
"Vilka register måste jag ändra?"
kan man ofta tänka:
"Vad vill jag att den här delen av programmet ska göra?"
Det gör koden lättare att läsa och förändra.
Det är särskilt användbart när ett projekt börjar växa. Ett program som från början bara skulle blinka en LED kanske senare ska läsa en temperaturgivare, styra en fläkt, kommunicera via Wi-Fi och visa information på en display.
Då kan MicroPythons vanliga Python-struktur bli väldigt praktisk.
Här blir MicroPython riktigt intressant.
En mikrokontroller kan exempelvis läsa en sensor och sedan skicka informationen via Wi-Fi till en server.
Den kan kommunicera med:
MQTT – för IoT och meddelanden mellan enheter.
HTTP – för att skicka data till en webbtjänst eller ett API.
WebSocket – för kontinuerlig kommunikation med en server.
Bluetooth – på mikrokontrollers som stöder det.
Det går alltså att bygga små IoT-enheter som både styr elektronik och kommunicerar med omvärlden.
Raspberry Pi Pico är ett mycket bra exempel på vad MicroPython kan användas till.
En Pico innehåller en kraftfull mikrokontroller men kostar väldigt lite. Trots det kan den exempelvis:
läsa hundratals olika typer av sensorer
styra motorer och servon
generera PWM
läsa och skriva via I²C, SPI och UART
styra LCD- och OLED-displayer
läsa knappar och givare
hantera SD-kort
skapa egna mätinstrument
fungera som USB-enhet
generera ljud
styra annan elektronik
Och allt detta kan programmeras med Python.
MicroPython ersätter inte C/C++.
C och C++ är fortfarande bättre när man behöver maximal prestanda, mycket exakt timing eller extremt låg minnesförbrukning.
En mikrokontroller kan också göra saker i C som blir svårare eller långsammare i MicroPython.
Det är därför Arduino C fortfarande är ett mycket bra val för exempelvis:
mycket snabba realtidsfunktioner
avancerad signalbehandling
tidskritiska protokoll
mycket stora program
extremt låg strömförbrukning
projekt där varje byte RAM räknas
MicroPython använder mer RAM och processortid eftersom Python-programmet måste köras av en interpreter.
Men för väldigt många projekt är mikrokontrollerns kapacitet mer än tillräcklig.
Det behöver inte vara en fråga om MicroPython eller C.
Man kan börja ett projekt i MicroPython eftersom det går snabbt att utveckla och experimentera med.
Om man senare upptäcker att någon del behöver vara snabbare kan den delen implementeras på ett mer effektivt sätt i C/C++.
Det ger en ganska trevlig kombination:
MicroPython för utveckling och logik – C för de delar där maximal prestanda behövs.
Det är egentligen här MicroPython blir som roligast.
En liten mikrokontroller kan bli nästan vad som helst:
Mätinstrument
Läs temperatur, luftfuktighet, tryck, ljus, ström eller andra sensorer och visa resultatet på en display.
Automatisering
Styr reläer, motorer, ventiler, lampor och andra apparater.
IoT
Samla in mätdata och skicka den via Wi-Fi till en server.
Musik och ljud
Generera toner, styra synthesizers, läsa MIDI och bygga enkla ljus- och ljudsystem.
Nätverksutrustning
En ESP32 eller annan nätverksförsedd mikrokontroller kan kommunicera med datorer och andra enheter över nätverket.
Egna elektronikprojekt
MicroPython gör det enkelt att snabbt prova en idé utan att först behöva bygga upp ett stort C/C++-projekt.
Den stora fördelen med MicroPython är inte egentligen att Python-koden är kortare.
Det är att avståndet mellan idé och fungerande elektronik blir mycket mindre.
Man kan få en idé, koppla in några komponenter och börja experimentera nästan direkt.
För hobbyprojekt, prototyper, mätutrustning, IoT och olika typer av elektronikexperiment är det en väldigt kraftfull kombination.
MicroPython gör helt enkelt att en liten mikrokontroller börjar kännas mer som en liten dator än som en traditionell Arduino.