Mise en route de la carte ESP 8266 UNO

La carte

Il s'agit d'une carte au format de la carte Arduino UNO mais avec un coeur ESP 8266.

Infos techniques

  • Carte propulsée par un ESP8266EX à
  • Flash : 4MB

Brochage

Quelques différences avec la UNO "vraie" :

  • les broches GPIO sont en 3.3V (comme la nano) !
  • 1 seule voie analogique, A0
  • les broches A1 à A5 sont non-connectées mais i2C disponible sur D3/D4 ou en séparé sur D14/D15.
  • les broches D0 et D1 sont utilisés par la communication série USB comme sur une UNO et ne sont pas disponibles.

Le point important par contre : la dénomination des broches n'est pas celle de l'ESP 8266 et la correspondance est la suivante :

Attention, la correspondance peut varier selon le modèle de carte. A adapter à votre situation

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/esp8266/ La version générique fonctionne que la carte dispose ou non de SRAM externe.

On peut prendre à priori ici une version 2MB ou plus car on a 4MB à priori

La procédure est ici : https://docs.micropython.org/en/latest/esp8266/tutorial/intro.html#deploying-the-firmware

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 esp8266 --port /dev/ttyUSB0 erase_flash
  • on flashe micropython :
esptool.py --chip esp8266 --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 esp8266-20210418-v1.15.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

On se connecte avec Thonny. On dispose de la LED onboard sur la broche D13 (GP14) et on peut donc faire :

>>> from machine import Pin
>>> led=Pin(14, Pin.OUT)
>>> led.on()
>>> led.off()
>>> led.on()

Sur la broche D3 (GP16) on peut faire :

>>> ledR=Pin(16, Pin.OUT)
>>> ledR.off()
>>> ledR.on()
>>> ledR=Pin(03, Pin.OUT)
>>> ledR.on()

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=[3,1,16,5,4,14,12,13,00,02,15,13,12,14,4, 5] # correspondance ESP 8266 et UNO

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[13])
>>> led=Pin(D[13], 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=[3,1,16,5,4,14,12,13,00,02,15,13,12,14,4, 5] # correspondance ESP 8266 et UNO

Pour rendre les choses définitives, on pourra faire :

>>> f=open("pins.py","w")
>>> f.write("""# remap pin au format Arduino
D0, D1,D2,D3,D4,D5,D6,D7,D8,D9,D10,D11,D12,D13,D14,D15=[3,1,16,5,4,14,12,13,00,02,15,13,12,14,4, 5] # correspondance ESP 8266 et UNO
""")
163
>>> f.close
<bound_method>
>>> f.close()
>>> import pins
>>> dir()
['bdev', 'f', 'machine', '__name__', 'uos', 'c', 'w', 'gc', 'pins']
>>> from pins import *
>>> dir()
['D1', 'w', 'D0', 'D3', '__name__', 'D2', 'D5', 'D6', 'D10', 'D11', 'D12', 'D9', 'D8', 'D13', 'gc', 'f', 'pins', 'bdev', 'c', 'D14', 'D15', 'uos', 'D4', 'D7', 'machine']

Ou même faire cette déclaration dans le boot.py

>>> 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=[3,1,16,5,4,14,12,13,00,02,15,13,12,14,4, 5] # correspondance ESP 8266 et UNO""")
162
>>> f.close()

Débrancher/rebrancher la carte pour bonne prise en compte.

Liens utiles