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.
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.
Un carte basée ESP32 est un candidat idéal pour l’utilisation dans le domaine du développement des objets connectés, car
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 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 :
Si vous voulez appliquer cet article sur une carte ESP32, vous aurez besoin de :
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
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
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
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 :
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é :
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.
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 :
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()
>>>
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é.