Mise en route de la carte ESP 32 UNO D1 32
La carte
Il s'agit d'une carte à base d'ESP 32 au format Arduino UNO et qui reproduit l'ensemble de ce que l'on trouve sur la carte Arduino UNO en terme de brochage (à la différence d'une carte ESP 8266 qui n'a pas toutes les broches analogique notamment, etc. )
Cette carte permet de faire tourner Micropython et permet donc de s'initier à Micropython tout en bénéficiant du format familier d'une carte Arduino ! Et sans besoin de shield complémentaire, on dispose du wifi en natif !! Une très bonne option pour passer à MicroPython !
Tous les shields Arduino ne seront pas forcément utilisables avec cette carte qui a des GPIO en 3.3V : pour les broches en sortie, pas de problème, mais pour les broches en entrée et les mesures analogiques, le 5V est interdit ! Aucun problème par contre (une nouvelle fois) avec les modules "prêts à câbler". Soyez vigilants donc et ne connectez pas un shield Arduino les "yeux fermés" sur cette carte !
Infos techniques
- Carte propulsée par un ESP32 à 240Mhz
- RAM : 512 Ko
- Flash : 4MB à priori
- 18 GPIO 3.3V sur bornier dont 12 broches analogiques (!) en 12 bits - 3.3V ATTENTION : avec Micropython, on accède en natif que à A3-A5 soit 4 broches analogiques
- jusqu'à 16 PWM
- I2C sur bornier SDA (GP21) / SCL (GP22)
- SPI
Note
L'ESP 32 disposent de 2 modules ESP 32, ADC1 et ADC2. Si le wifi est utilisé, alors ADC2 n'est pas utilisable. C'est pourquoi Micropython n'implémente pas ADC2. On a donc seulement 4 broches analogiques. Si on a besoin de plus, il est facile d'ajouter un multiplexeur analogique ou bien un module analogique i2C. La limitation est la même en C / Arduino car liée à l'ESP 32 lui-même.
Et par rapport à une carte Arduino UNO, on a en plus :
- GPIO pour capteur sensitif
- un port UART sur GPIO (en plus de Tx/Rx sur D0/D1 utilisé par la communication USB)
- quelques GPIO supplémentaires disponibles sur connecteur à souder sur la carte
- Wifi
- Bluetooth
Brochage
Alim :
- 6-12V sur Vin
- 5V : 5V In/out
- 3.3V
A la différence d'un ESP 32 classique, ici on dispose d'entrée de jeu d'un régulateur sur la carte permettant une alimentation externe par du 6-12V ou bien par USB, exactement comme une carte Arduino UNO.
Drivers CH3040
Les cartes ESP 32 vont utiliser pour communiquer un driver CH340 qui va fournir un port série au format ttyUSB0
sur Gnu/Linux.
Ces drivers sont directement présents sous Gnu/Linux. Mais doivent à priori être installés sous WIndows et Os X.
Flasher MicroPython
Pour cela on utilise un outil dédié écrit en python, esptool.py
et qui s'installe logiquement avec l'installateur python pip
:
sudo apt-get install python3-pip
sudo pip3 install esptool
Télécharger la version adaptée de MicroPython : https://micropython.org/download/esp32/ La version générique fonctionne que la carte dispose ou non de SRAM externe.
Ensuite, on peut flasher facilement le firmware micropython
dans l'ESP 32. Ouvrir un terminal dans le répertoire où se trouve le binaire puis successivement :
- on efface la mémoire flash de la carte :
esptool.py --chip esp32 --port /dev/ttyUSB0 erase_flash
- on flashe micropython :
esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 460800 write_flash -z 0x1000 esp32-20210416-unstable-v1.14-170-ga9bbf7083.bin
Une fois fait, on peut tester que tout est OK en se connectant avec un terminal série sur /dev/ttyUSB0
Avec Thonny par exemple, aller dans Tools > Options > Interpreter > sélectionner la bonne carte
Test de micropython
>>> import machine
>>> machine.freq()
160000000 # 160 Mhz
Sur la broche D2 (GP26) on peut faire (connecter une LED) :
>>> from machine import Pin
>>> ledR=Pin(26, Pin.OUT)
>>> ledR.on()
>>> ledR.off()
Evidemment, ce qui est le plus intéressant et pratique, c'est de pouvoir garder la numérotation des broches conforme à celle d'une carte Arduino, et pour cela, il suffit de faire :
D=[-1,-1,26,25,17,16,27,14,12,13,5,23,19,18,2, 4, 35, 34,36,39] # correspondance ESP 32 et UNO
A=[12,10,7,8,0,3,19,18,17,16,15,14] # broches analogiques
Attention, la correspondance peut varier selon le modèle de carte. A adapter à votre situation
On peut dès lors faire :
>>> from machine import Pin
>>> led=Pin(D[2], Pin.OUT)
>>> led.on()
>>> led.off()
Une autre possibilité est de faire :
D0, D1,D2,D3,D4,D5,D6,D7,D8,D9,D10,D11,D12,D13,D14,D15, D16, D17,D18,D19=[-1,-1,26,25,17,16,27,14,12,13,5,23,19,18,2, 4, 35, 34,36,39] # correspondance ESP 32 et UNO
A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11=[12,10,7,8,0,3,19,18,17,16,15,14] # broches analogiques
Du coup, on pourra faire :
>>> from machine import Pin
>>> led=Pin(D2, Pin.OUT)
>>> led.on()
>>> led.off()
Pour rendre les choses définitives, on mettre cette déclaration dans le boot.py (fichier exécuté automatiquement au lancement) :
>>> f=open("boot.py","a")
>>> f.write("""# remap pin au format Arduino
D0, D1,D2,D3,D4,D5,D6,D7,D8,D9,D10,D11,D12,D13,D14,D15, D16, D17,D18,D19=[-1,-1,26,25,17,16,27,14,12,13,5,23,19,18,2, 4, 35, 34,36,39] # correspondance ESP 32 et UNO
A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11=[12,10,7,8,0,3,19,18,17,16,15,14] # broches analogiques
""")
162
>>> f.close()
Débrancher/rebrancher la carte pour bonne prise en compte.
A présent, on doit pouvoir directement pouvoir faire :
>>> from machine import Pin
>>> led=Pin(D2, Pin.OUT)
>>> led.on()
>>> led.off()
Où acheter ?
- On la trouvera ici notamment (commande Europe, livraison France pour ~2€) : https://www.otronic.nl/a-60659537/esp32/wemos-d1-r32-esp32-4mb-development-board-wifi-bluetooth-dual-core-arduino-uno-r3-formaat/
Liens utiles
- https://www.otronic.nl/a-60659537/esp32/wemos-d1-r32-esp32-4mb-development-board-wifi-bluetooth-dual-core-arduino-uno-r3-formaat/
- https://www.instructables.com/The-Greatest-Arduino-UNO-in-the-World/
- https://www.cnx-software.com/2017/09/04/espduino-32-wemos-d1-r32-esp32-boards-support-some-arduino-uno-shields/