MicroPython con ESP8266 e ESP32: installazione del firmware e programmazione con strumenti di base – 1
MicroPython è un’implementazione popolare del linguaggio di programmazione Python progettato per essere eseguito su microcontrollori. È un ottimo modo per programmare microcontrollori utilizzando un linguaggio di alto livello facile da imparare e utilizzare. MicroPython può essere eseguito su molte piattaforme di microcontrollori, inclusi ESP8266 e ESP32.
Per iniziare con MicroPython su ESP8266 e ESP32, sarà necessario configurare l’ambiente di sviluppo. Ciò comporta l’installazione del firmware MicroPython sulla scheda e la configurazione di un ambiente di programmazione sul tuo computer.
Dettagli sull’ESP32
Mi piacciono questi dispositivi. Sono molto potenti e a basso costo, con un microcontrollore WIFI di valore effettivo.
Puoi trovarlo qui ESP32 Dev Kit v1 - TTGO T-Display 1.14 ESP32 - NodeMCU V3 V2 ESP8266 Lolin32 - NodeMCU ESP-32S - WeMos Lolin32 - WeMos Lolin32 mini - ESP32-CAM programmer - ESP32-CAM bundle - ESP32-WROOM-32 - ESP32-S
Specifiche
Ricorda che esistono molte varianti di questo dispositivo. Alcuni hanno una funzione killer specificata, quindi questa è una descrizione generica delle specifiche.
- Processori:
- CPU: processore Xtensa dual-core (o single-core) a 32 bit LX6, con frequenza di 160 o 240 MHz e capacità di esecuzione fino a 600 DMIPS
- Co-processore a bassissimo consumo energetico (ULP)
- Memoria: 520 KiB SRAM
- Connessione wireless:
- Wi-Fi: 802.11 b/g/n
- Bluetooth: v4.2 BR/EDR e BLE (condivide la radio con Wi-Fi)
- Interfacce periferiche:
- ADC SAR da 12 bit fino a 18 canali
- 2 × DAC a 8 bit
- 10 × sensori di tocco (GPIO con sensing capacitivo)
- 4 × SPI
- 2 × interfacce I²S
- 2 × interfacce I²C
- 3 × UART
- Controller host SD/SDIO/CE-ATA/MMC/eMMC
- Controller slave SDIO/SPI
- Interfaccia MAC Ethernet con DMA dedicato e supporto IEEE 1588 Precision Time Protocol
- CAN bus 2.0
- Telecomando infrarossi (TX/RX, fino a 8 canali)
- PWM per motori
- PWM per LED (fino a 16 canali)
- Sensore ad effetto Hall
- Preamplificatore analogico a bassissimo consumo energetico
- Sicurezza:
- Tutte le caratteristiche di sicurezza dello standard IEEE 802.11 supportate, inclusi WFA, WPA/WPA2 e WAPI
- Avvio sicuro
- Crittografia del flash
- OTP a 1024 bit, fino a 768 bit per i clienti
- Accelerazione hardware crittografica: AES, SHA-2, RSA, crittografia a curva ellittica (ECC), generatore di numeri casuali (RNG)
- Gestione dell’alimentazione:
- Regolatore di tensione a bassa caduta interno
- Dominio di alimentazione individuale per RTC
- Corrente di standby profondo di 5μA
- Sveglia da interruzione GPIO, timer, misurazioni ADC, interruzione del sensore di tocco capacitivo
Pinout
ESP32 DEV KIT v1
ESP32 DevKIT v4
ESP32 WeMos LOLIN32
Questo dispositivo è molto potente, e puoi vedere che ci sono pin di tocco capacitivi, più di una UART e diversi pin analogici.
How to
Dovrai scaricare i driver per il chip USB, probabilmente hai una versione di esp32 con cp2102, ma esiste una variante con chip ch340.
Dettagli sull’ESP8266
Questa scheda non raggiunge il minimo richiesto per far funzionare MicroPython al suo pieno potenziale, quindi utilizzala con cautela.
Puoi trovarlo qui WeMos D1 mini - NodeMCU V2 V2.1 V3 - esp01 - esp01 programmer
Specifiche
- Processore: core microprocessore L106 a 32 bit RISC basato su Tensilica Xtensa Diamond Standard 106Micro con frequenza di 80 MHz[5]
- Memoria:
- 32 KiB RAM di istruzioni
- 32 KiB RAM di cache di istruzioni
- 80 KiB RAM di dati utente
- 16 KiB RAM di dati di sistema ETS
- Flash QSPI esterna: supportato fino a 16 MiB (di solito incluso da 512 KiB a 4 MiB)
- Wi-Fi IEEE 802.11 b/g/n integrato
- Switch TR integrato, balun, LNA, amplificatore di potenza e rete di adattamento
- Autenticazione WEP o WPA/WPA2, o reti aperte
- 16 pin GPIO
- SPI
- I²C (implementazione software)
- Interfacce I²S con DMA (condivisione dei pin con GPIO)
- UART su pin dedicati, oltre a una UART solo di trasmissione, abilitabile su GPIO2
- ADC a 10 bit (ADC a approssimazioni successive)
Pinout
Wemos D1 mini
Immagine ad alta risoluzione del WeMos D1 mini
NodeMCU V2
Immagine ad alta risoluzione del NodeMCU v2.x
NodeMCU v2.1
Immagine ad alta risoluzione del NodeMCU v2.x
NodeMCU v3
Penso che la cosa interessante sia che ha più di una porta Hardware Serial, quindi puoi utilizzare Serial per la comunicazione con i dispositivi e Serial1 D4 (solo trasmissione) per il debug.
Driver
Puoi scaricare i driver per i chip USB qui, verifica la versione del tuo D1 mini e fai clic sui driver corrispondenti.
Ecco un elenco più completo di dispositivi.
- Arduino
- esp8285
- esp8266
- esp12 E
- esp07
- NodeMCU v2.x
- NodeMCU v3.x
- ESP-01
- ESP-01S
- ESP32
- ESP32c3
- ESP32 s2
- ESP32s3
- Arduino SAMD
- STM32
- Raspberry Pi
Hai bisogno di Python
Prima di tutto, devi installare Python e scaricarlo da qui.
E ricorda di aggiungerlo al PATH.
Installazione del firmware MicroPython sulla scheda:
Per installare MicroPython sulla tua scheda ESP8266 o ESP32, dovrai scaricare il firmware dal sito ufficiale di MicroPython. Il firmware è disponibile in forma binaria per una varietà di microcontrollori, inclusi ESP8266 e ESP32.
- Scarica il firmware
- Per scaricare il firmware per ESP8266, vai all’URL seguente:
- Per scaricare il firmware per ESP32, vai all’URL seguente:
- Installa lo strumento
esptool.py
, che è un’utilità da riga di comando che può essere utilizzata per caricare il firmware MicroPython sulla scheda. Lo strumento può essere installato utilizzando pip, un gestore di pacchetti Python.- Per gli utenti Windows:
- Apri Prompt dei comandi
- Installa pip eseguendo il seguente comando (probabilmente non è necessario questo passaggio):
python -m ensurepip
- Installa esptool.py eseguendo il seguente comando:
pip install esptool
- Per gli utenti Mac o Linux:
- Apri Terminale
- Installa pip eseguendo il seguente comando:
sudo easy_install pip
- Installa esptool.py eseguendo il seguente comando:
sudo pip install esptool
- Per gli utenti Windows:
C:\Users\renzo>pip install esptool
Defaulting to user installation because normal site-packages is not writeable
Collecting esptool
Downloading esptool-4.5.1.tar.gz (252 kB)
|████████████████████████████████| 252 kB 2.2 MB/s
Collecting bitstring>=3.1.6
Downloading bitstring-4.0.1-py3-none-any.whl (45 kB)
|████████████████████████████████| 45 kB 3.2 MB/s
Collecting cryptography>=2.1.4
Downloading cryptography-39.0.2-cp36-abi3-win_amd64.whl (2.5 MB)
|████████████████████████████████| 2.5 MB 2.2 MB/s
Collecting ecdsa>=0.16.0
Downloading ecdsa-0.18.0-py2.py3-none-any.whl (142 kB)
|████████████████████████████████| 142 kB 2.2 MB/s
Requirement already satisfied: pyserial>=3.0 in c:\users\renzo\appdata\roaming\python\python39\site-packages (from esptool) (3.0.1)
Collecting reedsolo<=1.6.0,>=1.5.3
Downloading reedsolo-1.6.0.tar.gz (278 kB)
|████████████████████████████████| 278 kB 2.2 MB/s
Collecting cffi>=1.12
Downloading cffi-1.15.1-cp39-cp39-win_amd64.whl (179 kB)
|████████████████████████████████| 179 kB 2.2 MB/s
Collecting pycparser
Downloading pycparser-2.21-py2.py3-none-any.whl (118 kB)
|████████████████████████████████| 118 kB 2.2 MB/s
Collecting six>=1.9.0
Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Using legacy 'setup.py install' for esptool, since package 'wheel' is not installed.
Using legacy 'setup.py install' for reedsolo, since package 'wheel' is not installed.
Installing collected packages: pycparser, six, cffi, reedsolo, ecdsa, cryptography, bitstring, esptool
Running setup.py install for reedsolo ... done
Running setup.py install for esptool ... done
Successfully installed bitstring-4.0.1 cffi-1.15.1 cryptography-39.0.2 ecdsa-0.18.0 esptool-4.5.1 pycparser-2.21 reedsolo-1.6.0 six-1.16.0
Se aggiungi la cartella Script alla variabile PATH, puoi chiamare direttamente esptool.py.
- Collega la scheda al computer tramite USB.
Per trovare la nuova porta seriale COM, vai al Gestione dispositivi dal menu di Windows e controlla quale porta è stata assegnata.
- Cerca nel menu di Windows “
Modifica le variabili d'ambiente di sistema
“; - Nella finestra fai clic su “
Variabili d'ambiente...
“. - Nelle variabili utente, seleziona “
Path
“ - E aggiungi la cartella Script.
- Cancella la memoria flash della scheda eseguendo il seguente comando:
Per ESP8266 ed ESP32:
esptool.py --port COM5 erase_flash
Se non hai esptool.py nel PATH, usa questo comando
python -m esptool --port COM5 erase_flash
Sostituisci COM5
con la porta seriale corretta della tua scheda.
D:\projects\micropython\testesp>python -m esptool --port COM5 erase_flash
esptool.py v4.5.1
Serial port COM5
Connecting....
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 50:02:91:74:fd:2f
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 8.6s
Hard resetting via RTS pin...
- Carica il firmware MicroPython sulla scheda eseguendo il seguente comando:
Per ESP8266:
esptool.py --port COM5 --baud 460800 write_flash --flash_size=detect 0 <firmware.bin>
o
python -m esptool --port COM5 --baud 460800 write_flash --flash_size=detect 0 <firmware.bin>
Per ESP32:
esptool.py --port COM5 --baud 460800 write_flash -z 0x1000 <firmware.bin>
o
python -m esptool --port COM5 --baud 460800 write_flash -z 0x1000 <firmware.bin>
Sostituisci COM5 con la porta seriale corretta della tua scheda e <firmware.bin> con il percorso del file del firmware di MicroPython che hai scaricato in precedenza.
D:\projects\micropython\testesp>python -m esptool --port COM5 --baud 460800 write_flash --flash_size=detect 0 esp8266-20220618-v1.19.1.bin
esptool.py v4.5.1
Serial port COM5
Connecting....
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 50:02:91:74:fd:2f
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Flash will be erased from 0x00000000 to 0x0009afff...
Flash params set to 0x0040
Compressed 634844 bytes to 419808...
Wrote 634844 bytes (419808 compressed) at 0x00000000 in 10.0 seconds (effective 509.5 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
- Una volta che il firmware è stato caricato sulla scheda, puoi connetterti alla scheda utilizzando un programma terminale seriale, come PuTTY (Windows) o screen (Mac/Linux). La velocità di trasmissione dovrebbe essere impostata su 115200.
Iniziare a programmare in una console interattiva (REPL)
Ora inizieremo a programmare immediatamente in Python. Per farlo, possiamo utilizzare un monitor seriale per connetterci alla console interattiva del dispositivo.
Utilizza un monitor seriale per visualizzare l’output del tuo codice MicroPython. Ci sono diverse opzioni di monitor seriale, tra cui:
screen
(macOS/Linux): Apri un terminale e esegui il seguente comando, sostituendo/dev/ttyUSB0
con la porta seriale corretta della tua scheda:
screen COM5 115200
- PuTTY (Windows): Scarica e installa PuTTY dal sito web ufficiale (https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html), quindi apri PuTTY e configurarlo per utilizzare la porta seriale e la velocità di trasmissione corrette (di solito 115200).
- CoolTerm (macOS/Windows): Scarica e installa CoolTerm dal sito web ufficiale, quindi apri CoolTerm e configurarlo per utilizzare la porta seriale e la velocità di trasmissione corrette (di solito 115200).
Scrivere ed eseguire codice Python con una sessione interattiva
Una volta installato MicroPython sulla tua scheda, puoi utilizzare la REPL (Read-Eval-Print Loop) per interagire con la scheda ed eseguire codice Python. La REPL è un modo semplice per inserire comandi Python e visualizzare il loro output in tempo reale. Puoi connetterti alla REPL della scheda utilizzando un programma terminale seriale, come PuTTY o screen, tramite una connessione USB.
Per accedere alla REPL su una scheda ESP8266 o ESP32, apri un programma terminale seriale e connettiti alla porta seriale della scheda con una velocità di trasmissione di 115200. Dovresti visualizzare un prompt come questo:
MicroPython v1.19.1 on 2022-06-18; ESP module with ESP8266
Type "help()" for more information.
>>>
Questo è il prompt Python, dove puoi inserire comandi Python. Ad esempio, puoi inserire il seguente comando per stampare “Ciao, mondo!” sulla console:
>>> print("Ciao da www.mischianti.org")
Dovresti visualizzare il seguente output:
Ciao da www.mischianti.org
Puoi anche scrivere il codice Python sul tuo computer e caricarlo sulla scheda utilizzando un tool come ampy o rshell. Questi strumenti ti consentono di trasferire file Python sulla scheda e eseguirli dal sistema di file della scheda stessa.
Interfacciamento con i dispositivi hardware della scheda:
MicroPython su ESP8266 e ESP32 offre accesso ai dispositivi hardware della scheda, come i pin GPIO, i bus SPI e I2C e gli ingressi analogici. Puoi utilizzare il codice Python per interagire con questi dispositivi e creare progetti che interagiscono con il mondo fisico.
Dovrai installare il pacchetto “machine
” con pip.
Probabilmente otterrai questo errore.
D:\projects\micropython\testesp>pip install machine
Defaulting to user installation because normal site-packages is not writeable
Collecting machine
Downloading machine-0.0.1-py2.py3-none-any.whl (4.2 kB)
Collecting pycrypto
Downloading pycrypto-2.6.1.tar.gz (446 kB)
|████████████████████████████████| 446 kB 2.2 MB/s
Using legacy 'setup.py install' for pycrypto, since package 'wheel' is not installed.
Installing collected packages: pycrypto, machine
Running setup.py install for pycrypto ... error
ERROR: Command errored out with exit status 1:
command: 'c:\program files\python39\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\renzo\\AppData\\Local\\Temp\\pip-install-svmkdo9_\\pycrypto_ee48e2c475ff47aaa23d619983f3b5e3\\setup.py'"'"'; __file__='"'"'C:\\Users\\renzo\\AppData\\Local\\Temp\\pip-install-svmkdo9_\\pycrypto_ee48e2c475ff47aaa23d619983f3b5e3\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\renzo\AppData\Local\Temp\pip-record-qctz6vm0\install-record.txt' --single-version-externally-managed --user --prefix= --compile --install-headers 'C:\Users\renzo\AppData\Roaming\Python\Python39\Include\pycrypto'
cwd: C:\Users\renzo\AppData\Local\Temp\pip-install-svmkdo9_\pycrypto_ee48e2c475ff47aaa23d619983f3b5e3\
Complete output (183 lines):
running install
running build
running build_py
creating build
creating build\lib.win-amd64-3.9
creating build\lib.win-amd64-3.9\Crypto
copying lib\Crypto\pct_warnings.py -> build\lib.win-amd64-3.9\Crypto
copying lib\Crypto\__init__.py -> build\lib.win-amd64-3.9\Crypto
creating build\lib.win-amd64-3.9\Crypto\Hash
copying lib\Crypto\Hash\hashalgo.py -> build\lib.win-amd64-3.9\Crypto\Hash
copying lib\Crypto\Hash\HMAC.py -> build\lib.win-amd64-3.9\Crypto\Hash
copying lib\Crypto\Hash\MD2.py -> build\lib.win-amd64-3.9\Crypto\Hash
copying lib\Crypto\Hash\MD4.py -> build\lib.win-amd64-3.9\Crypto\Hash
copying lib\Crypto\Hash\MD5.py -> build\lib.win-amd64-3.9\Crypto\Hash
copying lib\Crypto\Hash\RIPEMD.py -> build\lib.win-amd64-3.9\Crypto\Hash
copying lib\Crypto\Hash\SHA.py -> build\lib.win-amd64-3.9\Crypto\Hash
copying lib\Crypto\Hash\SHA224.py -> build\lib.win-amd64-3.9\Crypto\Hash
copying lib\Crypto\Hash\SHA256.py -> build\lib.win-amd64-3.9\Crypto\Hash
copying lib\Crypto\Hash\SHA384.py -> build\lib.win-amd64-3.9\Crypto\Hash
copying lib\Crypto\Hash\SHA512.py -> build\lib.win-amd64-3.9\Crypto\Hash
copying lib\Crypto\Hash\__init__.py -> build\lib.win-amd64-3.9\Crypto\Hash
creating build\lib.win-amd64-3.9\Crypto\Cipher
copying lib\Crypto\Cipher\AES.py -> build\lib.win-amd64-3.9\Crypto\Cipher
copying lib\Crypto\Cipher\ARC2.py -> build\lib.win-amd64-3.9\Crypto\Cipher
copying lib\Crypto\Cipher\ARC4.py -> build\lib.win-amd64-3.9\Crypto\Cipher
copying lib\Crypto\Cipher\blockalgo.py -> build\lib.win-amd64-3.9\Crypto\Cipher
copying lib\Crypto\Cipher\Blowfish.py -> build\lib.win-amd64-3.9\Crypto\Cipher
copying lib\Crypto\Cipher\CAST.py -> build\lib.win-amd64-3.9\Crypto\Cipher
copying lib\Crypto\Cipher\DES.py -> build\lib.win-amd64-3.9\Crypto\Cipher
copying lib\Crypto\Cipher\DES3.py -> build\lib.win-amd64-3.9\Crypto\Cipher
copying lib\Crypto\Cipher\PKCS1_OAEP.py -> build\lib.win-amd64-3.9\Crypto\Cipher
copying lib\Crypto\Cipher\PKCS1_v1_5.py -> build\lib.win-amd64-3.9\Crypto\Cipher
copying lib\Crypto\Cipher\XOR.py -> build\lib.win-amd64-3.9\Crypto\Cipher
copying lib\Crypto\Cipher\__init__.py -> build\lib.win-amd64-3.9\Crypto\Cipher
creating build\lib.win-amd64-3.9\Crypto\Util
copying lib\Crypto\Util\asn1.py -> build\lib.win-amd64-3.9\Crypto\Util
copying lib\Crypto\Util\Counter.py -> build\lib.win-amd64-3.9\Crypto\Util
copying lib\Crypto\Util\number.py -> build\lib.win-amd64-3.9\Crypto\Util
copying lib\Crypto\Util\py3compat.py -> build\lib.win-amd64-3.9\Crypto\Util
copying lib\Crypto\Util\randpool.py -> build\lib.win-amd64-3.9\Crypto\Util
copying lib\Crypto\Util\RFC1751.py -> build\lib.win-amd64-3.9\Crypto\Util
copying lib\Crypto\Util\winrandom.py -> build\lib.win-amd64-3.9\Crypto\Util
copying lib\Crypto\Util\_number_new.py -> build\lib.win-amd64-3.9\Crypto\Util
copying lib\Crypto\Util\__init__.py -> build\lib.win-amd64-3.9\Crypto\Util
creating build\lib.win-amd64-3.9\Crypto\Random
copying lib\Crypto\Random\random.py -> build\lib.win-amd64-3.9\Crypto\Random
copying lib\Crypto\Random\_UserFriendlyRNG.py -> build\lib.win-amd64-3.9\Crypto\Random
copying lib\Crypto\Random\__init__.py -> build\lib.win-amd64-3.9\Crypto\Random
creating build\lib.win-amd64-3.9\Crypto\Random\Fortuna
copying lib\Crypto\Random\Fortuna\FortunaAccumulator.py -> build\lib.win-amd64-3.9\Crypto\Random\Fortuna
copying lib\Crypto\Random\Fortuna\FortunaGenerator.py -> build\lib.win-amd64-3.9\Crypto\Random\Fortuna
copying lib\Crypto\Random\Fortuna\SHAd256.py -> build\lib.win-amd64-3.9\Crypto\Random\Fortuna
copying lib\Crypto\Random\Fortuna\__init__.py -> build\lib.win-amd64-3.9\Crypto\Random\Fortuna
creating build\lib.win-amd64-3.9\Crypto\Random\OSRNG
copying lib\Crypto\Random\OSRNG\fallback.py -> build\lib.win-amd64-3.9\Crypto\Random\OSRNG
copying lib\Crypto\Random\OSRNG\nt.py -> build\lib.win-amd64-3.9\Crypto\Random\OSRNG
copying lib\Crypto\Random\OSRNG\posix.py -> build\lib.win-amd64-3.9\Crypto\Random\OSRNG
copying lib\Crypto\Random\OSRNG\rng_base.py -> build\lib.win-amd64-3.9\Crypto\Random\OSRNG
copying lib\Crypto\Random\OSRNG\__init__.py -> build\lib.win-amd64-3.9\Crypto\Random\OSRNG
creating build\lib.win-amd64-3.9\Crypto\SelfTest
copying lib\Crypto\SelfTest\st_common.py -> build\lib.win-amd64-3.9\Crypto\SelfTest
copying lib\Crypto\SelfTest\__init__.py -> build\lib.win-amd64-3.9\Crypto\SelfTest
creating build\lib.win-amd64-3.9\Crypto\SelfTest\Cipher
copying lib\Crypto\SelfTest\Cipher\common.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Cipher
copying lib\Crypto\SelfTest\Cipher\test_AES.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Cipher
copying lib\Crypto\SelfTest\Cipher\test_ARC2.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Cipher
copying lib\Crypto\SelfTest\Cipher\test_ARC4.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Cipher
copying lib\Crypto\SelfTest\Cipher\test_Blowfish.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Cipher
copying lib\Crypto\SelfTest\Cipher\test_CAST.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Cipher
copying lib\Crypto\SelfTest\Cipher\test_DES.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Cipher
copying lib\Crypto\SelfTest\Cipher\test_DES3.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Cipher
copying lib\Crypto\SelfTest\Cipher\test_pkcs1_15.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Cipher
copying lib\Crypto\SelfTest\Cipher\test_pkcs1_oaep.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Cipher
copying lib\Crypto\SelfTest\Cipher\test_XOR.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Cipher
copying lib\Crypto\SelfTest\Cipher\__init__.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Cipher
creating build\lib.win-amd64-3.9\Crypto\SelfTest\Hash
copying lib\Crypto\SelfTest\Hash\common.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Hash
copying lib\Crypto\SelfTest\Hash\test_HMAC.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Hash
copying lib\Crypto\SelfTest\Hash\test_MD2.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Hash
copying lib\Crypto\SelfTest\Hash\test_MD4.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Hash
copying lib\Crypto\SelfTest\Hash\test_MD5.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Hash
copying lib\Crypto\SelfTest\Hash\test_RIPEMD.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Hash
copying lib\Crypto\SelfTest\Hash\test_SHA.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Hash
copying lib\Crypto\SelfTest\Hash\test_SHA224.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Hash
copying lib\Crypto\SelfTest\Hash\test_SHA256.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Hash
copying lib\Crypto\SelfTest\Hash\test_SHA384.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Hash
copying lib\Crypto\SelfTest\Hash\test_SHA512.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Hash
copying lib\Crypto\SelfTest\Hash\__init__.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Hash
creating build\lib.win-amd64-3.9\Crypto\SelfTest\Protocol
copying lib\Crypto\SelfTest\Protocol\test_AllOrNothing.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Protocol
copying lib\Crypto\SelfTest\Protocol\test_chaffing.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Protocol
copying lib\Crypto\SelfTest\Protocol\test_KDF.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Protocol
copying lib\Crypto\SelfTest\Protocol\test_rfc1751.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Protocol
copying lib\Crypto\SelfTest\Protocol\__init__.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Protocol
creating build\lib.win-amd64-3.9\Crypto\SelfTest\PublicKey
copying lib\Crypto\SelfTest\PublicKey\test_DSA.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\PublicKey
copying lib\Crypto\SelfTest\PublicKey\test_ElGamal.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\PublicKey
copying lib\Crypto\SelfTest\PublicKey\test_importKey.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\PublicKey
copying lib\Crypto\SelfTest\PublicKey\test_RSA.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\PublicKey
copying lib\Crypto\SelfTest\PublicKey\__init__.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\PublicKey
creating build\lib.win-amd64-3.9\Crypto\SelfTest\Random
copying lib\Crypto\SelfTest\Random\test_random.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Random
copying lib\Crypto\SelfTest\Random\test_rpoolcompat.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Random
copying lib\Crypto\SelfTest\Random\test__UserFriendlyRNG.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Random
copying lib\Crypto\SelfTest\Random\__init__.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Random
creating build\lib.win-amd64-3.9\Crypto\SelfTest\Random\Fortuna
copying lib\Crypto\SelfTest\Random\Fortuna\test_FortunaAccumulator.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Random\Fortuna
copying lib\Crypto\SelfTest\Random\Fortuna\test_FortunaGenerator.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Random\Fortuna
copying lib\Crypto\SelfTest\Random\Fortuna\test_SHAd256.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Random\Fortuna
copying lib\Crypto\SelfTest\Random\Fortuna\__init__.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Random\Fortuna
creating build\lib.win-amd64-3.9\Crypto\SelfTest\Random\OSRNG
copying lib\Crypto\SelfTest\Random\OSRNG\test_fallback.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Random\OSRNG
copying lib\Crypto\SelfTest\Random\OSRNG\test_generic.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Random\OSRNG
copying lib\Crypto\SelfTest\Random\OSRNG\test_nt.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Random\OSRNG
copying lib\Crypto\SelfTest\Random\OSRNG\test_posix.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Random\OSRNG
copying lib\Crypto\SelfTest\Random\OSRNG\test_winrandom.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Random\OSRNG
copying lib\Crypto\SelfTest\Random\OSRNG\__init__.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Random\OSRNG
creating build\lib.win-amd64-3.9\Crypto\SelfTest\Util
copying lib\Crypto\SelfTest\Util\test_asn1.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Util
copying lib\Crypto\SelfTest\Util\test_Counter.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Util
copying lib\Crypto\SelfTest\Util\test_number.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Util
copying lib\Crypto\SelfTest\Util\test_winrandom.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Util
copying lib\Crypto\SelfTest\Util\__init__.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Util
creating build\lib.win-amd64-3.9\Crypto\SelfTest\Signature
copying lib\Crypto\SelfTest\Signature\test_pkcs1_15.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Signature
copying lib\Crypto\SelfTest\Signature\test_pkcs1_pss.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Signature
copying lib\Crypto\SelfTest\Signature\__init__.py -> build\lib.win-amd64-3.9\Crypto\SelfTest\Signature
creating build\lib.win-amd64-3.9\Crypto\Protocol
copying lib\Crypto\Protocol\AllOrNothing.py -> build\lib.win-amd64-3.9\Crypto\Protocol
copying lib\Crypto\Protocol\Chaffing.py -> build\lib.win-amd64-3.9\Crypto\Protocol
copying lib\Crypto\Protocol\KDF.py -> build\lib.win-amd64-3.9\Crypto\Protocol
copying lib\Crypto\Protocol\__init__.py -> build\lib.win-amd64-3.9\Crypto\Protocol
creating build\lib.win-amd64-3.9\Crypto\PublicKey
copying lib\Crypto\PublicKey\DSA.py -> build\lib.win-amd64-3.9\Crypto\PublicKey
copying lib\Crypto\PublicKey\ElGamal.py -> build\lib.win-amd64-3.9\Crypto\PublicKey
copying lib\Crypto\PublicKey\pubkey.py -> build\lib.win-amd64-3.9\Crypto\PublicKey
copying lib\Crypto\PublicKey\RSA.py -> build\lib.win-amd64-3.9\Crypto\PublicKey
copying lib\Crypto\PublicKey\_DSA.py -> build\lib.win-amd64-3.9\Crypto\PublicKey
copying lib\Crypto\PublicKey\_RSA.py -> build\lib.win-amd64-3.9\Crypto\PublicKey
copying lib\Crypto\PublicKey\_slowmath.py -> build\lib.win-amd64-3.9\Crypto\PublicKey
copying lib\Crypto\PublicKey\__init__.py -> build\lib.win-amd64-3.9\Crypto\PublicKey
creating build\lib.win-amd64-3.9\Crypto\Signature
copying lib\Crypto\Signature\PKCS1_PSS.py -> build\lib.win-amd64-3.9\Crypto\Signature
copying lib\Crypto\Signature\PKCS1_v1_5.py -> build\lib.win-amd64-3.9\Crypto\Signature
copying lib\Crypto\Signature\__init__.py -> build\lib.win-amd64-3.9\Crypto\Signature
Skipping optional fixer: buffer
Skipping optional fixer: idioms
Skipping optional fixer: set_literal
Skipping optional fixer: ws_comma
running build_ext
warning: GMP or MPIR library not found; Not building Crypto.PublicKey._fastmath.
building 'Crypto.Random.OSRNG.winrandom' extension
creating build\temp.win-amd64-3.9
creating build\temp.win-amd64-3.9\Release
creating build\temp.win-amd64-3.9\Release\src
C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.16.27023\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -Isrc/ -Isrc/inc-msvc/ -Ic:\program files\python39\include -Ic:\program files\python39\include -IC:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.16.27023\include -IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\shared -IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\um -IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\winrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\cppwinrt /Tcsrc/winrand.c /Fobuild\temp.win-amd64-3.9\Release\src/winrand.obj
winrand.c
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\inttypes.h(27): error C2061: errore di sintassi: identificatore 'intmax_t'
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\inttypes.h(28): error C2061: errore di sintassi: identificatore 'rem'
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\inttypes.h(28): error C2059: errore di sintassi: ';'
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\inttypes.h(29): error C2059: errore di sintassi: '}'
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\inttypes.h(31): error C2061: errore di sintassi: identificatore 'imaxdiv_t'
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\inttypes.h(31): error C2059: errore di sintassi: ';'
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\inttypes.h(41): error C2143: errore di sintassi: '{' mancante prima di '__cdecl'
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\inttypes.h(42): error C2146: errore di sintassi: ')' mancante prima dell'identificatore '_Number'
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\inttypes.h(42): error C2061: errore di sintassi: identificatore '_Number'
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\inttypes.h(42): error C2059: errore di sintassi: ';'
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\inttypes.h(43): error C2059: errore di sintassi: ')'
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\inttypes.h(46): error C2143: errore di sintassi: '{' mancante prima di '__cdecl'
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\inttypes.h(47): error C2146: errore di sintassi: ')' mancante prima dell'identificatore '_Numerator'
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\inttypes.h(47): error C2061: errore di sintassi: identificatore '_Numerator'
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\inttypes.h(47): error C2059: errore di sintassi: ';'
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\inttypes.h(47): error C2059: errore di sintassi: ','
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\inttypes.h(49): error C2059: errore di sintassi: ')'
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\inttypes.h(51): error C2143: errore di sintassi: '{' mancante prima di '__cdecl'
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\inttypes.h(57): error C2143: errore di sintassi: '{' mancante prima di '__cdecl'
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\inttypes.h(64): error C2143: errore di sintassi: '{' mancante prima di '__cdecl'
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\inttypes.h(70): error C2143: errore di sintassi: '{' mancante prima di '__cdecl'
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\inttypes.h(77): error C2143: errore di sintassi: '{' mancante prima di '__cdecl'
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\inttypes.h(83): error C2143: errore di sintassi: '{' mancante prima di '__cdecl'
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\inttypes.h(90): error C2143: errore di sintassi: '{' mancante prima di '__cdecl'
C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt\inttypes.h(96): error C2143: errore di sintassi: '{' mancante prima di '__cdecl'
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\VC\\Tools\\MSVC\\14.16.27023\\bin\\HostX86\\x64\\cl.exe' failed with exit code 2
----------------------------------------
ERROR: Command errored out with exit status 1: 'c:\program files\python39\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\renzo\\AppData\\Local\\Temp\\pip-install-svmkdo9_\\pycrypto_ee48e2c475ff47aaa23d619983f3b5e3\\setup.py'"'"'; __file__='"'"'C:\\Users\\renzo\\AppData\\Local\\Temp\\pip-install-svmkdo9_\\pycrypto_ee48e2c475ff47aaa23d619983f3b5e3\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\renzo\AppData\Local\Temp\pip-record-qctz6vm0\install-record.txt' --single-version-externally-managed --user --prefix= --compile --install-headers 'C:\Users\renzo\AppData\Roaming\Python\Python39\Include\pycrypto' Check the logs for full command output.
Dal registro, puoi ottenere il percorso di Microsoft Visual Studio BuildTools e quindi eseguire questi comandi:
cd "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build"
vcvarsall.bat x86_amd64
cd %VCINSTALLDIR%
for /R %f in (*stdint.h) do set CL=-FI"%f"
pip install machine
D:\projects\micropython\testesp>cd "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build"
D:\projects\micropython\testesp>c:
C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build>vcvarsall.bat x86_amd64
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.0
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x86_x64'
C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build>cd %VCINSTALLDIR%
C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC>for /R %f in (*stdint.h) do set CL=-FI"%f"
C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC>set CL=-FI"C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.16.27023\include\stdint.h"
C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC>pip install pycrypto
Defaulting to user installation because normal site-packages is not writeable
Collecting pycrypto
Using cached pycrypto-2.6.1.tar.gz (446 kB)
Using legacy 'setup.py install' for pycrypto, since package 'wheel' is not installed.
Installing collected packages: pycrypto
Running setup.py install for pycrypto ... done
Successfully installed pycrypto-2.6.1
C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC>pip install machine
Defaulting to user installation because normal site-packages is not writeable
Collecting machine
Using cached machine-0.0.1-py2.py3-none-any.whl (4.2 kB)
Requirement already satisfied: pycrypto in c:\users\renzo\appdata\roaming\python\python39\site-packages (from machine) (2.6.1)
Installing collected packages: machine
WARNING: The script sample.exe is installed in 'C:\Users\renzo\AppData\Roaming\Python\Python39\Scripts' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed machine-0.0.1
Controllare un LED
Per controllare un LED collegato al pin 2 su una scheda ESP8266 (è il LED incorporato per WeMos D1 mini), puoi inserire i seguenti comandi:
import machine
pin = machine.Pin(2, machine.Pin.OUT)
pin.on()
pin.off()
La prima riga importa il modulo machine
, che contiene classi e funzioni per interagire con l’hardware della scheda ESP8266 o ESP32.
La seconda riga crea un nuovo oggetto Pin
, che rappresenta un pin GPIO sulla scheda. In questo caso, l’oggetto Pin
viene creato con il numero di pin 2
e la modalità machine.Pin.OUT
, che imposta il pin come output. L’oggetto Pin
viene assegnato alla variabile pin
.
Questo accende l’output dell’oggetto pin
, causando la corrispondente uscita del pin fisico sulla scheda di generare una tensione alta.
Questo spegne l’output dell’oggetto pin
, causando la corrispondente uscita del pin fisico sulla scheda di generare una tensione bassa.
Scrivere uno sketch blink-led
Ecco uno sketch completo di MicroPython, un semplice programma che fa lampeggiare un LED incorporato.
Prendi il tuo editor preferito, crea un file main.py
e aggiungi queste righe.
import machine
import time
pin = machine.Pin(2, machine.Pin.OUT)
while True:
pin.value(0)
time.sleep(0.5)
pin.value(1)
time.sleep(0.5)
Naturalmente, puoi anche testarlo in una sessione in tempo reale.
Caricare il codice e visualizzare l’output utilizzando un monitor seriale
Carica il codice MicroPython sulla tua scheda ESP8266 o ESP32 utilizzando lo strumento da riga di comando adafruit-ampy
e visualizza l’output utilizzando un monitor seriale:
- Collega la tua scheda ESP8266 o ESP32 al computer tramite USB.
- Installa il pacchetto
adafruit-ampy
utilizzando pip, che è un gestore di pacchetti per Python. Puoi installare questo pacchetto aprendo un prompt dei comandi (Windows) o un terminale (macOS/Linux) e eseguendo il seguente comando:
pip install adafruit-ampy
D:\projects\micropython\testesp>pip install adafruit-ampy
Defaulting to user installation because normal site-packages is not writeable
Collecting adafruit-ampy
Downloading adafruit_ampy-1.1.0-py2.py3-none-any.whl (16 kB)
Collecting click
Using cached click-8.1.3-py3-none-any.whl (96 kB)
Requirement already satisfied: pyserial in c:\users\renzo\appdata\roaming\python\python39\site-packages (from adafruit-ampy) (3.0.1)
Collecting python-dotenv
Downloading python_dotenv-1.0.0-py3-none-any.whl (19 kB)
Collecting colorama
Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)
Installing collected packages: python-dotenv, colorama, click, adafruit-ampy
WARNING: The script dotenv.exe is installed in 'C:\Users\renzo\AppData\Roaming\Python\Python39\Scripts' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
WARNING: The script ampy.exe is installed in 'C:\Users\renzo\AppData\Roaming\Python\Python39\Scripts' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed adafruit-ampy-1.1.0 click-8.1.3 colorama-0.4.6 python-dotenv-1.0.0
- Potresti vedere un avviso durante il processo di installazione
WARNING: The script ampy.exe is installed in 'C:\Users\renzo\AppData\Roaming\Python\Python39\Scripts'.
Quindi stiamo per aggiungere anche il percorso della cartella Script alla variabile di ambiente PATH.
- Cerca nel menu di Windows “
Modifica le variabili d'ambiente del sistema
“; - Nel pannello fai clic su “
Variabili d'ambiente...
“. - Nelle variabili utente, seleziona “
Path
“ - E aggiungi la cartella Script.
- Scrivi il tuo codice MicroPython in un file sul tuo computer.
- Utilizza lo strumento da riga di comando
ampy
per caricare il file sulla scheda. Ad esempio, se il tuo codice MicroPython è in un file chiamatomain.py
e la tua scheda è collegata alla porta serialeCOM5
, puoi eseguire il seguente comando:
ampy --port COM5 put main.py
Nota: Sostituisci COM5 con la porta seriale corretta della tua scheda e main.py
con il nome del tuo file di codice MicroPython.
- Una volta che il monitor seriale è impostato, resetta la scheda premendo il pulsante di reset o scollegando e ricollegando il cavo USB. La scheda avvierà automaticamente l’esecuzione del codice che hai caricato e dovresti vedere l’output del tuo codice MicroPython nel monitor seriale.
Grazie
Padroneggiare la programmazione dell’esp8266 con MicroPython
- MicroPython con esp8266 ed esp32: installazione del firmware e utilizzo di strumenti standard
- MicroPython con esp8266 ed esp32: installazione del firmware e utilizzo dell’IDE Thonny
- MicroPython con esp8266 ed esp32: installazione del firmware e utilizzo dell’IDE PyCharm
Padroneggiare la programmazione dell’esp32 con MicroPython
- MicroPython con esp8266 ed esp32: installazione del firmware e utilizzo di strumenti standard
- MicroPython con esp8266 ed esp32: installazione del firmware e utilizzo dell’IDE Thonny
- MicroPython con esp8266 ed esp32: installazione del firmware e utilizzo dell’IDE PyCharm