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.