ESP32 med MicroPython lar deg programmere et ESP32-kort i Python i stedet for C++. Du legger MicroPython-fastvaren på kortet én gang, og etter det skriver du korte skript i Thonny som kjører direkte på kortet. Eksemplene er delt i tre nivåer: en blinkende LED, temperatur og luftfuktighet på en OLED-skjerm og en liten webserver som styrer LED-en, pluss dyp søvn for batteridrift.
main.py på kortet når det skal starte av seg selv. Bruk vanlige GPIO-pinner som 4, 21, 22 og 23, og unngå strapping-pinnene 0, 2, 5, 12 og 15, flashpinnene 6 til 11 og de rene inngangene 34 til 39 når du trenger en utgang. DHT-driveren er bygget inn, mens ssd1306-driveren for OLED installeres med mip.ESP32 med MicroPython: utstyr og pinner i eksemplene
Eksemplene er laget for ESP32-startsettet med WiFi-modul, sensorer og OLED-skjerm. Ifølge produktsiden har det et utviklingskort med ESP-WROOM-32-modulen og 30 I/O-pinner, et koblingsbrett med 830 hull, LED-er, motstander, trykknapper, 65 hann-hann- og 40 hunn-hunn-ledninger, DHT11, en OLED-skjerm på 1,3 tommer og en micro-USB-kabel. Den nøyaktige kortmodellen er ikke oppgitt. Koden er derfor skrevet for et vanlig ESP32-WROOM-32 DevKit, og pinnene omtales bare med GPIO-nummeret som er trykt på kortet, ikke med plasseringen.
Pin(23) i MicroPython betyr GPIO 23. På produktbildet av kortet i settet står numrene med en D foran, for eksempel D23. MicroPython-dokumentasjonen advarer om at enkelte kort har egen nummerering, så nivå 1 er også en test: blinker LED-en på D23 med Pin(23), stemmer merkingen.
| Del | GPIO i koden | Merket på kortet | Hvorfor denne pinnen |
|---|---|---|---|
| LED (nivå 1 og 3) | 23 | D23 | Vanlig I/O uten noen rolle ved oppstart |
| DHT11, data | 4 | D4 | Ikke strapping-pinne; brukes i MicroPythons DHT-eksempel |
| OLED, SDA og SCL | 21 og 22 | D21 og D22 | Vanlig I/O; standard I2C i Espressifs Arduino-kjerne |
| Potensiometer (valgfritt) | 34 | D34 | ADC1, som også virker når WiFi er på |
| Strøm | 3V3 og GND | 3V3 og GND | Sensor og skjerm får samme 3,3 V-nivå som ESP32 |
Hvilke ESP32-pinner bør du unngå?
Den klassiske ESP32-brikken har GPIO 0 til 19, 21 til 23, 25 til 27 og 32 til 39, men ikke alle passer til en LED eller en sensor. Tabellen bygger på Espressifs GPIO-oversikt og MicroPythons hurtigreferanse.
| Pinner | Hva de gjør | Hvorfor du unngår dem |
|---|---|---|
| 0, 2, 5, 12 og 15 | Strapping-pinner: nivået leses ved oppstart | Feil nivå kan gi feil oppstartsmodus eller hindre flashing |
| 6 til 11, og 16 og 17 på moduler med PSRAM | SPI-flash og PSRAM i modulen | Espressif fraråder annen bruk |
| 1 og 3 | UART0, som REPL og Thonny bruker | Du forstyrrer forbindelsen til PC-en |
| 34 til 39 | Bare innganger, uten interne pull-up-motstander | Kan ikke styre en LED, men passer til analog måling |
| ADC2: 0, 2, 4, 12 til 15 og 25 til 27 | Analog måling på ADC-blokk 2 | Virker ikke mens WiFi er på; gjelder bare analog bruk |
Ifølge esptool-dokumentasjonen starter ESP32 i nedlastingsmodus når GPIO 0 er lav ved oppstart, og en høy GPIO 12 gir 1,8 V flashspenning som kan hindre oppstart. En LED eller sensor på en strapping-pinne kan altså endre hva kortet gjør når det får strøm.
Installer MicroPython på ESP32 med Thonny eller esptool
Fastvaren (firmware) er selve MicroPython-tolken; programmene dine er filer i kortets filsystem. Til ESP32-WROOM-32 bruker du den generiske fastvaren ESP32 / WROOM på micropython.org, som passer til de fleste ESP32-kort med minst 4 MiB flash. Velg en stabil versjon under Releases, ikke Preview.
Med Thonny
- Installer Thonny fra thonny.org og koble kortet til PC-en med en USB-kabel som overfører data, for eksempel micro-USB-kabelen fra settet.
- Åpne Run > Configure interpreter..., velg «MicroPython (ESP32)» og kortets port, eller «< Try to detect port automatically >».
- Klikk «Install or update MicroPython (esptool)». Velg porten, ESP32 under «MicroPython family», varianten for ESP32 / WROOM og den nyeste versjonen. Kryss av for «Erase all flash before installing» første gang, og klikk Install.
- Lukk vinduene. Når Shell nederst viser
>>>, er du koblet til MicroPython.
Menynavnene er Thonnys engelske standardnavn. Med norsk språk heter Run «Kjør», File «Fil», Save as «Lagre som...» og Stop «Stopp», mens «Configure interpreter...» står på engelsk.
Med esptool i et terminalvindu
Installer Espressifs flashverktøy med pip install esptool. Det krever Python 3.10 eller nyere. Virker ikke kommandoen, prøver du python -m pip install esptool. Last ned .bin-filen (ikke .app-bin) og kjør:
esptool --port PORT erase-flash
esptool --port PORT --baud 460800 write-flash 0x1000 FIRMWARE.bin
FIRMWARE.bin er filen du lastet ned. PORT er for eksempel COM4 i Windows, /dev/ttyUSB0 i Linux og et navn som begynner med /dev/cu. på Mac. Adressen 0x1000 gjelder den klassiske ESP32. Nedlastingssiden viser den eldre skrivemåten esptool.py erase_flash, som nyere esptool godtar med en advarsel. Stopper flashingen halvveis, fjerner du --baud 460800. Svarer ikke kortet, holder du BOOT inne, trykker og slipper EN (reset) og slipper så BOOT.
Første test og main.py
I Shell skriver du kommandoer direkte til kortet. Det kalles REPL:
>>> print("Hei fra ESP32")
Hei fra ESP32
>>> import dht
>>> import ssd1306
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: no module named 'ssd1306'
import dht virker fordi DHT-driveren er bygget inn i ESP32-fastvaren, mens import ssd1306 gir ImportError til du installerer driveren i nivå 2. Feilmeldingen på siste linje er altså som forventet. Run current script (F5) kjører koden i editoren på kortet uten å lagre den der, og Stop (Ctrl+F2) stopper den. Skal programmet starte av seg selv, velger du File > Save as..., «MicroPython device» og filnavnet main.py: ved hver oppstart kjører MicroPython boot.py og så main.py.
Nivå 1: blink en ekstern LED
Produktsiden oppgir ikke om kortet har en LED du kan styre, så her bruker du en ekstern LED på GPIO 23.
Koble til
- Trekk ut USB-kabelen.
- Sett kortet over midtsporet slik at pinnerekken med 3V3, GND, D4, D21, D22 og D23 får minst ett ledig hull per pinne. Den andre rekken kan stå uten ledige hull.
- Sett LED-en et stykke unna kortet, i rader der ingen ESP32-pinner står: det lange beinet (anoden, +) i én rad og det korte (katoden, −) i neste. De fem hullene i hver rad i midtfeltet er koblet sammen.
- Sett motstanden fra raden med det lange beinet til en ledig rad.
- Koble D23 til den ledige enden av motstanden, og GND til raden med det korte beinet.
En rød LED har rundt 2,0 V spenningsfall ifølge LED-settets produktside. Med 220 Ω blir strømmen (3,3 V − 2,0 V) / 220 Ω ≈ 6 mA, med 1 kΩ rundt 1,3 mA og svakere lys. Begge verdiene ligger godt under 20 mA, som MicroPython oppgir som trygt maksimum ved pinnens standard drivstyrke. Er du usikker på verdien, bruk kalkulatoren for motstandens fargekode.
# main.py: blink en LED på GPIO 23
import time
from machine import Pin
led = Pin(23, Pin.OUT)
while True:
led.on()
time.sleep(0.5)
led.off()
time.sleep(0.5)
machineer modulen som styrer maskinvaren, ogPin(23, Pin.OUT)gjør GPIO 23 til en utgang.led.on()gir 3,3 V på pinnen, og strømmen går gjennom motstanden og LED-en til GND.led.off()gir 0 V.time.sleep(0.5)venter et halvt sekund, ogwhile True:gjentar alt sammen til du trykker Stop.
Prøv selv: dim LED-en med PWM
import time
from machine import Pin, PWM
led = PWM(Pin(23), freq=1000, duty_u16=0)
while True:
for duty in range(0, 65536, 1024):
led.duty_u16(duty)
time.sleep_ms(20)
PWM slår pinnen av og på 1000 ganger i sekundet, og duty_u16 fra 0 til 65535 bestemmer hvor stor del av tiden den er høy, altså hvor sterkt LED-en ser ut til å lyse.
Hvis LED-en ikke lyser
- Snu LED-en: det lange beinet skal mot motstanden.
- Sjekk at ledningen sitter i D23, og at alle delene står i riktig rad.
- Les feilmeldingen i Shell: en skrivefeil eller feil innrykk stopper programmet.
Nivå 2: DHT11-måling på OLED-skjerm via I2C
DHT11 sender temperatur og luftfuktighet på én datalinje. Produktsiden oppgir 0 til 50 °C med ±2 °C nøyaktighet og 20 til 90 % RH med ±5 % RH, og MicroPython gir hele tall. Skjermen bruker I2C, en buss med datalinjen SDA og klokkelinjen SCL.
Koble til DHT11
Ifølge Aosongs datablad er beina nummerert 1 til 4 fra venstre når gitteret vender mot deg og beina peker ned: 1 VDD, 2 DATA, 3 ikke i bruk, 4 GND.
- Trekk ut USB-kabelen og sett DHT11 i koblingsbrettet med hvert bein i sin rad.
- Kortet har bare én 3V3-pinne, så koble den til en ledig rad på koblingsbrettet, slik tegningen viser. DHT11, pull-up-motstanden og skjermen henter 3,3 V fra denne raden. Gjør det samme med GND hvis pinnen ikke har nok ledige hull.
- Koble bein 1 til 3V3-raden, bein 2 til D4 og bein 4 til GND. Bein 3 kobles ikke til.
- Sett motstanden på 4,7 kΩ mellom bein 2 og 3V3. Det er pull-up-motstanden Aosong anbefaler for kabler under 5 m. Ved 3,3 V skal ledningene være så korte som mulig.
Koble til OLED-skjermen
- Sett skjermen i koblingsbrettet med de fire pinnene i hver sin rad, og sett ledningene i hullene ved siden av pinnene.
- Koble VCC (eller VDD) til 3V3-raden fra DHT11-oppkoblingen og GND til GND.
- Koble SCL til D22 og SDA til D21.
Tegningen viser kortet snudd, med USB til venstre, så pinnene står i motsatt rekkefølge sammenlignet med de andre tegningene. Koble etter navnene som er trykt på skjermen, for rekkefølgen varierer: 0,96-tommersskjermen er merket GND, VCC, SCL, SDA, og skjermen i startsettet VDD, GND, SCK, SDA, der SCK er klokkelinjen. MicroPython kan bruke alle utgangspinner til I2C; 21 og 22 er standard i Espressifs Arduino-kjerne, så koblingen passer også til Arduino-eksempler.
ssd1306-driveren er skrevet for SSD1306-kontrolleren. Produktsiden for startsettet oppgir ikke hvilken kontroller 1,3-tommersskjermen har, så sjekk det før du regner med at koden virker uendret. For 0,96-tommersskjermen oppgir produktsiden SSD1306.Installer ssd1306-driveren
Driveren hører til micropython-lib, MicroPythons offisielle bibliotek, men er ikke bygget inn i ESP32-fastvaren. Det enkleste er å bruke Thonny: velg Tools > Manage packages..., søk etter ssd1306 og klikk Install. Thonny henter driveren fra micropython-lib og legger den på kortet. Vil du heller bruke terminalen, installerer du den med mpremote. Lukk Thonny først, for bare ett program kan bruke serieporten om gangen:
pip install mpremote
mpremote mip install ssd1306
Er kortet koblet til WiFi, som i nivå 3, kan du i stedet skrive import mip og mip.install("ssd1306") i REPL. Alle tre måtene legger driveren i mappen /lib på kortet.
Programmet
# main.py: DHT11 på OLED-skjerm
import time
import dht
import ssd1306
from machine import Pin, I2C
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
print("I2C-enheter:", i2c.scan()) # SSD1306: [60] = 0x3C
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
sensor = dht.DHT11(Pin(4))
time.sleep(1) # DHT11 trenger 1 s etter at strømmen kom
while True:
oled.fill(0)
oled.text("ESP32 + DHT11", 0, 0)
try:
sensor.measure()
oled.text("Temp: %d C" % sensor.temperature(), 0, 24)
oled.text("Fukt: %d %%" % sensor.humidity(), 0, 40)
except Exception as e:
print("DHT11-feil:", e)
oled.text("Sensorfeil", 0, 24)
oled.show()
time.sleep(3)
I2C(0, scl=Pin(22), sda=Pin(21))starter maskinvare-I2C nummer 0 på pinnene du koblet, med standardfrekvensen 400 kHz.i2c.scan()lister opp adressene som svarer. En SSD1306 bruker 0x3C eller 0x3D, altså 60 eller 61; merkingen 0x78 og 0x7A bak på 0,96-tommersskjermen er de samme adressene skrevet med 8 bit. Får du[61], legger du tiladdr=0x3DiSSD1306_I2C(...).- Alt tegnes først i minnet:
fill(0)tømmer bildet,text(tekst, x, y)skriver, ogshow()sender bildet til skjermen. Hvert tegn er 8 × 8 piksler, så det er plass til 16 tegn på 8 linjer. Skriften har bare ASCII-tegn, så æ, ø, å og ° vises ikke riktig. Derfor står det bare «C». sensor.measure()leser sensoren, ogtemperature()oghumidity()gir verdiene. Mislykkes lesingen, kaster driveren OSError eller «checksum error», ogtryogexceptfanger feilen, viser den og prøver igjen i stedet for å stoppe programmet.time.sleep(3): MicroPython-dokumentasjonen sier at DHT11 kan leses høyst én gang i sekundet, og Aosongs nyere datablad oppgir mer enn 2 sekunder mellom målinger. DHT11 sender resultatet fra forrige måling, så verdien på skjermen er alltid fra forrige runde, 3 sekunder gammel.
Prøv selv: potensiometer på ADC1
Koble ytterbeina på et potensiometer til 3V3 og GND og midtbeinet til D34. Legg de to første linjene før løkken. Legg den siste linjen og oled.text("%d mV" % millivolt, 0, 56) inne i løkken, før oled.show():
from machine import ADC
pot = ADC(Pin(34), atten=ADC.ATTN_11DB)
millivolt = pot.read_uv() // 1000
Med ADC.ATTN_11DB er målingen omtrent lineær fra 150 til 2450 mV ifølge MicroPython; over det blir den unøyaktig. read_uv() gir kalibrert spenning i mikrovolt.
Hvis det ikke virker
i2c.scan()gir[]: sjekk SDA til D21, SCL til D22 og strøm fra 3V3.- DHT11 gir OSError: sjekk pull-up-motstanden, bein 2 til D4 og at VDD og GND ikke er byttet.
- Skjermen blir funnet, men er svart: mangler
oled.show(), eller har skjermen en annen kontroller enn SSD1306?
Nivå 3: webserver som viser målingen og styrer LED-en
ESP32 kobler seg til WiFi som klient og lytter på port 80. I nettleseren ser du den siste målingen og to lenker: /on slår på LED-en og /off slår den av. ESP-WROOM-32 bruker bare 2,4 GHz. Koden bygger på MicroPythons offisielle eksempler for WiFi og HTTP-server.
Legg først nettnavn og passord i en egen fil, og lagre den på kortet som wifi_config.py. Da kan du dele main.py uten passordet.
# wifi_config.py: lagres på kortet, deles ikke
SSID = "navnet-på-nettet"
PASSWORD = "passordet"
# main.py: webserver med DHT11-måling og LED-bryter
import time
import socket
import network
import dht
from machine import Pin
import wifi_config
led = Pin(23, Pin.OUT, value=0)
led_on = False
sensor = dht.DHT11(Pin(4))
last_read = None
reading = ("ingen måling", "ingen måling")
PAGE = """<!DOCTYPE html>
<html><head><meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>ESP32</title></head><body>
<h1>ESP32 med MicroPython</h1>
<p>Temperatur: %s</p>
<p>Luftfuktighet: %s</p>
<p>LED: %s</p>
<p><a href="/on">Slå på</a> | <a href="/off">Slå av</a></p>
</body></html>
"""
def connect_wifi():
wlan = network.WLAN(network.WLAN.IF_STA)
wlan.active(True)
if not wlan.isconnected():
wlan.connect(wifi_config.SSID, wifi_config.PASSWORD)
for _ in range(20):
if wlan.isconnected():
break
time.sleep(1)
if not wlan.isconnected():
raise RuntimeError("Ingen WiFi, status %d" % wlan.status())
return wlan.ipconfig("addr4")[0]
def read_sensor():
global last_read, reading
now = time.ticks_ms()
if last_read is not None:
if time.ticks_diff(now, last_read) < 3000:
return reading
last_read = now
try:
sensor.measure()
reading = ("%d °C" % sensor.temperature(),
"%d %%" % sensor.humidity())
except Exception:
reading = ("ingen måling", "ingen måling")
return reading
ip = connect_wifi()
print("Åpne http://%s/ i nettleseren" % ip)
addr = socket.getaddrinfo("0.0.0.0", 80)[0][-1]
server = socket.socket()
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(addr)
server.listen(1)
while True:
client, remote = server.accept()
print("Besøk fra", remote)
client.settimeout(5)
try:
request = client.readline()
while True:
line = client.readline()
if not line or line == b"\r\n":
break
parts = request.split()
path = parts[1] if len(parts) > 1 else b"/"
if path == b"/on":
led.on()
led_on = True
elif path == b"/off":
led.off()
led_on = False
temp, hum = read_sensor()
state = "på" if led_on else "av"
client.write(b"HTTP/1.0 200 OK\r\n"
b"Content-Type: text/html; charset=utf-8\r\n"
b"\r\n")
client.write((PAGE % (temp, hum, state)).encode())
except OSError as e:
print("Forbindelsesfeil:", e)
finally:
client.close()
Slik virker koden
led_onhusker LED-ens tilstand, fordi MicroPython-dokumentasjonen sier at det er udefinert hvavalue()leser fra en utgang.WLAN(network.WLAN.IF_STA)er klientgrensesnittet.active(True)slår det på,connect()starter tilkoblingen, og løkken venter i opptil 20 sekunder påisconnected(), som gir True når kortet har fått IP-adresse.status()gir en kode som skiller blant annet feil passord fra et nett som ikke finnes, ogipconfig("addr4")[0]er IP-adressen.read_sensor()måler bare når det har gått minst 3 sekunder, ellers gir funksjonen den forrige verdien. Slik hindrer du at mange sidevisninger leser DHT11 for ofte. Fordi DHT11 sender resultatet fra forrige måling, viser siden verdien fra forrige gang noen åpnet den. Har siden ikke vært åpnet på lenge, laster du den på nytt etter minst 3 sekunder for å få en fersk verdi.ticks_diff()regner riktig også når millisekundtelleren begynner på null igjen.getaddrinfo("0.0.0.0", 80)ogbind()får serveren til å lytte på port 80 på alle grensesnitt.SO_REUSEADDRlar deg starte programmet på nytt uten å vente på at porten blir ledig.accept()venter på en nettleser og gir en egen socket for forbindelsen.settimeout(5)gjør at en klient som ikke sender noe, gir OSError etter 5 sekunder i stedet for å blokkere serveren.- Første
readline()er forespørselslinjen, for eksempelb"GET /on HTTP/1.1\r\n". Løkken leser resten av HTTP-hodet frem til den tomme linjen, som i det offisielle eksempelet. split()deler linjen ved mellomrom, og element 1 er stien. Den sammenlignes medb"/on"fordi data fra socketen er bytes. Ved andre stier, for eksempel/favicon.ico, sender serveren siden uten å endre LED-en.write()sender statuslinjen, hodet og siden..encode()gir UTF-8-bytes, ogcharset=utf-8forteller nettleseren hvordan «å» og «°» er kodet.finallylukker forbindelsen også etter en feil.
Test og feilsøking
Lagre begge filene på kortet, trykk EN og les adressen i Shell, for eksempel «Åpne http://192.168.1.50/ i nettleseren». Åpne den på en enhet på samme nett.
- Ingen WiFi: nettet må sende på 2,4 GHz, og navn og passord må være helt riktige. Status 202 betyr som regel feil passord og 201 at nettet ikke ble funnet. Status 1001 betyr at kortet fortsatt prøver, og det kan også skyldes feil passord.
- AttributeError på
IF_STAelleripconfig: fastvaren er for gammel for koden; installer den nyeste stabile versjonen. - Siden lastes ikke inn: sjekk at enheten ikke er på et gjestenett, og at adressen begynner med
http://.
Prøv selv: vis IP-adressen på skjermen fra nivå 2 med oled.text(ip, 0, 0), eller styr flere LED-er på trygge pinner som GPIO 18 og 19.
Nivå 3: dyp søvn for batteriprosjekter
En målestasjon på batteri bør ikke være våken hele tiden. Ifølge Espressifs datablad for ESP32-serien bruker brikken rundt 10 µA i dyp søvn med RTC-timer og RTC-minne, mot rundt 180 til 240 mA når WiFi sender.
# main.py: mål, skriv ut og sov (batteridrift)
import time
import machine
import dht
from machine import Pin
time.sleep(5) # tid til å trykke Stop i Thonny
if machine.reset_cause() == machine.DEEPSLEEP_RESET:
print("Våknet fra dyp søvn")
else:
print("Vanlig oppstart")
sensor = dht.DHT11(Pin(4))
try:
sensor.measure() # gir forrige måling
time.sleep(2.5)
sensor.measure() # gir ny måling
print("Temperatur:", sensor.temperature(), "°C")
print("Luftfuktighet:", sensor.humidity(), "%")
# Her kobler du til WiFi og sender målingen videre.
except Exception as e:
print("Måling feilet:", e)
machine.deepsleep(10 * 60 * 1000) # 10 minutter i millisekunder
time.sleep(5): et kort som nesten alltid sover, er vanskelig å nå fra Thonny. Pausen gir deg tid til å trykke Stop og dekker databladets krav om ett sekund etter at sensoren fikk strøm. Gjør den kortere når prosjektet er ferdig.reset_cause() == machine.DEEPSLEEP_RESETskiller oppvåkning fra vanlig oppstart. Et trykk på EN regnes som vanlig oppstart.- To kall til
measure()med 2,5 sekunders pause: ifølge Aosongs datablad sender DHT11 alltid resultatet fra forrige måling. Etter 10 minutters søvn er den første verdien 10 minutter gammel, så programmet leser to ganger med over 2 sekunders mellomrom og bruker den andre verdien. deepsleep(10 * 60 * 1000)sover i 600 000 ms, altså 10 minutter. Ved oppvåkning starter MicroPython forfra medboot.pyogmain.py, akkurat som etter en omstart: variablene er borte, og WiFi må kobles til på nytt.- Pinner som ikke er RTC-pinner, kobles fra i dyp søvn, så LED-en på GPIO 23 slokner. Utskriften fra
print()ser du bare når USB er tilkoblet; på batteri må målingen sendes eller lagres.
Tallet 10 µA gjelder selve brikken. Spenningsregulatoren, USB-seriell-brikken og strøm-LED-en på et utviklingskort kan trekke strøm også når ESP32 sover, så mål det faktiske forbruket med et multimeter før du regner på batteritid.
Får du ikke kontakt med kortet, trykker du EN og så Stop i Thonny mens pausen varer, og sletter programmet med import os og os.remove("main.py"). Hjelper ikke det, sletter du flashminnet med esptool erase-flash og installerer MicroPython på nytt.
Vanlige spørsmål
Hvorfor finner ikke Thonny ESP32-kortet?
Bruk en USB-kabel som overfører data, og prøv en annen port. Kortet i startsettet har en USB-seriell-brikke av typen CP2102 (synlig på produktbildet). Ifølge Espressif følger driveren vanligvis med operativsystemet; ellers finnes CP210x-driveren hos Silicon Labs. I Windows ser du porten i Enhetsbehandling, på Mac med ls /dev/cu.*.
Hva er forskjellen på MicroPython og vanlig Python?
MicroPython er en variant av Python laget for mikrokontrollere. Språket er det samme, men standardbiblioteket er mindre, og maskinvaren styres med moduler som machine og network. Pakker installeres med mip fra micropython-lib, ikke med pip fra PyPI.
Hvorfor feiler analog måling når WiFi er på?
ADC2 brukes også av WiFi, og MicroPython gir et unntak hvis du leser en ADC2-pinne mens WiFi er på. Bruk ADC1-pinnene 32 til 39 til analoge sensorer i WiFi-prosjekter.
Virker eksemplene på ESP32-S3 eller ESP32-C3?
Koden er stort sett den samme, men fastvarefilen, pinnenumrene og pinnene du bør unngå, er forskjellige. Last ned fastvare for akkurat din brikke på micropython.org og sjekk Espressifs GPIO-oversikt for varianten. Nedlastingssiden for hver variant oppgir også riktig flashadresse.
Neste steg
Hvilke plattformer som passer barn, skole og voksne, viser guiden om å lære programmering med elektronikk. Det grunnleggende om varianter, 3,3 V og feilsøking finner du i ESP32 for nybegynnere, og oversikten over programmering av ESP32 og M5Stack sammenligner MicroPython med UIFlow, Arduino og ESP-IDF. Du jobber på samme måte i Thonny i guiden om Raspberry Pi Pico og MicroPython, og Raspberry Pi Pico eller ESP32 hjelper deg med å velge. Flere kort finner du blant ESP32-kortene i butikken.
Kilder og videre lesing
Flashing er kontrollert mot MicroPythons nedlastingsside for ESP32 / WROOM og esptool-dokumentasjonen. Pin, PWM, ADC, I2C, WLAN, DHT og dyp søvn følger MicroPythons hurtigreferanse for ESP32, og mip følger dokumentasjonen for pakker. Pinnebegrensningene er hentet fra Espressifs GPIO-oversikt for ESP32. Webserveren bygger på MicroPythons eksempler Simple HTTP server og http_server.py.




