Étiquettes : , ,

Nous avons vu que le NodeMCU ESP8266 était facilement programmable à l’aide de l’IDE Arduino. Nous allons voir comment le programmer avec MicroPython. L’intérêt d’utiliser Python pour programmer un ESP8266 est de l’utiliser à son plein potentiel.

Avant de suivre ce tutoriel, il vous faut, au préalable, installer Python 3.

Nous allons voir dans ce tutoriel comment configurer l’ESP8266 comment utiliser un terminal pour tester des commandes Python. Enfin, nous verrons deux méthodes pour charger et lancer des scripts Python sur le microcontrôleur.

Présentation de MicroPython

MicroPython est une implémentation de Python 3 créée pour le fonctionner dans l’environnement des microcontrôleurs et leurs contraintes. Il possède un sous-ensemble des librairies Python ainsi que des librairies pour s’interfacer avec le hardware de bas niveau ainsi que les interfaces réseau. (ex: Wifi)

Cartes supportant MicroPython:

  • ESP32 Boards (ex: NodeMCU ESP32)
  • PyBoard
  • Micro:Bit
  • Teensy 3.X
  • WiPy – Pycom

Installer le firmware sur l’ESP8266

Pour utiliser MicroPython, nous allons effacer la mémoire flash de l’ESP8266 et installer le firmware. Pour cela, nous allons nous servir de l’outil esptool (.py ou .exe selon ce que vous souhaitez utiliser)

  • Installer esptool.py
python3 -m pip install esptool

ou esptool.exe (disponible a l’installation du package esp sur Arduino IDE)

  • Effacer la mémoire flash (Attention: le nom du port peut être différent du vôtre)
python3 -m esptool --port COM9 erase_flash
nodemcu-esp8266-erase-flash-esptool.py Programmez un ESP8266 avec MicroPython
  • Télécharger le firmware, puis, entrer la ligne de code suivante (Attention: le nom du port et l’adresse du fichier peuvent être différents des vôtres)
python3 -m esptool --port COM9 --baud 460800 write_flash --flash_size=detect 0 C:\Users\ADMIN\Downloads\esp8266-20210202-v1.14.bin
nodemcu-esp8266-load-firmware-esptoolpy Programmez un ESP8266 avec MicroPython

Pour pouvoir communiquer et programmer l’ESP avec MicroPython, il nous faut installer un terminal. Nous allons voir, ici, l’utilisation de PuTTy et de TeraTerm.

Installer le Terminal TeraTerm sur Windows

Télécharger et installer TeraTerm

Ouvrir TeraTerm puis sélectionner le port série correspondant au microcontrôleur.

nodemcu-esp32-teraterm-conf Programmez un ESP8266 avec MicroPython

Configurer, ensuite, la communication série dans Setup> Serial Port …

nodemcu-esp32-teraterm-baudrate Programmez un ESP8266 avec MicroPython

Vous pouvez maintenant utiliser le terminal pour entrer des commandes Python et les exécuter sur l’ESP8266

nodemcu-esp8266-teraterm-hello Programmez un ESP8266 avec MicroPython

Installation du terminal PuTTy

Télécharger et installer PuTTy

Ouvrir Putty puis sélectionner le port série correspondant au microcontrôleur.

terminal-putty Programmez un ESP8266 avec MicroPython

Configurer, ensuite, la communication série. Pour pouvoir communiquer avec l’ESP8266, il faut sélectionner None dans Flow control sous Serial

terminal-putty-serial-configuration Programmez un ESP8266 avec MicroPython
terminal-putty-esp8266-serial-configuration Programmez un ESP8266 avec MicroPython

Vous pouvez maintenant utiliser le terminal pour entrer des commandes Python et les exécuter sur l’ESP8266

terminal-putty-hello-esp8266 Programmez un ESP8266 avec MicroPython

Les terminaux PuTTy et TeraTerm sont deux bonnes options pour tester quelques commandes Python mais pas pour réaliser un programme complet.

Créer un script Python et le télécharger avec ampy

