Déballage de la Wemos ESP32 Lolin32 Lite, test du firmware MicroPython avec un Raspberry Pi 3 • Domotique et objets connectés à faire soi-même

Il y a quelques semaines, Wemos a lancé la Lolin32 Lite à base du module ESP32 d’Espressif. L’ESP32 utilisé est la REV1 qui corrige quelques bugs. C’est une carte de développement (50*25,5*6,5 mm) très compacte compatible avec le pas 2,54mm des platines de prototypage sans soudure (breadboards). Elle est aussi étroite que la Wemos d1 mini (à base d’ESP8266) ce qui permet de disposer d’une rangée de broches de chaque coté de la carte pour les câblages. La LoLi32 Lite est équipée d’un connecteur pour batterie LiPo au standard PH-2 2.0mm assez classique. Par défaut, le firmware MicroPython est pré-installé. C’est l’occasion de découvrir ce firmware. Pour en savoir plus sur le projet de firmware MicroPython, rendez-vous sur la page officielle qui se trouve ici. La Wemos LoLin32 Lite est vendue uniquement par Wemos sur sa boutique officielle AliExpress. Elle coûte 4,20€ (+ 1,40€ de frais d’expédition pour la France). On trouve également des clones au même prix sans frais de port.

Déballage de la Wemos LoLin32 Lite ESP32

J’ai profité des soldes du 11.11 pour commander une LoLin32 sur AliExpress. Wemos pratique des prix très corrects sur ces cartes de développement. Il n’y avait aucune réduction (ni pour le Black Friday d’ailleurs). La LoLin32 Lite est expédiée dans une simple enveloppe à bulles. Elle est arrivée en 12 jours, ce qui est très correct à l’approche des fêtes de fin d’année. Wemos a un service d’expédition très bien organisé. La carte arrive emballée dans un sachet anti-statique avec un étiquette au nom de l’acheteur. Contrairement à la Wemos d1 mini, la LoLin32 Lite n’est livrée qu’avec un seul type de connecteur mâle (13 broches). Comme la carte est étroite, on dispose d’une rangée de broche de chaque coté sur une breadboard. On trouve assez facilement des connecteurs avec un coté mâle et femelle sur AliExpress ou Banggood en cas de besoin.

Batterie LiPo avec connecteur PH-2 2.0mm 2-pin, classique pour les drones et RC

C’est un problème récurrent avec les connecteurs pour batterie LiPo utilisés par les fabricants de cartes de développement. Pour la LoLin32, Wemos utilise un connecteur JST 2.0 PH 2-Pin. J’ai pris le temps de chercher la désignation complète car c’est toujours un problème. Par chance, on trouve très facilement des câbles que l’on pourra utiliser pour modifier un bloc de pile ou une batterie LiPo. Attention toutefois à ne pas inverser la polarité !

Le connecteur JST 2.0 PH 2-Pin est très utilisé dans les jouets RC et les mini drones. On le retrouve très souvent sur les drones Hubsan ou Eachine par exemple. C’est une bonne nouvelle car il sera aussi très facile de trouver des batteries compatibles sans avoir à bidouiller. Seul regret, on aura du mal à trouver des batteries au delà de 1200 mAh. Un gros atout de l’ESP32 étant sa très faible consommation, cela ne devrait toutefois pas poser trop de problème. Reste à optimiser le code pour mettre le module en sommeil et limiter l’envoi de données pour économiser la batterie.

C’est quoi le MicroPython ?

lj9agondr62a4rwfqedr-9356302MicroPython est une réécriture (implémentation) du langage Python adapté aux micro-contrôleurs. C’est un projet Open Source lancé par Damien George. Le code source est disponible sur GitHub ici. Ce projet initié en 2013 a été accompagné d’une campagne de financement participative sur Kickstarter pour lancer la carte de développement PyBoard. Le projet a rencontré un succès immédiat. Aujourd’hui, la PyBoard est une famille complète de carte de développement que vous pouvez acheter sur la boutique en ligne. Vous achetant les cartes PyBoard, vous participez au soutient du projet.

