ESP8266? ESP32 ?

ESP8266 et ESP32 sont des microcontrôleurs développés par la société Espressif. Ce qui fait leur succès c'est d'une part le fait qu'ils sont équipés de wifi (et de bluetooth pour l'ESP32) et d'autre part le fait qu'ils équipent des cartes de développement type arduino très bon marché et faciles d'accès. Ces puces sont rapides et équipées de suffisamment de mémoire pour faire fonctionner MicroPython. Il est possible de les utiliser aussi avec l'environnement de développement arduino IDE standard mais cela sort du cadre de notre tutoriel.

Quelles cartes ESP8266 choisir ?

Il y a beaucoup de choix disponible. La carte que je conseille pour débuter sur MicroPython est la Wemos D1 mini. Celle-ci est disponible pour moins de 3€ en chine et se trouve assez facilement.

Si vous souhaitez un peu plus de broches disponibles, alors un grand standard est la carte NodeMcu. Elle est disponible en chine pour moins de 3€ également.

Quelles cartes ESP32 choisir ?

Si vous voulez disposer de plus de mémoire ou plus de puissance pour des projets plus ambitieux, plus de broches d'entrée-sortie ou de bluetooth, alors vous vous tournerez vers l'ESP32. Ces cartes sont légèrement plus chères mais accessibles pour moins de 5€ en chine. La carte la plus basique est l'équivalent de la wemos D1 mais avec un esp32. Elle possède plus de broches, mais pas toutes accessibles sur une breadboard.

En recherchant esp32, vous trouverez énormément de modèles avec chacun leurs spécificités pour s'accorder à votre projet.

Installation de MicroPython

Pour installer ce MicroPython sur la carte ESP8266/32, il faudra disposer de l'outil esptool.py. Le plus simple pour se le procurer est d'utiliser l'installateur de paquets pip :

sudo pip3 install esptool

Sur ESP8266

On supposera dans ces commandes que le port USB est accessible via /dev/ttyUSB0. Il faudra adapter selon que vous êtes sur mac (/dev/cu.usbserial.XXXXX) ou windows (COMX)

  1. Effacer la mémoire flash :

    esptool.py --port /dev/ttyUSB0 erase_flash
    
  2. Installer Micropython. Téléchargez le firmware. Dans l'exemple il se nomme esp8266-20191220-v1.12.bin.

    esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 esp8266-20191220-v1.12.bin
    
  3. Pour se connecter à la console REPL de la carte, on utilisera sous linux ou mac l'utilitaire screen ou minicom. Sous windows, putty fera près bien l'affaire. Taper

    screen /dev/ttyUSB0 115200
    

    si rien ne s'affiche, tapez entrée. Vous devriez voir apparaître le prompt (>>>). Tapez CTRL-D pour redémarrer la carte (soft reboot). Vous voyez alors apparaître la version de MicroPython. Vous êtes prêts à travailler !

>>>
PYB: soft reboot
OSError: [Errno 2] ENOENT
MicroPython v1.12 on 2019-12-20;

Type "help()" for more information.

Sur ESP32

On supposera dans ces commandes que le port USB est accessible via /dev/ttyUSB0. Il faudra adapter selon que vous êtes sur mac (/dev/cu.usbserial.XXXXX) ou windows (COMX)

  1. Effacer la mémoire flash :

    esptool.py --chip esp32 --port /dev/ttyUSB0 erase_flash
    
  2. Installer Micropython. Téléchargez le firmware. Dans l'exemple il se nomme esp32-idf3-20200227-v1.12-195-gb16990425.bin.

esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 460800 write_flash -z 0x1000 esp32-idf3-20200227-v1.12-195-gb16990425.bin
  1. Pour se connecter à la console REPL de la carte, on utilisera sous linux ou mac l'utilitaire screen ou minicom. Sous windows, putty fera près bien l'affaire. Taper
    screen /dev/ttyUSB0 115200
    
    si rien ne s'affiche, tapez entrée. Vous devriez voir apparaître le prompt (>>>). Tapez CTRL-D pour redémarrer la carte (soft reboot). Vous voyez alors apparaître la version de MicroPython. Vous êtes prêts à travailler !
>>> 
MPY: soft reboot
MicroPython v1.12-195-gb16990425 on 2020-02-27; ESP32 module with ESP32
Type "help()" for more information.

Configuration du réseau Wifi

Les modules ESP sont équipés en standard de Wifi. La configuration des paramètres wifi se fait à l'aide de commandes Python. On peut soit les taper à la volée dans la console REPL, soit les charger automatiquement au démarrage de la carte.

Configuration via la commande interactive REPL

Connectez vous en mode console au REPL de MicroPython (sous Linux, vous taperez screen /dev/ttyUSB0 115200 comme vu précédemment). Une fois que vous avez le prompt(>>>), tapez les lignes suivantes, elles vous connecteront au réseau wifi. Remplacez bien sûr "MON_SSID" et "MON_PASSWD" par le nom de votre wifi et le mot de passe correspondant.

