Scratch 3 et ESP8266
Présentation
La carte Node MCU embarque un module Wi-Fi de type ESP8266. C’est un circuit intégrant un microcontrôleur et une interface Wi-Fi développés par le fabricant chinois Espressif.
1. Module ESP8266
Le module est protégé par un capot de blindage. Ici le modèle est un ESP-12E, une version récente qui intègre un cœur ESP8266, mais dispose de 4 Mo de mémoire flash. Il est doté de 22 pattes, soudées sur la carte NodeMCU. Son antenne Wi-Fi est la piste de circuit imprimé en "zigzag" sur la droite de l’image.
2. Carte NodeMCU
La carte NodeMCU est une carte de développement qui embarque le circuit ESP-12E. Elle est munie d’une prise micro USB (à gauche de l’image) qui sert à l’alimentation et à la communication entre la carte et l’extérieur, dans ce cas elle dialoguera avec Scratch 3. La prise USB est reliée au port série de l’ESP-12E via un convertisseur série<=>USB, le circuit intégré situé au-dessus du marquage LOLIn.
Les entrées/sorties sont situées de chaque côté de la carte et identifiées par une sérigraphie. Deux boutons-poussoirs situés de chaque côté de la prise micro USB permettent le reset de la carte (RST) et sa reprogrammation (FLASH).
3. Le matériel...
Installer MicroPython sur l’ESP8266
1. Connecter la carte NodeMCU
Démarrez le Raspberry Pi. Lorsque le bureau de Raspberry Pi OS est apparu, connectez la carte NodeMCU avec un câble microUSB<=>USB sur une des prises USB du Raspberry Pi.
Ouvrez une fenêtre de terminal, tapez la commande :
dmesg
Vous devriez obtenir un affichage de ce genre :
[1186.418569] usb 1-1.1: ch341-uart converter now attached to ttyUSB0
Cette ligne indique que la carte NodeMCU a bien été détectée et que le pilote CH431 de son convertisseur Série<=>USB est connecté à ttyUSB0. Notez ce port de connexion qui va servir par la suite pour converser avec la carte NodeMCU.
2. Télécharger le firmware
Pour utiliser la carte NodeMCU avec Scratch 3, le firmware (logiciel constructeur) d’origine de la carte doit être remplacé par MicroPython, qui est une version réduite de Python 3, optimisée pour fonctionner sur les microcontrôleurs.
Ouvrez la page http://micropython.org/download#esp8266 sur le navigateur du Raspberry Pi. Faites défiler la page jusqu’à trouver la rubrique Espressif ESP-based boards. Cliquez sur l’image de l’ESP8266 (Generic ESP8266 module).
Vous arrivez sur la page Firmware for Generic ESP8266 module (micrologiciels pour module générique ESP8266).
Sélectionnez la dernière version, notée latest. Au moment de la rédaction de ces lignes, la version la plus récente est nommée.
esp8266-20191220-v1.12.bin (elf, map) (latest)
Le fichier de 600 Ko environ est rapidement téléchargé et enregistré dans le répertoire Downloads.
3. Installer le firmware
L’installation du firmware sur la carte NodeMCU...
Configurer le Wi-Fi de l’ESP8266
1. Modes de fonctionnement
Par défaut lors de l’installation, l’ESP8266 est configuré en point d’accès. Les périphériques (PC, tablette, smartphone…) peuvent se connecter directement sur lui. Dans certaines installations, il est préférable de passer par une Box Internet ou un routeur.
Il est possible de voir quels sont les modes Wi-Fi activés dans l’émulateur de terminal série CuteCom :
>>> import network
>>> sta_if=network.WLAN(network.STA_IF)
>>> ap_if=network.WLAN(network.AP_IF)
>>> sta_if.active()
False
>>> ap_if.active()
True
Le mode AP_IF est bien actif, mais pas le mode STA_IF (client).
Il est également possible de connaître la configuration de l’interface Wi-Fi AP :
>>> ap_if.ifconfig()
('192.168.4.1', '255.255.255.0', '192.168.4.1', '208.67.222.222')
La commande ap_if.ifconfig() retourne dans l’ordre l’adresse IP, le masque de sous-réseau, la passerelle et le DNS.
a. Point d’accès (AP = Access Point)
Lorsqu’il est configuré en point d’accès (AP), l’ESP8266 est directement accessible. Il suffit de se connecter à l’AP pour pouvoir communiquer avec la carte NodeMCU. L’adresse IP par défaut...
Installer ampy sur le Raspberry Pi
Pour communiquer avec Scratch, il est nécessaire d’installer ampy (Adafruit MicroPython Tool) sur le Raspberry Pi. C’est un utilitaire développé par Adafruit pour les cartes MicroPython.
Ampy est un outil simple, en ligne de commande, permettant d’envoyer des scripts Python depuis le Raspberry Pi vers la carte NodeMCU pour qu’ils soient exécutés.
Sur le bureau de Raspberry Pi OS, ouvrez une fenêtre de terminal et tapez la commande suivante :
sudo pip3 install adafruit-ampy
Installer les programmes MicroPython
Pour que MicroPython fonctionne, il a besoin de deux scripts :
-
main.py : un serveur TCP sur l’ESP8266 pour assurer la communication avec le Raspberry Pi ;
-
esp_8266_min.py : les fonctions utilisées par main.py.
Ces fichiers se trouvent sur la page https://github.com/MrYsLab/s3-extend
Ouvrez la page https://github.com/MrYsLab/s3-extend dans un navigateur web sur le Raspberry Pi.
Cliquez sur le bouton vert Clone or Download pour télécharger l’archive s3-extend-master.zip.
L’archive est téléchargée et enregistrée dans le dossier Downloads.
Ouvrez le dossier Downloads dans le gestionnaire de fichiers et dézippez l’archive s3-extend-master.zip (clic droit => Extraire ici).
Un dossier s3-extend-master est créé, il contient les fichiers à transférer sur la carte NodeMCU.
Ouvrez une fenêtre de terminal et déplacez-vous dans le sous-dossier esp_8266_micropython du dossier s3-extend-master.
cd Downloads/s3-extend-master/esp_8266_micropython/
On peut maintenant transférer les fichiers main.py et esp_8266_min.py sur la carte NodeMCU.
Dans la fenêtre de terminal, tapez les deux commandes suivantes :
ampy --port /dev/ttyUSB0 put main.py
ampy --port /dev/ttyUSB0 put esp_8266_min.py
Cette commande transfère les deux programmes MicroPython vers...
Synthèse
Le synoptique ci-dessus résume toutes les opérations qui viennent d’être faites sur le Raspberry Pi et la carte NodeMCU. Cette mise en place minutieuse est nécessaire pour que tous les maillons de la chaîne puissent communiquer. Le test systématique de chacune des installations, si elle ne garantit pas un fonctionnement assuré à 100 %, permet d’aborder plus sereinement l’utilisation de cet ensemble.
La communication entre le Raspberry Pi et la carte NodeMCU se fait via le Wi-Fi. Ceci implique que le Raspberry soit relié à la box, soit par un câble Ethernet, soit en Wi-Fi. Par contre, il n’y a plus de liaison physique à partir de ce moment entre la carte ESP8266 et le Raspberry Pi. La carte NodeMCU peut très bien être alimentée sur une alimentation normale, sans passer par une prise USB du Raspberry Pi. Elle peut donc être placée à distance du Raspberry Pi.
Démarrer la carte ESP8266 NodeMCU
Il existe différents modèles de carte NodeMCU. La carte utilisée ici ne possède pas de LED embarquée reliée à D0 (GPIO16). Si votre carte n’en possède pas, reliez l’anode d’une LED à la broche D0 au travers d’une résistance de 220 Ω. La cathode ira à la masse comme ci-dessous.
À la mise sous tension de la carte NodeMCU, cette LED doit clignoter plusieurs fois rapidement. Ceci indique que le programme main.py a bien démarré et que la carte est prête à recevoir des scripts depuis Scratch 3. Lorsque le Raspberry Pi se connecte sur la carte, la LED connectée en D0 reste allumée en permanence.
La broche D0 (GPIO16) n’est pas accessible avec les blocs de Scratch 3. Ce montage est uniquement destiné à confirmer le bon fonctionnement de main.py.
Comme vu précédemment, la carte va mettre un certain temps à se configurer, se connecter à la box et recevoir une adresse IP. Il convient d’être patient et de ne pas démarrer l’envoi de scripts Scratch 3 immédiatement après le démarrage.
Utiliser la carte ESP8266 NodeMCU avec Scratch 3
1. Démarrer le serveur OneGPIO pour l’ESP8266
Comme pour l’Arduino, il faut démarrer le serveur s3-extend qui va se charger de la communication avec la carte NodeMCU. Démarrez le programme serveur OneGPIO en ouvrant une fenêtre de terminal et en saisissant la commande pour lancer le serveur approprié. Ici ce sera le serveur pour la carte ESP8266.
Liste des serveurs disponibles :
-
s3a - pour l’Arduino
-
s3c - pour l’Adafruit Circuit Playground Express
-
s3e - pour l’ESP8266
-
s3p - pour la carte Picoboard
-
s3r - pour le Raspberry Pi
Ouvrez une fenêtre de terminal et saisissez la commande :
s3e
La fenêtre de terminal affiche le démarrage du serveur, puis après quelques secondes, indique que la passerelle vers l’ESP8266 a démarré.
Le serveur fonctionnera tant que vous ne l’arrêterez pas avec un [Ctrl] C. Laissez cette fenêtre ouverte pour que le serveur puisse communiquer avec la carte NodeMCU.
Ne fermez pas la fenêtre en cliquant sur la croix dans le coin en haut à droite. Ceci arrêterait le serveur de façon brutale et pourrait compromettre son prochain démarrage.
Si le programme s3e s’interrompt pour une raison ou pour une autre, le prompt pi@raspberrypi :~$ s’affiche dans la fenêtre du terminal et Scratch 3 informe l’utilisateur de la perte de connexion avec l’ESP8266 :
Il faut alors sauvegarder le programme en cours si nécessaire, fermer Scratch 3 puis relancer le serveur s3e et enfin rouvrir Scratch 3.
Si vous connectez plusieurs cartes d’extension au Raspberry Pi, il faudra ouvrir une fenêtre de terminal par carte et lancer le serveur d’extension correspondant à chaque carte dans des fenêtres séparées.
2. Démarrer Scratch...
Exemple de programme
1. Faire clignoter une LED
a. Schéma de branchement
Comme vu précédemment pour l’Arduino, le premier programme consiste à faire clignoter une LED. Cette action simple permet de vérifier toute la chaîne et de s’assurer que l’utilisateur est capable de piloter de bout en bout le dispositif (connexions, logiciel, programme…).
Connectez une LED comme sur le schéma ci-dessus. La sortie utilisée est la broche D5 de la carte NodeMCU. Une résistance de 220 Ω limite le courant dans la LED rouge. La cathode de la LED rejoint la broche de masse GND.
b. Programme clignotement de LED
Dans l’espace des scripts de Scratch 3, saisissez le programme ci-dessous. Le programme est téléchargeable sous le nom ESP_LED_blink.sb3.
Le script est démarré en cliquant sur le drapeau vert. Il commence obligatoirement par le bloc Adresse IP qui informe Scratch 3 de l’adresse de l’ESP8266.
Ensuite, dans une boucle infinie, la sortie GPIO14 est mise à 1 (LED allumée) pendant 0,1 seconde, puis à 0 pendant 0,5 seconde.
La sortie GPIO14 correspond à la broche D5 de la carte NodeMCU.
Le script est arrêté en cliquant sur le panneau stop rouge.
quand drapeau vert est cliqué
Adresse IP de l'ESP-8266 // indique l'adresse de l'ESP au script.
répéter indéfiniment...
Les autres programmes
Tous les blocs de l’ESP8266 sont identiques à ceux de la carte Arduino, à l’exception de la lecture analogique qui n’existe qu’en un exemplaire sur l’ESP8266.
Les programmes et les connexions sont donc identiques à ceux de l’Arduino. Il suffira d’adapter les programmes du chapitre Scratch 3 et Arduino - Exemples de programmes en changeant les numéros des broches sur lesquelles les composants seront connectés.
Il y a un impératif à respecter, c’est que le premier bloc exécuté doit fournir l’adresse IP de la carte ESP8266.
À cette seule condition, le script en Scratch 3 pourra communiquer en Wi-Fi avec la carte NodeMCU/ESP8266 et échanger avec elle les informations nécessaires au bon fonctionnement de l’ensemble.
Conclusion
Avec la gestion d’une carte à base d’ESP8266 par Wi-Fi s’ouvre la possibilité de gérer une carte déportée, éventuellement montée sur un mobile, à partir d’un script Scratch 3 s’exécutant sur un Raspberry Pi.
L’utilisation de blocs standards facilite l’acquisition de connaissances et la mise en œuvre de ce type de carte à microcontrôleur.