Uniquement disponible pour les PyBoard, MicroPyton a ensuite été porté pour d’autres micro-contrôleurs et par conséquent d’autres fabricants de cartes. MicroPython est maintenant disponible pour l’ESP8266, l’ESP32 , les cartes WiPy, les cartes à base de STM32 (STM32F4), les cartes Nucleo et Espruino Pico. Pour télécharger le firmware qui correspondant à votre carte, rendez-vous sur cette page.

Comme son nom l’indique, on va donc coder en Python à la place du code C++ ou Lua habituel. Bien évidemment, toutes les instructions du Python ne sont pas disponibles. Seuls les commandes utiles aux micro-contrôleurs ont été portées. Toutes les commandes sont disponibles sur la documentation en ligne.

MicroPython fonctionne avec un système de fichier ou un interpréteur de commande appelé REPL (Read-Eval-Print Loop) disponible depuis une connexion série ou depuis un navigateur internet (ce sera WebREPL). C’est pratique pour faire des tests, découvrir le langage et faire de opérations de maintenance (gestion de fichier, connexion à un réseau WiFi…).

Pour la programmation, on utilisera un simple éditeur de texte pour écrire les scripts. Il suffira ensuite de copier les fichiers sur la carte. Bien évidemment, c’est une présentation très succincte de MicroPython. Nous le découvrirons beaucoup mieux dans les prochains tutoriels.

Pour cette première découverte, nous allons utiliser un Raspberry Pi 3. Nous verrons comment faire sous Windows 10 dans le prochain article). Voici une petite vidéo qui présente le concept rapidement

Test de MicroPython avec la Wemos LoLin32 Lite

Wemos livre donc la LoLin32 Lite avec MicroPython. C’est la première fois que Wemos abandonne le firmware NodeMCU. Il faut peut être y voir un désintérêt du langage Lua par les Makers. C’est vrai que le nombre impressionnant de librairies et d’exemples Arduino laisse peu de chance aux autres langages.

Pour ce premier tutoriel, je vous propose donc de démarrer avec le Raspberry Pi. Ouvrez un Terminal ou connectez vous en SSH depuis un autre ordinateur. Branchez la LoLin32 Lite sur le port USB et exécutez la commande suivante pour identifier le port USB sur lequel on vient de brancher l’ESP32

dmesg | grep ttyUSB
[5253941.605452] usb 1-1.2: ch341-uart converter now attached to ttyUSB0

On connaît donc le port USB sur lequel est branché la carte (ttyUSB0) et le convertisseur USB/série utilisé par la carte (CH341). Ce n’est pas un secret, le contrôleur est bien visible à coté du connecteur micro-USB.

Installer Python3, pip3 et rshell pour communiquer avec le firmware MicroPython

Il existe plusieurs solutions pour accéder à l’interpréteur de commande Python (REPL). Après en avoir testé plusieurs, je trouve que le plus fiable est rshell (page GitHub). rshell a été développé en Python3, on va donc l’installer ainsi que pip3 qui servira à installer rshell

sudo apt-get -y install python3
sudo apt-get -y install python3-pip
sudo pip3 install rshell

Voilà, il ne reste pus qu’à se connecter à la LoLin32 Lite à l’aide de la commande suivante

rshell --buffer-size=30 -p /dev/ttyUSB0

La connexion série est établie immédiatement. Si ce n’est pas le cas, appuyez sur le bouton RESET de la carte et recommencez.

Connecting to /dev/ttyUSB0 ...
Welcome to rshell. Use Control-D to exit.
/home/pi>

Exécutez la commande boards pour identifier la carte connectée et les fichiers présents. Comme vous pouvez le constater, il n’y a que le fichier boot.py qui est chargé de gérer le démarrage de la carte. On peut voir également le système de fichier qui est capable de gérer une arborescence.

/home/pi> boards
pyboard @ /dev/ttyUSB0 connected Dirs: /boot.py

Premier script MicroPython

Rien de mieux qu’un exemple pour comprendre le fonctionnement du système. Ouvrez un nouveau Terminal (ou connexion SSH). Placez-vous dans le dossier /home/pi (cd /home/pi ) puis ouvrez un nouveau fichier avec la commande nano blynk.py  et collez le code suivant. Ce petit script va simplement faire clignoter une Led branchée sur la broche 19 de l’ESP32.