Conservez ces lignes dans un bloc-note, elles pourront resservir plus tard...

import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect('MON_SSID', 'MON_PASSWD')
print('network config:', wlan.ifconfig())

Si vous faîtes un copier coller, faîtes le ligne par ligne afin de laisser le temps à chaque commande de se terminer. Si vous allez trop vite, la procédure peut échouer.

Si tout s'est bien passé, vous devriez obtenir à la fin une ligne du type

network config: ('192.168.1.234', '255.255.255.0', '192.168.1.1', '192.168.1.10')

Félicitations, votre carte est connectée en Wifi à votre réseau. Dans l'exemple précédent, l'adresse IP de la carte est le 192.168.1.234. Un ping confirmera qu'elle répond bien.

⚠️ Attention ! ⚠️

Pour le moment, notre configuration sera conservée lors d'un soft-reset (CTRL-D) mais pas lors d'un hard-reset (bouton reset de la carte ou débranchement de la prise USB).

Configurer le Wifi au démarrage de la carte (optionnel) dans boot.py

Pour que le Wifi s'active au reboot, il faut faire la configuration réseau dans le fichier boot.py qui se charge automatiquement au démarrage de la carte.

Un fichier boot.py existe déjà sur la carte dès l'installation de MicroPython. Ajoutez-y les lignes suivantes en complétant le nom et le mot de passe de votre Wifi.

import network
import time
import sys

# Connexion au Wifi
WIFI_SSID = 'MON_WIFI'
WIFI_PASSWORD = 'MON_PASSWD'

# Desactive le reseau Wifi interne a la carte
ap_if = network.WLAN(network.AP_IF)
ap_if.active(False)

# connection de la carte au reseau Wifi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
time.sleep(3)
print('connexion au reseau...')
wlan.connect(WIFI_SSID, WIFI_PASSWORD)
time.sleep(1)
# 20 Tentatives de connexions au Wifi
MAX_ATTEMPTS = 20
attempt_count = 0
while not wlan.isconnected() and attempt_count < MAX_ATTEMPTS:
    attempt_count += 1
    time.sleep(1)
    wlan.connect(WIFI_SSID, WIFI_PASSWORD)

if attempt_count == MAX_ATTEMPTS:
    print('impossible de rejoindre le reseau Wifi')
    sys.exit()
print('config reseau:', wlan.ifconfig())

Pour modifier le boot.py, il faut disposer d'un environnement de développement. Il y en a 2 principaux disponibles : webrepl dont l'installation est documentée sur le site de ou Mu.

Si vous ne savez utiliser aucun des 2 pour le moment, vous pouvez remettre cette configuration à plus tard, voire l'ignorer car il est toujours possible de réaliser la connexion au wifi au début de vos programmes comme on le verra dans nos exemples de mini-projets.

WebREPL : console interactive accessible par Wifi dans un navigateur internet

WebREPL est rudimentaire mais possède l'immense avantage de pouvoir être utilisé depuis n'importe où dans connexion USB entre l'ordinateur et la carte. Vous programmez votre carte à distance pourvu qu'elle soit alimentée...

On supposera que MicroPython a été installé et que le réseau Wifi est configuré - voir section précédente.

Configuration initiale

Tapez la commande suivante pour configurer le webREPL et mettre un mot de passe. Choisissez si vous souhaitez que webrepl se lance automatiquement au démarrage. Si vous n'utilisez pas cet environnement car vous utilisez uPyCraft ou mu, je vous conseille de ne pas l'activer automatiquement pour économiser de précieuses ressources mémoire.

import webrepl_setup

A l'issue de cette commande, la carte redémarrera. Vous devrez refaire votre configuration réseau car à ce stade elle n'est pas encore persistante.

Dans votre navigateur internet, allez à l'adresse http://micropython.org/webrepl/

Dans le champ de saisie en haut à gauche, saisissez l'adresse ws://IP_DE_LA_CARTE:8266/ puis cliquez sur connecter. Vous devriez avoir accès au REPL dans votre navigateur.

capture ecran

Utilisation de webREPL

L'utilisation du webrepl est très basique : on édite ses fichiers avec son éditeur de texte favori, on les téléverse sur la carte puis on les exécute via la console interactive.

Librairie OS

La librairie os peut se révéler utile : Pour voir les fichiers présents sur la carte par exemple :

import os
os.listdir()

Quelques autres commandes utiles de la librairie os : chdir, listdir, mkdir, remove , rename, rmdir.

Rendre la configuration Wifi persistante au reboot (optionnel)

Pour que le Wifi s'active au reboot, nous avons vu le contenu à ajouter au boot.py. Avec webREPL, la procédure est la suivante :

  • Télécharger boot.py : tapez boot.py dans le champ Get a file puis cliquez sur Get from device
  • Modifier le boot.py comme indiqué précédemment
  • Renvoyer boot.py sur la carte : Cliquez sur Parcourir... dans le champ Send a file puis le bouton Send to device

Documentation de référence

L'essentiel à connaître est résumé sur cette page du site micropython.org :