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.

https://github.com/micropython/micropython/issues/6219

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 ?

Liens utiles