Last Updated on 17 januari 2023 by Syds
In deze tutorial flashen we MicroPython op een ESP32 WROOM 4Mb Devkit v1 microcontroller.
Benodigdheden:
- ESP32
- USB-kabel
Up-and-running
- python (https://www.python.org/)
- esptool (installeer eventueel met pip install esptool)
- putty (https://www.putty.org/)
Stap 1. Download en installeer CP2102 USB to UART Bridge Controller drivers
Nadat ik de ESP32 aangesloten heb op een USB poort van m’n laptop werd er niet automatisch een COM-poort toegekend. Oorzaak is het ontbreken van de benodigde drivers. Zie onderstaande melding in Apparaatbeheer
De CP2102 drivers zijn te downloaden op de website van Sylabs: https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers. Nadat je de drivers gedownload hebt unzip je de bestanden, onthoudt waar je de bestanden geunzipped hebt. In mijn geval de map C:\Users\spost\Downloads\CP210x_Universal_Windows_Driver. Klik vervolgens met de rechtermuisknop in Apparaatbeheer op de “CP2102 USB to UART Bridge Controller” en kies voor “Stuurprogramma bijwerken”
Kies vervolgens voor “Op mijn computer naar stuurprogramma’s zoeken”
Vul de mapnaam in waar je de zip file met CP2102 driver hebt geunzipped en klik op “Volgende”
Het stuurprogramma van de CP2012 USB to UART Bridge wordt installeert, en de ESP32 wordt aan een COM-poort verbonden. In mijn geval COM4. Klik op “Sluiten”
Stap 2. Download laatste versie van Micropython
Je hebt de firmware voor een esp32 chip nodig, deze vindt je hier: https://micropython.org/download/esp32/
Kies de meest recente versie van de firmware (niet de OTA compatible versie !), in mijn geval was dat versie v1.18 (2022-01-17).bin. Download de esp32-20220117-v1.18.bin file.
Stap 3. Erase het flash geheugen van je ESP32
Start een cmd prompt en voer het volgende commando uit:
esptool --chip esp32 --port <com port> erase_flash
Vervang <com port> door de com-poort waar je je ESP32 op aangesloten hebt. Weet je niet op welke com-poort je de ESP32 hebt aangesloten, kijk dan ingeval van Windows in Apparaatbeheer -> Poorten (COM & LPT) en zoek naar “Silicon Labs CP210x USB to UART Bridge”. Hierachter staat de com-poort, in mijn geval COM4. In geval van Linux kun je het commando dmesg uitvoeren om te achterhalen op welke tty-device je ESP32 is aangesloten. Dit geeft de volgende output:
C:\Users\spost\python> esptool --chip esp32 --port COM4 erase_flash esptool.py v3.2 Serial port COM4 Connecting.... Chip is ESP32-D0WDQ6 (revision 1) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None Crystal is 40MHz MAC: 78:21:84:7d:bd:9c Uploading stub... Running stub... Stub running... Erasing flash (this may take a while)... Chip erase completed successfully in 13.6s Hard resetting via RTS pin...
Het flash geheugen is nu gewist.
Stap 4. Firmware flashen naar ESP32
Zoek de in stap 2. gedownloade firmware file op, waarschijnlijk onder Downloads. In mijn geval bevindt de file zich in de map C:\Users\spost\Downloads. Ga naar die directory met het volgende commando:
cd C:\Users\spost\Downloads
Voer hier het volgende commando uit om de MicroPython firmware naar je ESP32 te flashen
esptool --chip esp32 --port <com port> --baud 460800 write_flash -z 0x1000 <firmware.bin>
Vervang <com port> door de COM-poort waar je je ESP32 op het aangesloten, en verander <firmware.bin> in de naam van de file die je in stap 1 hebt gedownload. Het commando geeft de volgende output:
C:\Users\spost\Downloads> esptool --chip esp32 --port COM4 --baud 460800 write_flash -z 0x1000 esp32-20220117-v1.18.bin esptool.py v3.2 Serial port COM4 Connecting.... Chip is ESP32-D0WDQ6 (revision 1) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None Crystal is 40MHz MAC: 78:21:84:7d:bd:9c Uploading stub... Running stub... Stub running... Changing baud rate to 460800 Changed. Configuring flash size... Flash will be erased from 0x00001000 to 0x0017cfff... Compressed 1555136 bytes to 1022998... Wrote 1555136 bytes (1022998 compressed) at 0x00001000 in 24.3 seconds (effective 512.7 kbit/s)... Hash of data verified. Leaving... Hard resetting via RTS pin...
Je ESP32 is nu geflashed met de laatste versie van MicroPython. We gaan nu een klein testje uitvoeren.
Stap 5. Hello world ! test
Open Putty en maak een seriële verbinding met de ESP32
De REPL van Micropython verschijnt. Typ hierin het commando
print("Hello world!")
MicroPython is alive !
Stap 6. WiFi verbinding maken
De ESP32 toont zichzelf op het WiFi netwerk als een access point. Maak met je telefoon of laptop verbinding met de accesspoint met de naam “MicroPython-xxxxxx”, in mijn geval “MicroPython-9a0865”. Het wachtwoord is “micropythoN”. Vervolgens kun je in je browser het ip-address “192.168.4.1” openen. Bij mij werkte die methode echter niet, op twee verschillende Wemossen uitgeprobeerd en zowel op een mobiele telefoon als laptop uitgeprobeerd. Daarom via de REPL prompt het device op het WiFi netwerk aangesloten. Voer achtereenvolgens de volgende commando’s uit.
>>> import network >>> wlan = network.WLAN(network.STA_IF) >>> wlan.active(True) True >>> wlan.connect("<SSID van he 2.4Ghz WiFi netwerk>","<WiFi wachtwoord>") >>> wlan.ifconfig() ('192.168.2.136', '255.255.255.0', '192.168.2.254', '192.168.2.29') >>>
Vervang <SSID van he 2.4Ghz WiFi netwerk> en <WiFi wachtwoord> door het SSID en wachtwoord van jou 2.4Ghz WiFi-netwerk. Op de laatste regel vindt je het IP-address van je ESP32 terug, in mij geval 192.168.2.136.
Stap 7. Extra modules installeren
Eigen of publieke micropython modules kun je installeren met het commando upip. Om bijvoorbeeld de module “micropython-time”, wat een equivalent is voor de python module “time”, te installeren voer je achtereenvolgende volgende commando’s uit
>>> import upip >>> upip.install("micropython-time") Installing to: /lib/ Warning: micropython.org SSL certificate is not validated Installing micropython-time 0.5 from https://micropython.org/pi/time/time-0.5.tar.gz Installing micropython-ffilib 0.1.3 from https://micropython.org/pi/ffilib/ffilib-0.1.3.tar.gz >>> import time >>>
Stap 8. MicroPython files laden en uitvoeren
Natuurlijk wil je je eigen gemaakte MicroPython code, of code die je ergens op bijv. github hebt gevonden, runnen op je ESP32. Er zijn tools ontwikkeld die je daarbij helpen. Een daarvan is ampy, deze gebruik ik in deze tutorial. Installeer ampy als volgt. Open een CMD prompt op je laptop, en voer het volgende commando uit:
C:\Users\spost\python>pip install adafruit-ampy Collecting adafruit-ampy Downloading adafruit_ampy-1.1.0-py2.py3-none-any.whl (16 kB) Requirement already satisfied: pyserial in c:\users\spost\appdata\local\programs\python\python310\lib\site-packages (from adafruit-ampy) (3.5) Collecting click Downloading click-8.0.4-py3-none-any.whl (97 kB) ---------------------------------------- 97.5/97.5 KB ? eta 0:00:00 Collecting python-dotenv Downloading python_dotenv-0.19.2-py2.py3-none-any.whl (17 kB) Collecting colorama Downloading colorama-0.4.4-py2.py3-none-any.whl (16 kB) Installing collected packages: python-dotenv, colorama, click, adafruit-ampy Successfully installed adafruit-ampy-1.1.0 click-8.0.4 colorama-0.4.4 python-dotenv-0.19.2
Voordat we een micropython file kunnen uploaden, dienen we voor de zekerheid eerst nog even de debugmode op de ESP32 uit te zetten, die doe je binnen de REPL-interface met de volgende commando’s
>>> import esp >>> esp.osdebug(None)
Je bent nu klaar om je eerste micropython programma te uploaden naar je ESP32, terug naar de CMD prompt voer je het volgende commando uit
ampy --port <COM port> put <Micropython file.py>
Vervang <COM-port> door de COM-poort waarop je ESP32 is aangesloten, en vervang <Micropython file.py> door de bestandsnaam van je Micropython source code. In mijn geval COM3 respectievelijk “robovac.py” uit de directory C:\Users\spost\python>. Zorg er wel voor dat je je PUTTY sessie hebt beëindigt, anders blokkeert deze je COM-poort.
C:\Users\spost\python>ampy --port COM4 put robovac.py C:\Users\spost\python>
Open opnieuw PUTTY en maak een seriële verbinding met je ESP32. Als je onderstaande commando’s uitvoert in de RPEL interface zie je dat je MicroPython source file is toevoegd aan de lijst met bestanden.
>>> import os >>> os.listdir() ['boot.py', 'robovac.py', 'lib'] >>>
Je voert nu de MicroPython code uit met het commando import, dus:
>>> import robovac
Om de code bij het opstarten van de ESP32 uit te laten voeren dien je je MicroPython source code bestandsnaam te veranderen in “main.py”, en deze up te loaden met ampy. Bijvoorbeeld nadat je de filenaam op je laptop of linux systeem hebt aangepast.
ampy --port COM4 rm robovac.py ampy --port COM4 put main.py