fbpixel
Étiquettes : , ,
3.6
(10)

Nous avons vu que le NodeMCU ESP32 é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 ESP32 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’ESP32, 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:

  • ESP8266 Boards (ex: NodeMCU ESP8266)
  • PyBoard
  • Micro:Bit
  • Teensy 3.X
  • WiPy – Pycom
  • Raspberry Pi Pico

Installer MicroPython avec Thonny IDE

La méthode la plus simple pour installer et utiliser MicroPython sur ESP32 (et autre microcontrôleur) est d’utiliser le logiciel Thonny IDE. En effet vous pouvez installer le firmware à partir de l’interface du logiciel et l’utiliser pour développer votre code et le téléverser sur la carte.

Télécharger le firmware correspondant à votre microcontrôleur.

Pour installer le firmware, allez dans le menu “Run” et sélectionnez “Select interpreter…”

Appuyer ensuite sur “Install or update firmware” en bas à droite

Sélectionnez votre carte et le fichier contenant le firmware précédemment téléchargé. Puis appuyez sur “Install”

Une fois le firmware installé, vous pouvez entrer des commandes Python dans la console.

Vous pouvez aussi écrire votre script et le lancer sur la carte depuis Thonny. Copiez le code suivant dans l’éditeur

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)

Pour lancer le script, allez dans “Run>Run current script” ou F5. Renommer le script main.py

Le code devrait se lancer automatiquement

Lorsque vous redémarrez l’IDE, vous pouvez ouvrir les fichiers présents sur la carte que vous pouvez retrouver avec la commande

import os
os.listdir()

N.B.: Pour pouvoir programmer le microcontrôleur avec Arduino IDE, vous devez téléverser un code Arduino. Cela aura pour effet de recharger le bootloader dans la flash.

Installer le firmware sur l’ESP32 par lignes de commande

Pour utiliser MicroPython, nous allons effacer la mémoire flash de l’ESP32 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 --chip esp32 --port COM9 erase_flash
  • 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 --chip esp32 --port COM9 --baud 460800 write_flash -z 0x1000 C:\Users\ADMIN\Downloads\esp32-idf3-20210202-v1.14.bin

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

Utilisation de différents outils pour communiquer et programmer votre ESP32

Une fois votre microcontrôleur configuré avec Micropyhton, vous pouvez utiliser différents outils pour programmer en Python. Des terminaux comme TeraTerm ou Putty et des IDE comme VS Code, uPyCraft ou Thonny.

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.

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

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

Installation du terminal PuTTy

Télécharger et installer PuTTy

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

Configurer, ensuite, la communication série

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

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 ESP32. Il y a deux fichiers qui sont traités différemment par l’ESP32 : 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 appelez-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

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’ESP32 avec un terminal, vous verrez alors le programme qui s’exécute. (vous pouvez arrêter le script avec Ctrl+C)

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.

  • Dans Tools> Preferences, vérifiez la configuration du port série
  • Dans Tools>Serial, sélectionnez le port série utilisé par le microcontrôleur

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

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.

N.B.: Vous pouvez redémarrer le script 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

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

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 mémoire flash et charger le firmware.

Sources

How useful was this post?

Click on a star to rate it!

Average rating 3.6 / 5. Vote count: 10

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?