import utime
import machine
pin19 = machine.Pin(19, machine.Pin.OUT)
while True:
  pin19.value(1)
  utime.sleep_ms(500)
  pin19.value(0)
  utime.sleep_ms(500)

Enregistrez avec la combinaison de touches CTRL+X puis Y (En) ou O (Fr)

Transfert et test du script MicroPython

Depuis le Terminal rshell, on va copier le script python sur la LoLin32 avec la commande Linux cp. La commande ls suivi de la carte /pyboard permet de lister les fichiers présents sur la carte

cp blynk.py /pyboard
ls /pyboard
blynk.py boot.py

Parfait, reste plus qu’à tester !

Tester l’interpréteur REPL

Depuis le Terminal rshell, exécuter la commande REPL pour lancer l’interpréteur de commande MicroPython. Il est symbolisé par l’invite >>>

/home/pi> repl
Entering REPL. Use Control-X to exit.
>
MicroPython v1.9.2-443-g236297f4 on 2017-11-24; ESP32 module with ESP32
Type "help()" for more information.
>>> 

Pour lancer notre script, on utilise la commande import suivi du nom du script sans l’extension (py)

>>> import blynk

S’il n’y a aucune erreur (code et câblage), la Led clignote immédiatement. Génial ! Pour arrêter le script utilisez la combinaison CTRL+C. Si la Led est restée allumée, c’est l’occasion de tester l’interpréteur de commande pour l’éteindre. Exécutez les lignes suivantes les unes après les autres.

>>> import machine
>>> pin19 = machine.Pin(19, machine.Pin.OUT)
>>> pin19.value(0)

C’est la puissance de MicroPython.

Comment démarrer automatiquement un script au branchement de la carte ?

Le firmware microPython lance automatiquement le script le main.py à la mise sous tension. Rien de plus simple, il suffit de renommer le script blynk.py en main.py. C’est l’occasion de jouer avec le système de fichier à l’aide de REPL. On va importer le module OS qui contient toutes les commandes de gestion de fichier (la documentation est ici). Commençons par lister les fichiers

>>> import os
>>> os.listdir()
['blynk.py', 'boot.py']
>>>

La commande rename permet de renommer un fichier. Il faut bien mettre entre guillemets (‘) pour ne pas avoir d’erreur

>>> os.rename('blynk.py','main.py')
>>> os.listdir()
['boot.py', 'main.py']

Appuyez maintenant sur le bouton RESET présent sur la carte. Un compte rendu de démarrage s’affiche sur le Terminal et la LED clignote immédiatement maintenant !

>>> ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:4332
load:0x40078000,len:0
load:0x40078000,len:10992
entry 0x4007a6c4
W (65) rtc_clk: Potentially bogus XTAL frequency: 35 MHz, guessing 40 MHz
I (360) cpu_start: Pro cpu up.
I (360) cpu_start: Single core mode
I (361) heap_init: Initializing. RAM available for dynamic allocation:
I (364) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (370) heap_init: At 3FFDCD60 len 000032A0 (12 KiB): DRAM
I (376) heap_init: At 3FFE0440 len 00003BC0 (14 KiB): D/IRAM
I (382) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (389) heap_init: At 4008FC7C len 00010384 (64 KiB): IRAM
I (395) cpu_start: Pro cpu start user code
I (189) cpu_start: Starting scheduler on PRO CPU.

Comme nous sommes toujours connectés à REPL, on peut arrêter l’exécution du script main.py avec la combinaison CTRL+C. Par contre, je n’ai pas encore trouvé la commande qui permet de se déconnecter de REPL. Il faut fermer le terminal pour cela.

Voilà, MicroPython est vraiment un langage très simple à prendre en main, surtout si vous avez déjà quelques notions en Python. Si vous avez des objets connectés simples à réaliser (DHT22, accéléromètre, servo-moteurs, capteurs I2C, PWM), MicroPython est une alternative très intéressante au C++ et l’IDE Arduino. Vous verrez que sur Windows, c’est encore plus facile.

Avez-vous aimé cet article ?