Nous allons écrire un code simple afin de tester le téléversement d’un code sur ESP8266. Il y a deux fichiers qui sont traités différemment par l’ESP8266 : boot.py et main.py. Par défaut, seul le boot.py est présent. Le boot.py s’exécute en premier puis le main.py est exécuté à son tour. Si vous souhaitez créer un script qui s’exécute au démarrage vous devez l’appeler main ou le lancer dans main. Si vous ne souhaitez pas qu’il s’exécute au démarrage appellez-le autrement.

import sys
import time

def main():
    print("Program is running ")
    time.sleep(0.5)

if __name__=="__main__":
  print("{} initialized".format(sys.platform))
  while(1):
    try:
      main()
    except KeyboardInterrupt:
      print("Program stopped")
      sys.exit(0)

Nous allons ensuite installer ampy qui va nous permettre de charger un fichier sur le microcontrôleur.

python3 -m pip install adafruit-ampy

Une fois ampy installé, vous pouvez l’utiliser dans une invite de commande avec la fonction « put » pour charger un fichier en spécifiant son chemin et son nom.

ampy -d 0.5 --port COM9 put <file_directory>\main.py
micropython-ampy-put-script Programmez un ESP8266 avec MicroPython

N.B.: Si vous rencontrez l’erreur « ampy.pyboard.PyboardError: could not enter raw repl », vous pouvez augmenter le délai à 1 ou 2 (i,e « -d 1 » ou « -d 2 »)

Si vous vous connectez à l’ESP8266 avec un terminal, vous verrez alors le programme qui s’exécute. (vous pouvez arrêter le script avec Ctrl+C)

nodemcu-esp8266-teraterm-main Programmez un ESP8266 avec MicroPython

Le script main.py va s’exécuter à chaque redémarrage. Pour le supprimer, entrez la commande suivante dans le terminal

import os
os.remove('main.py')

Utilisation de l’IDE uPyCraft

Lorsqu’on développe un code et qu’il est nécessaire de le tester, il est compliqué de passer par l’invite de commande pour le charger à chaque essai. Il existe un IDE pour Python, similaire à l’IDE Arduino: uPyCraft que vous pouvez utiliser comme éditeur et comme terminal pour vous interfacer avec le microcontrôleur.

upycraft Programmez un ESP8266 avec MicroPython
  • Dans Tools> Preferences, vérifiez la configuration du port série
upycraft-serial-configuration Programmez un ESP8266 avec MicroPython
  • Dans Tools>Serial, sélectionnez le port série utilisé par le microcontrôleur
upycraft-serial-port-select Programmez un ESP8266 avec MicroPython

Une fois le microcontrôleur connecté à l’interface, vous pouvez utiliser la console comme terminal

upycraft-console-terminal Programmez un ESP8266 avec MicroPython

Vous pouvez aussi créer et éditer un fichier contenant le script Python. Une fois le code écrit, vous pouvez le charger et l’exécuter en appuyant sur F5. Pour valider le téléversement du code, il peut être nécessaire d’appuyer sur le bouton reset de la carte. Vous pouvez arrêter le code en appuyant sur Ctrl+C dans la console.

upycraft-esp8266-remove-file Programmez un ESP8266 avec MicroPython

N.B.: Vous pouvez redémarrer le code sans faire un reset, en entrant la commande

exec(open('main.py').read(), globals())

Supprimer le fichier

Si vous souhaitez que le script ne se déclenche pas au redémarrage, il faut supprimer le code main.py en utilisant la commande dans un terminal ou dans l’IDE

os.remove('main.py')
nodemcu-esp8266-teraterm-main Programmez un ESP8266 avec MicroPython
upycraft-esp8266-remove-file Programmez un ESP8266 avec MicroPython

Remettre la configuration par défaut

Pour pouvoir programmer le microcontrôleur avec Arduino IDE, vous devez supprimer le fichier main.py s’il existe et téléverser un code Arduino. Cela aura pour effet de recharger le bootloader dans la flash.

Pour utiliser de nouveau MicroPython, il faudra effacer la flash et charger le firmware.

Sources