Micropython flashen op ESP32

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

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

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *