MicroPython sur l'ESP8266-EVB (Evaluation Board) d'Olimex

Ce mercredi, je me suis mis en tête de Flasher ma carte ESP8266-EVB d'Olimex en MicroPython. Il s'agit d'un carte ESP8266 abordable équipée d'un relais, un bouton, un ESP8266-DEV (un ESP8266 avec 2Mio de Flash) et d'un port UEXT très intéressant mais nous y reviendrons plus tard.
ESP8266-EVB d'Olimex
Matériel nécessaire
Nous allons utiliser une machine Linux (Linux Mint) pour Flasher l'ESP8266. Mais vous pouvez réaliser cela à partir d'un simple Raspberry-Pi.

Il nous faudra:
câble Console 3.3V
Logiciels nécessaires
Nous aurons besoin de différents éléments logiciels (dont ESPTool).
Si vous manquez d'informations, vous pouvez consulter notre tutoriel Flasher MicroPython sur ESP8266 (sur le wiki de MCHobby).

Installer ESPTool
Nous aurons besoin de l'outil ESPtool pour flasher notre ESP8266, celui-ci s'installe avec l'outil PIP (Python Install Package) disponible sur les distributions Linux.

sudo pip install esptool

Il s'agit d'un utilitaire Python 2.7 mais également compatible Python 3, il devrait donc être possible de l'installer avec l'utilitaire pip3.

Firmware MicroPython
Il est également nécessaire de télécharger le dernier firmware MicroPython pour ESP8266 disponible sur http://micropython.org/download/#esp8266
Firmware MicroPython - disponible sur MicroPython.org

A l'heure de l'écriture de ces lignes, la dernière version disponible (et flashée) est la 1.9.4 (avec Async.io).
Nous allons donc télécharger le fichier esp8266-20180511-v1.9.4.bin, nom à remplacé par la version du jour.

cd ~
wget http://micropython.org/resources/firmware/esp8266-20180511-v1.9.4.bin 

Activer le Mode Flash sur la carte
Pour effacer la mémoire Flash et pour téléverser le Firmware MicroPython. il est nécessaire d'activer l'ESP8266 en Mode Flash.
Sur un ESP8266 Olimex il faut maintenir le bouton GPIO 0 enfoncé avant de mettre la carte sous tension puis relâcher le bouton GPIO 0. Voila, la carte est en mode Flash.
ESP8266-EVB (Evaluation Board)
Brancher sur l'Ordinateur
Nous allons commencer par brancher le câble console USB sur le port série de l'ESP8266. Ce port est disponible sur le connecteur UEXT de la carte ESP8266-EVB.
Connecter le convertisseur USB-vers-Série sur le port UEXT
Connecter le convertisseur USB-vers-Série sur
le port UEXT de ESP8266-EVB (Evaluation Board)
Branchez ensuite la fiche USB sur votre Ordinateur / Machine Linux / Raspberry-Pi. Sur une machine Linux, vous pouvez saisir dmesg pour identifier le périphérique correspondant.
~ $ dmesg
..
[314212.993727] usb 2-2: Product: USB-Serial Controller
[314212.993731] usb 2-2: Manufacturer: Prolific Technology Inc.
[314213.370802] usbcore: registered new interface driver usbserial
[314213.370812] usbcore: registered new interface driver usbserial_generic
[314213.370819] usbserial: USB Serial support registered for generic
[314213.374407] usbcore: registered new interface driver pl2303
[314213.374417] usbserial: USB Serial support registered for pl2303
[314213.374430] pl2303 2-2:1.0: pl2303 converter detected
[314213.374956] usb 2-2: pl2303 converter now attached to ttyUSB0

Messages qui indique que le périphérique série est attaché sur /dev/ttyUSB0 .

Effacer la Flash
La première opération nécessaire est l'effacement de la mémoire FLASH de l'ESP8266 à l'aide de l'utilitaire ESPTool.

Placez la carte en mode Flash comme indiqué ci-avant.
Ensuite, saisissez la commande suivante:

esptool.py --port /dev/ttyUSB0 erase_flash

ce qui produit le contenu suivant indiquant que l'opération s'est bien déroulée.
$ esptool.py --port /dev/ttyUSB0 erase_flash
esptool.py v2.0.1
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 2.5s
Hard resetting...

Après l'opération de Flash, il est important de réinitialiser la plateforme. Comme il n'y a pas de bouton RESET, il faut alors faire un cycle d'alimentation pour arriver au même résultat. Débranchez l'alimentation puis rebranchez là, voila, la carte est réinitialisée.

Flasher le FirmWare MicroPython
Cette seconde opération permet de flasher le Firmware MicroPython sur l'ESP8266, toujours avec l'aide de l'utilitaire ESPTool.

Placez la carte en mode Flash comme indiqué ci-avant.
Ensuite, saisissez la commande suivante:
cd ~
esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash --flash_size=detect -fm dio 0 esp8266-20180511-v1.9.4.bin

