Publié le 28 mars 2020 - par

Installer MicroPython sur ESP8266 ESP12 NodeMCU

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.

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.

Avec cet outil, on peut maintenant effacer la mémoire flash

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.


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.

Maintenant qu’on a effacé la mémoire flash, on va pouvoir y mettre le firmware de remplacement : MicroPython.

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.

Vous devriez obtenir le résultat ci-dessus.

Votre carte est maintenant sous MicroPython.

et pour connaître la version de Python embarquée :

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.

Après connexion, vous pouvez vérifier en ligne de commande que la carte ESP8266 répond :

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 >>> :

Suivez les instructions et les invites à l’écran. Pour que les modifications soient actives, vous devez redémarrer votre appareil.

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 :

Utiliser WebREPL

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.

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.

Le bouton “Connect” se transforme en “Disconnect” et vous avez une invitation à entrer le mot de passe. Tapez le MDP (pour rappel j’avais mis ESP8266).

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.

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) :

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.

Pour en savoir plus, vous trouverez les livres de Dominique Meurisse chez ENI : MicroPython et Pyboard, et Python, Raspberry Pi et Flask.

Sources

 

 

Share Button

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. Auteur de plusieurs livres sur le Raspberry Pi publiés aux Editions ENI.

7 réflexions au sujet de « Installer MicroPython sur ESP8266 ESP12 NodeMCU »

  1. CARMONA

    Bonjour François,
    Ma question : est-il possible en MicroPython d’affecter d’autres Pin que la 4 et 5 à un usage I2C. Je souhaite sans circuit mettre un BMP280 et un écran SSD1306 sur un ESP-12E.

    Merci de la réponse si c’est possible.

    Bravo pour notre rencontre lors du salon de Vitré ou j’ai été fort impressionné par votre gentillesse ainsi que celle de Sarah Lacaze.

    Bonne continuation
    Cordialement,
    Jean Luc

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour Jean Luc
      je n’ai pas testé ça mais une recherche me renvoie sur https://docs.micropython.org/en/latest/esp8266/quickref.html#i2c-bus
      pour l’ESP8266. Il faudrait voir si on peut déclarer d’autres pins dans la ligne i2c = I2C(scl=Pin(5), sda=Pin(4), freq=100000)
      Après si les 2 sont sur le bus I2C vous les reliez tous les deux à SDA et SCL et ça fonctionne, c’est le principe du bus…
      http://electro8051.free.fr/I2C/busi2c.htm
      Pas trop le temps pour tester ça entre les impressions de visières 3D et l’écriture d’articles pour la revue Programmez!
      Merci pour votre retour sur Vitré c’est gentil mais avec Sarah c’est vraiment un plaisir pour nous de rencontrer les makers sur toute la France :)prenez soin de vous et de vos proches
      cordialement
      François

      Répondre
  2. CARMONA

    Hello François,
    Suite au message j’ai donc essayé de refaire en mettant les Pin(0) pour scl et Pin(2) pour sda en Pin.IN tous les 2 et cela fonctionne très bien. J’ai chargé la librairie ssd1306 et instancié une variable OLED (je ne savait que mettre) et miracle c’est bon.
    Merci de votre aide et de m’avoir répondu. Longue vie au RPI avec des ESP8266 encore mieux.
    Bon weekend.
    Jean Luc

    Répondre
  3. destroyedlolo

    En plus évidemment des C++ (et C si on veut qq chose de moins glouton), et donc python, il y a pleins d’autre langage sur l’ESP : Basic entre autre, mais aussi Lua malheureusement un peu abandonné.

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP * Time limit is exhausted. Please reload CAPTCHA.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.