La période d’enfermement (ils appellent ça le con, finement) est propice à l’expérimentation. C’est le moment de sortir du tiroir tous ces trucs que vous avez rangés en disant que « ça servira bien un jour ». J’appelle ça le CPTS (ça peut toujours servir). Je vous propose d’installer MicroPython sur une ESP-12E ESP2866 pour voir un peu comment ça se passe.
Je vous avais proposé d’utiliser l’ESP2866 avec l’IDE Arduino sur le Raspberry Pi il y a quelque temps… Cette fois, toujours sur le Raspberry Pi, on va utiliser l’ESP8266 pour faire du MicroPython.
Au sommaire :
- 1 Installer MicroPython sur un ESP8266 avec le Raspberry Pi
- 2 Sources
Matériel utilisé
- Raspberry Pi 4
- ESP8266 – NodeMCU LoLin v3
- Version la plus récente de Raspbian Stretch, mise à jour, avec Python 3 activé par défaut.
- Adaptateur USB => Série pour utiliser Rx et Tx de l’ESP8266
- Câble USB => microUSB pour utiliser une connexion via USB-Série
Installer MicroPython sur un ESP8266 avec le Raspberry Pi
Vous connaissez sans doute Python, l’un des langages les plus répandus et les plus étudiés actuellement. MicroPython est un portage (une implémentation) du langage de programmation libre du langage Python,sous licence MIT, vers le monde des microcontrôleurs.
Avec MicroPython, les compétences acquises dans le développement en Python (sur PC Windows, Linux ou sur Raspberry Pi), sont directement utilisables sur quantité de cartes microcontrôleur.
L’ESP8266 en fait partie et il existe une version de MicroPython adaptée à cet environnement. Je vous propose de la découvrir.
Récupérer le firmware MicroPython pour ESP8266
Il faut télécharger le firmware micro python disponible sur la page de téléchargement http://micropython.org/download#esp8266
La version dépendra de la date à laquelle vous ferez la manip. Dans mon cas la version la plus récente (latest) disponible était la esp8266-20191220-v1.12.bin (elf, map) (latest). Cliquez dessus, le fichier de 600Ko environ sera téléchargé et enregistré dans le dossier Downloads.
Pour accéder à l’ESP8266, on va aussi installer un outil appelé esptool. C’est un utilitaire basé sur Python, open source, indépendant de la plate-forme, créé pour communiquer avec le bootloader ROM dans les puces Espressif ESP8266 & ESP32. Il est également disponible sur le github Espressif.
1 |
pi@raspberrypi:/dev $ <span style="font-size: 12pt;"><strong>pip install esptool</strong></span> |
Avec cet outil, on peut maintenant effacer la mémoire flash
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
pi@raspberrypi:/dev $ <span style="font-size: 12pt;"><strong>sudo esptool.py --port /dev/ttyUSB0 erase_flash</strong></span> esptool.py v2.8 Serial port /dev/ttyUSB0 Connecting........ Detecting chip type... ESP8266 Chip is ESP8266EX Features: WiFi Crystal is 26MHz MAC: 2c:f4:32:11:4a:e2 Uploading stub... Running stub... Stub running... Erasing flash (this may take a while)... Chip erase completed successfully in 2.0s Hard resetting via RTS pin... |
J’ai choisi de communiquer avec l’ESP8266 en utilisant les ports Rx et Tx physiques (les broches qui sont autour de la carte). Pour permettre l’accès à la mémoire Flash, Appuyez sur les switchs Reset et Flash, lachez Reset et l’effacement aura lieu.
[stextbox id=’info’ caption=’SI vous êtes connecté(e) via USB ‘]Si vous êtes connecté(e) par la prise micro USB, esptool va gérer automatiquement l’accès à la mémoire flash, vous n’aurez pas de manipulation physique à effectuer.[/stextbox]
Maintenant qu’on a effacé la mémoire flash, on va pouvoir y mettre le firmware de remplacement : MicroPython.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
pi@raspberrypi:/dev $ <span style="font-size: 12pt;"><strong>sudo esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect -fm dio 0 /home/pi/Downloads/esp8266-20191220-v1.12.bin</strong></span> esptool.py v2.8 Serial port /dev/ttyUSB0 Connecting.... Detecting chip type... ESP8266 Chip is ESP8266EX Features: WiFi Crystal is 26MHz MAC: 2c:f4:32:11:4a:e2 Uploading stub... Running stub... Stub running... Changing baud rate to 460800 Changed. Configuring flash size... Auto-detected Flash size: 4MB Flash params set to 0x0240 Compressed 619828 bytes to 404070... Wrote 619828 bytes (404070 compressed) at 0x00000000 in 9.4 seconds (effective 529.7 kbit/s)... Hash of data verified. Leaving... Hard resetting via RTS pin... |
Tester MicroPython
Pour tester MicroPython on peut utiliser CuteCom. Il n’est pas installé par défaut sur votre version de Raspbian. Vous trouverez la méthode pour l’installer dans un article précédent sur l’ESP8266. Configurez CuteCom pour qu’il se connecte à votre carte ESP8266 (pour moi /dev/ttyUSB0 à 115200 b/s).
Redémarrez la carte NodeMCU avec le bouton Reset.
1 2 3 |
MicroPython v1.12 on 2019-12-20; ESP module with ESP8266␍␊ Type "help()" for more information.␍␊ >>> |
Vous devriez obtenir le résultat ci-dessus.
Votre carte est maintenant sous MicroPython.
et pour connaître la version de Python embarquée :
1 2 3 |
import sys␍␊ print(sys.version)␍␊ 3.4.0␍ |
C’est donc un Python 3.4 qui est présent dans ce firmware.
WiFi
Après l’installation et le démarrage, la carte configure automatiquement un point d’accès WiFi (AP) auquel vous pouvez vous connecter. L’ESSID est de la forme MicroPython-xxxxxx où les x sont remplacés par une partie de l’adresse MAC de votre appareil (il sera donc identique à chaque fois, et très probablement différent pour toutes les puces ESP8266). Le mot de passe pour le WiFi est micropythoN (notez le N majuscule). Son adresse IP sera 192.168.4.1 une fois que vous vous serez connecté à son réseau.
Il est possible de configurer le WiFi mais ce n’est pas l’objet de ce tutoriel 🙂
Accéder au point d’accès AP (Access Point)
Manip faite ici sur un PC Windows 10 : Dans la liste des AP WiFi, vous trouverez une ligne MicroPython (ici MicroPython 114ae2 – adresse MAC de l’AP). Connectez vous sur cet AP de la carte ESP8266. Le mot de passe est par défaut : micropythoN.
C:\Users\admin>ping 192.168.4.1
Envoi d’une requête ‘Ping’ 192.168.4.1 avec 32 octets de données :
Réponse de 192.168.4.1 : octets=32 temps=1 ms TTL=255
Réponse de 192.168.4.1 : octets=32 temps=1 ms TTL=255
Lorsque vous êtes connecté(e) à l’AP vous pouvez utiliser l’accès Web pour discuter avec la carte ESP8266.
Utiliser WebREPL avec MicroPython
WebREPL, c’est quoi ?
REPL signifie Read Evaluate Print Loop. C’est est le nom donné à l’invite interactive MicroPython à laquelle vous pouvez accéder sur le ESP8266. L’utilisation du REPL est de loin le moyen le plus simple de tester votre code et d’exécuter des commandes.
Il y a deux façons d’accéder au REPL : soit par une connexion câblée via le port série de l’UART (comme ci-dessus), soit par WiFi.
WebREPL vous permet d’utiliser l’invite Python sur le WiFi, en vous connectant via un navigateur. Les dernières versions de Firefox et de Chrome sont prises en charge. Pour faciliter l’utilisation, le client WebREPL est hébergé sur http://micropython.org/webrepl. Vous pouvez également l’installer localement à partir du dépôt GitHub https://github.com/micropython/webrepl .
Mettre WebREPL en route
Avant de vous connecter à WebREPL, vous devez définir un mot de passe et l’activer via une connexion série normale. Les versions initiales de MicroPython pour ESP8266 étaient livrées avec WebREPL activé automatiquement au démarrage et avec la possibilité de définir un mot de passe via le WiFi lors de la première connexion. Cependant comme WebREPL est très connu, les possibilités d’intrusions sont devenues trop fortes. La configuration initiale ne peut plus se faire qu’en connexion câblée pour une meilleure sécurité. Une fois connecté(e) via l’UART ou l’USB tapez après le prompt >>> :
1 |
import webrepl_setup |
Suivez les instructions et les invites à l’écran. Pour que les modifications soient actives, vous devez redémarrer votre appareil.
1 2 3 4 5 6 7 8 9 10 11 |
WebREPL daemon auto-start status: disabled␍␊ Would you like to (E)nable or (D)isable it running on boot?␍␊ (Empty line to quit)␍␊ > <span style="font-size: 14pt;"><strong>E</strong></span>␍␊ To enable WebREPL, you must set password for it␍␊ New password (4-9 chars): <span style="font-size: 14pt;"><strong>ESP8266</strong></span>␍␊ Confirm password: <strong><span style="font-size: 14pt;">ESP8266</span></strong>␍␊ Changes will be activated after reboot␍␊ Would you like to reboot now? (y/n)<span style="font-size: 14pt;"><strong> y</strong></span>␍␊ >>> ␍␊ ets Jan 8 2013,rst ca |
J’ai autorisé la mise en route de WebREPL, entré comme mot de passe ESP8266 (original, non?) et autorisé le reboot de la carte. Après le redémarrage on obtient :
1 2 3 4 5 |
WebREPL daemon started on ws://192.168.4.1:8266␍␊ Started webrepl in normal mode␍␊ MicroPython v1.12 on 2019-12-20; ESP module with ESP8266␍␊ Type "help()" for more information.␍␊ >>> |
Utiliser WebREPL
[stextbox id=’info’ caption=’Pour info’]J’ai fait cette manip sur PC car Raspbian rechigne à se connecter à l’AP avec le MDP ESP8266 il me dit que le MDP est trop court, si j’allonge le MDP à 9 caractères, je n’ai plus ce message d’erreur mais pas non plus la connexion.[/stextbox]
Pour utiliser WebREPL, connectez votre ordinateur au point d’accès de l’ESP8266 (MicroPython-xxxxxx, voir la section précédente à ce sujet). Une fois que vous êtes sur le même réseau que l’ESP8266, ouvrez la page web http://micropython.org/webrepl/#192.168.4.1:8266/ puis cliquez sur le bouton « Connect« . Si la connexion est réussie, vous devriez voir une invite de mot de passe.
Une fois que vous avez tapé le mot de passe configuré à l’étape de configuration ci-dessus, appuyez sur Entrée une fois de plus et vous devriez obtenir une invite ressemblant à >>>. Vous pouvez maintenant commencer à taper des commandes Python ! Pour les tests j’ai connecté une LED entre D5 (GPIO 14) et masse.
1 2 3 |
pin = machine.Pin(14, machine.Pin.OUT) pin.on() pin.off() |
La LED s’allume et s’éteint, le test est concluant. Mais là on est en ligne de commande, le programme disparaîtra quand on éteindra la carte. Il faut pouvoir enregistrer un programme dans la carte.
Ce qui nous intéresse c’est le cadre à droite qui permet d’envoyer (Send) ou récupérer (Get) un programme présent sur la carte.
Les programmes MicroPython et l’ESP8266
Si vous souhaitez qu’un programme soit exécuté automatiquement au démarrage de la carte, il va falloir créer un programme appelé main.py. Il contiendra les instructions à exécuter au démarrage.
Sur le PC j’ai créé avec Note Pad++ un fichier appelé main.py (évitez le bloc-note Windows qui introduit des caractères parasites) :
1 2 3 4 5 6 |
import machine import time led = machine.Pin(14, machine.Pin.OUT) led.on() time.sleep(1) led.off() |
Ce programme est simplement chargé d’allumer une LED connecté entre D5 (GPIO 14) et masse pendant une seconde, puis de l’éteindre.
Dans le cadre à droite de la fenêtre WebREPL cliquez sur Parcourir, sélectionner le fichier main.py que vous avez créé, puis cliquez sur Send to device pour envoyer le fichier main.py vers la carte ESP8266.
Redémarrez la carte (reset ou alimentation). Au démarrage, la LED s’allume une seconde puis s’éteint. Attention, si votre programme comporte une erreur, il va « planter » sans explication…
Conclusion
Il y a encore beaucoup à dire sur MicroPython et son utilisation avec la carte ESP8266, mais vous trouvez ici la méthode pour démarrer et commencer à découvrir comment ça fonctionne.
Sources
- https://docs.micropython.org/en/latest/esp8266/tutorial/intro.html
- http://micropython.org/webrepl/#192.168.4.1:8266/
- https://nodemcu.readthedocs.io/en/master/flash/
- https://github.com/espressif/esptool
- https://docs.micropython.org/en/latest/esp8266/tutorial/repl.html
- http://www.srccodes.com/p/article/58/setup-web-repl-esp8266-12e-connect-micro-python-prompt-repl-wifi-access-point-ap-hello-world