Ce qui produit le résultat suivant indiquant que le FirmWare est bien flashé:
$ esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash --flash_size=detect -fm dio 0 esp8266-20180511-v1.9.4.bin
esptool.py v2.0.1
Connecting........_____....._____....._____..
Detecting chip type... ESP8266
Chip is ESP8266
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 2MB
Flash params set to 0x0230
Compressed 604872 bytes to 394893...
Wrote 604872 bytes (394893 compressed) at 0x00000000 in 35.3 seconds (effective 137.1 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting...

Après l'opération de Flash, il est important de réinitialiser la plateforme. Il faut alors faire un cycle d'alimentation pour réinitialiser la plateforme.

Connexion à l'ESP8266 via le port série
Maintenant que le FirmWare MicroPython est actif sur la carte, une ligne de commande MicroPyhton dite REPL est disponible sur le port série.

Le plus simple est d'utiliser la commande screen .

screen /dev/ttyUSB0 115200

Lorsque vous avez terminé d'utiliser screen, il est possible de le quitter (sur la plupart des versions) en utilisant la combinaison de touches Ctrl a puis k puis y (pour oui) -OU- presser Ctrl a puis taper :quit et presser le retour clavier.

Une fois connecté sur le REPL série essayez de presser le retour clavier (pour confirmer une première commande "vide") et vous devriez voir l'invite REPL >>> .

Vous pouvez saisir la fonction help() puis presser le retour clavier, cela affiche un message d'aide sur la plupart des cartes MicroPython.

Si vous n'arrivez pas a obtenir l'invite REPL >>> alors vous pouvez essayez de saisir la combinaison de touche Ctrl c plusieurs fois (cela interrompt le script/programme en cours d'exécution sur la carte).

Voila, c'est tout en ce qui concerne la connexion REPL, vous êtes maintenant prêt à écrire vos premières lignes de code MicroPython!

RShell, l'utilitaire avancé
Screen permet uniquement d'utiliser l'invite de commande.

Il existe également l'utilitaire RSHELL agissant comme un interpréteur de commande permettant de transférer et manipuler des fichiers via le port série de l'ESP8266.

Les sessions REPL sont également possible depuis l'utilitaire RShell. RShell réclame un peu d'investissement mais je vous assure que c'est un temps utilement investit.

Voyez notre tutoriel RShell (en Français) sur le Wiki de MCHobby. 

Attention, il faut absolument réduire la taille du buffer d'échange à 128 octets car nous avons constaté que le buffer par défaut écrase et corrompt le système de fichier.
rshell --port /dev/ttyUSB0 --baud 115200 --buffer-size 128 --editor nano
Interagir avec l'ESP8266-EVB
Comme indiqué sur le graphique ci-dessous, le relais est sur le GPIO 5 et le bouton sur le GPIO 0.

Voici le contenu de la sessions REPL permettant de changer l'état du relais
Module relais de la carte ESP8266-EVB

>>> from machine import Pin
>>> relay = Pin(5, Pin.OUT)
>>> relay.value( 1 ) # Relais activé
>>> relay.value( 0 ) # Relais inactif
>>> relay.value( 1 ) # Relais activé
>>> relay.value( 0 ) # Relais inactif
>>> relay.value( 1 ) # Relais activé
>>> relay.value( 0 ) # Relais inactif

La lecture de l'entrée bouton se fait sur le GPIO 0.
Entrée bouton de la carte ESP8266-EVB
En pressant le bouton, l'entrée GPIO 0 est placée à la masse. Cela implique donc qu'il faut activer la résistance pull-up interne sur le GPIO 0.
Par conséquent:
  • Switch OUVERT : GPIO 0 = HIGH (3.3v)
  • Switch FERME : GPIO 0 = LOW (0v)
Le script suivant lit le GPIO 0 à interval régulier et affiche le résultat dans la session REPL.
>>> from machine import Pin
>>> from time import sleep_ms
>>> btn = Pin( 0, Pin.IN, pull=Pin.PULL_UP )
>>> while True:
>>>     print( '--' if btn.value()==1 else 'PRESSE' )
>>>     sleep_ms( 300 )
Ce qui produit les résultats suivants dans la session REPL:
--
PRESSE
PRESSE
PRESSE
--
--
--
--
--
PRESSE
--
--
PRESSE
--
--
--
--

Ca roule, c'est absolument génial! Il ne reste plus qu'à l'intégrer dans votre prochain projet.

Le connecteur UEXT
Nous allons aussi nous pencher sur le connecteur UEXT. Celui-ci nous intéresse plus particulièrement parce qu'il transporte le bus I2C.
Connecteur UEXT et correspondance avec GPIO de l'ESP8266

UEXT est une interface standardisé qui permet de brancher facilement des senseurs et cartes d'extensions. Nous aurons l'occasion d'y revenir prochainement dans d'autres articles mais pour l'instant nous inspecter ce connecteur. 

En savoir plus sur MicroPython
MC Hobby produit de nombreux tutoriels sur MicroPython, tutoriels couvrant plusieurs plateformes microcontrôleurs.
Venez découvrir les autres tutoriels MicroPython disponible sur notre Wiki.

Où acheter

Aucun commentaire