Flasher un ESP32 avec micropython sous Linux

illustration de l'article

Dans cet article, nous allons explorer l’installation de python embarqué (MicroPython) sur une carte microcontrôleur ESP32, jusqu’à pouvoir exécuter du Python en étant directement connecté à la carte en question.

ESP32, c’est quoi ?

L’ESP32 est une série de microcontrôleurs de type système sur une puce (SOC pour ‘System On a Chip’). Les SOCs sont des systèmes complets embarqués sur un seul circuit intégré, dont la mémoire, les microprocesseurs et les différents périphériques d’interface. L’ESP32 est le successeur et une version plus musclée de l’ESP8266, pour les bricoleurs qui l’auront déjà utilisée.

My ESP32

Un carte basée ESP32 est un candidat idéal pour l’utilisation dans le domaine du développement des objets connectés, car

  • son coût est très bas, je vous invite à aller regarder les prix sur AliExpress en cherchant ‘esp32’
  • elle dispose de connectivité Wifi et Bluetooth intégrés, donc aucun besoin de rajouter du matériel supplémentaire pour avoir de la connectivité
  • outre son aspect connecté elle dispose d’une pléthore de possibilités pour l’interfaçage de composants électroniques, les références sont disponibles sur esp32.net par exemple
  • elle est adaptée aux problématiques temps réel (pour l’utilisation des bibliothèques NeoPixel par exemple), et possède une RTC (Real Time Clock) intégrée
  • son intégration est très facile pour ceux qui aiment bricoler sur de l’IOT, il suffit de voir les différents projets qu’on peut réaliser avec ces cartes sur Hackaday

En résumé, l’ESP32 se situe en milieu de chemin entre les besoins basiques de contrôle sur de l’électronique non connectée (famille Arduino par exemple) et les besoins d’un contrôleur basé sur un OS complet nécessitant des applications plus proches du monde logiciel OpenSource classique (famille des Raspberry Pis et dérivés).

Micropython, c’est quoi ?

Micropython est un interpréteur Python réduit OpenSource, développé pour être exécuté sur de l’embarqué, basé sur du Python 3. Vous pouvez donc utiliser du code python pour contrôler du hardware embarqué à la place des langages classiques plus complexes et bas niveau basés sur du C/C++ comme ceux utilisés pour le développement sur Arduino par exemple.

La simplicité du Python permet une approche plus facile pour ceux qui sont moins familiers au domaine du développement, et MicroPython garde une grande partie des capacités du Python classique

En plus de sa facilité de développement, micropython a quelques features qui le démarquent du développement embarqué traditionnel :

  • un REPL (ou Read-Evaluate-Print-Loop) interactif, qui permet de se connecter à une carte et d’exécuter des lignes de code à la volée sans compilation ou upload, ce qui est pratique pour tester des branchements de composants et capteurs rapidement
  • une bibliothèque large permettant de faciliter des tâches associées aux traitements des messages sur les systèmes distribués, et facilitant l’utilisation de composants électroniques branchés sur une carte
  • MicroPython est aussi extensible avec des fonctions bas niveau C/C++ pour des utilisations plus avancées

Pré-requis

Si vous voulez appliquer cet article sur une carte ESP32, vous aurez besoin de :

  • un cable usb (s’assurer que c’est bien un cable data et pas seulement alimentation)
  • une carte ESP32 (dans notre cas c’est une DevKit V1 de DOIT basée sur le module ESP-WROOM-32)
  • un pc sous Linux (ici un pc sous Ubuntu 20.04)
  • python version 3.4+ recommandé

Configuration de votre environnement

1. Installer picocom

Picocom est un émulateur de terminal pour les connections série sur les tty Linux, nous en aurons besoin pour accéder au REPL de micropython lorsqu’il sera installé sur l’ESP32 afin de vérifier que nous avons réussi notre flashage.

sudo apt install picocom

2. Disposer des droits d’accès à /dev/ttyUSB0

Lorsque vous brancherez votre ESP32 à votre PC, vous aurez besoin de communiquer via le port série USB, qui sera typiquement /dev/ttyUSB0 si vous n’avez aucun autre composant USB connecté.

Dépendant du Linux utilisé, il se peut que vous ayez besoin d’appartenir aux groupes tty et dialout pour disposer des droits d’écriture sur /dev/ttyUSB0.

sudo usermod -a -G tty <username>
sudo usermod -a -G dialout <username>

Si vous avez toujours des “permission denied” sur les étapes suivantes pour écrire sur /dev/ttyUSB0, vous pourrez toujours changer l’owner (à refaire à chaque fois que vous rebrancherez l’ESP32 à votre PC) :

sudo chown <username> /dev/ttyUSB0

3. Installation des outils pour flasher

Nous aurons enfin besoin de télécharger les outils pour pouvoir flasher correctement la carte ESP32. Je préfère personnellement créer un environnement virtuel python dès que je dois utiliser des bibliothèques dans un contexte spécifique, permettant ainsi d’isoler les dépendances nécessaires à chaque projet.

Pour créer son environnement virtuel, il suffit de lancer la commande suivante dans un répertoire de son choix :

python3 -m venv --system-site-packages ./venv_micropython

Une fois l’environnement virtuel installé, on l’active avec la commande suivante :

source ./venv_micropython/bin/activate

Nous pouvons maintenant installer les outils nécessaires au flashage (esptools) dans notre environnement virtuel :

pip install esptool

Pour désactiver son environnement virtuel, il suffira d’exécuter :

deactivate

Déployer le firmware micropython

Avant de pouvoir flasher notre carte ESP32 avec MicroPython, il nous manque un dernier élément : le firmware. Vous pouvez le télécharger sur https://micropython.org/download/esp32/

J’ai récupéré la dernière version stable de septembre 2020 : esp32-idf3-20200902-v1.13.bin.

Une fois le firmware téléchargé, le flashage s’effectuera en deux étapes recommandées, notamment si c’est le premier flash MicroPython sur la carte :

1. Effacer le flash existant sur la carte ESP32

esptool.py --chip esp32 --port /dev/ttyUSB0 erase_flash

Si l’effaçage du flash s’est bien déroulé, vous devriez voir une sortie console d’esptool indiquant qu’il a correctement détecté votre carte et que l’effaçage a été effectué :

Effaçage du flash ESP32

2. Installer le firmware micropython

esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 460800 write_flash -z 0x1000 esp32-idf3-20200902-v1.13.bin

Idem que pour la première commande, une sortie console d’esptool vous indiquera le flashage effectué avec le firmware que nous avons installé et que la carte a fait l’objet d’un hard reboot.

Installation du firmware micropython

3. Tester micropython via le Serial

Lancer picocom sur le terminal série approprié avec un baud rate à 115200 pour la communication avec la carte :

picocom /dev/ttyUSB0 -b115200

Si vous avez pu vous connecter correctement, vous devriez voir un message d’accueil indiquant que l’ESP32 est connecté et prêt à recevoir vos inputs, il suffit d’appuyer sur [Enter] pour avoir accès au REPL MicroPython :

Console picocom

Nous pouvons maintenant vérifier la version de MicroPython installée :

>>> import sys
>>> sys.version_info
(3, 4, 0)

Et tester avec un petit hello world :

>>> print("hello world")
hello world
>>>

Nous pouvons aussi tester le hello world façon Maker, qui consiste à allumer la led on-board de la carte testée (dépendant du modèle le pin utilisé pourra être différent) :

>>> from machine import Pin
>>> p2 = Pin(2,Pin.OUT)
>>> p2.on()
>>>

ESP32 led on

Conclusion

Dans cet article, nous avons pu aborder en quelques lignes de commande le flashage et le test via le REPL Python d’une carte ESP32 sous micropython.

Nous pourrons, dans un article suivant, aborder le développement et l’intégration avec un IDE Python (PyCharm) d’une carte ESP32 sur une problématique d’objet connecté.

Références

  1. Site de référence sur ESP32 : http://esp32.net/
  2. Projets sur l’ESP32 : https://hackaday.io/projects?tag=ESP32
  3. Téléchargement du firmware micropython pour ESP32 : https://micropython.org/download/esp32/
  4. Installation de micropython sur ESP32 : https://docs.micropython.org/en/latest/esp32/quickref.html#installing-micropython

Commentaires

comments powered by Disqus

Date

Auteur

Avatar Daniel DOMINGUE

Daniel DOMINGUE

Développeur