Feather Huzzah ESP8266 sous MicroPython + DHT11

Petite journée détente... aujourd'hui, je voulais mesurer l'humidité et la température de ma cave avec un Feather-Huzzah-ESP8266 sous MicroPython et un DHT11.
Feather-Huzzah-ESP8266

La raison d'un tel prototype
Nous envisageons de créer un petit réseau de capteur WiFi (en Python) + Solution d'affichage sur Raspberry-Pi (en Python aussi).
Mais j'ai aussi une bonne raison toute personnelle de le faire.

Avec le changement récent de la chaudière (pour une version super économe), nous avons eu moins de déperdition de chaleur autour de la dite chaudière.
La température de la cave à chuter drastiquement.
L'humidité à trouvé, là, une occasion idéale de s'installer... elle est montée en flèche... avec le risque d'apparition de moisissure.
Après une isolation du vide ventilé et l'organisation d'une ventilation forcée (gestion manuelle), mais un petit monitoring ce serait sympa.

Le montage et le code est simple... mais la toute première mise en oeuvre d'un ESP8266 en MicroPython + connexion WiFi + WebRepl est nettement plus long!

Le Montage DHT11


Une fois la connexion REPL (ou WebRepl) établie, vous pourrez tester ce senseur très facilement.
import machine
import dht

d = dht.DHT11( machine.Pin(4) )
d.measure()
d.temperature()
d.humidity()

Ce qui à affiché:
  • 25 (degrés Celcius) pour temperature()
  • 44 (humidité relative) pour humidity()
L'autre gros morceau, c'est l'installation de MicroPython et la configuration du module.

ESP8266 avec MicroPython
La première étape est de placer le Firmware MicroPython sur un ESP8266.
Nous ne nous étendrons pas sur cette partie du sujet (pas encore).
En attendant, le tutoriel "How To Load MicroPython on a Board" fait très bien l'affaire.
C'est les possesseur de machine Linux et Mac qui aurons la vie facile :-)

RShell
Le deuxième étape est d'utiliser RShell. C'est un outil développer par le créateur de WiPy. RSheel est un outil interactif (en ligne de commande) qui permet de faire du transfert de fichier avec un MicroPython, édition de fichier et session REPL via une simple connexion série.
C'est tout simplement magique même si cela demande un peu d'entraînement.
Dans le cas présent, RShell nous permettra de copier un fichier boot.py pour se connecter automatiquement sur notre routeur WiFi (en employant le SSID et le Mot de passe).

Dans rshell, l'ESP8266 sera vu comme une carte pyboard.
Pour accéder à l'espace de stockage de la carte il faudra utiliser le préfix "/pyboard". Ainsi /pyboard/main.py permet d'accéder au fichier main.py sur l'ESP8266.
Sans le préfix "/pyboard", le fichier sera considéré comme un fichier local du pc.

Notre ESP8266 en MicroPython est accessible sur le port série /dev/ttyUBS0 (nous utilisons Linux).
Nous utilisons donc la commande rshell suivante depuis un terminal pour lancer un rshell interactif avec l'ESP8266:

rshell --port /dev/ttyUSB0 --baud 115200 --buffer-size 128 --editor nano

le paramètre "editor" permet de fixer l'éditeur de texte à utiliser.
C'est pratique car la commande  "edit /pyboard/boot.py" saisie dans rshell permet:
  1. de télécharger boot.py de l'ESP8266, 
  2. puis l'éditer localement avec nano (éditeur de texte)
  3. et pour finir synchroniser les changements sur l'ESP8266 après avoir quitté l'éditeur.
le paramètre "buffer-size" est essentiel pour l'ESP8266. Il limite la taille des échanges via le port série. Par défaut, le buffer est de 512 octets... très bien pour la MicroPython Pyboard mais beaucoup trop pour l'ESP8266.
Cela corrompt rapidement l'échange de donnée... et j'ai souvent eu l'espace de stockage fichier (la flash) corrompu sur l'ESP8266. Donc --buffer-size 128 !!

Le fichier boot.py

Voici un fichier boot.py dans lequel vous devez placer votre SSID (identifiant WiFi) et mot de passe WiFi. C'est lui qui gère la connexion WiFi. N'oublier pas de modifier les paramètre Mon_SSID_WiFi et Mon_mot_de_passe_WiFi

def do_connect():
    import network
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('connecting to network...')
        wlan.connect("Mon_SSID_WiFi", "Mon_mot_de_passe_WiFi")
        while not wlan.isconnected():
            pass
    print('network config:', wlan.ifconfig())

do_connect()

import gc
import webrepl
webrepl.start()
gc.collect()

N'oubliez de laisser une ligne vide en fin de fichier.

Utiliser rshell pour copier le fichier sur l'ESP8266
Vous pouvez le copier assez facilement sur l'ESP8266 via la liaison série (sur /dev/ttyUBS0 ) grâce aux commandes rshell suivante (oui, il faut installer et utiliser rshell... prenez le temps... ce sera super pratique à l'avenir).

Commandes rshell:
  • rm /pyboard/boot.py
  • cp boot.py /pyboard/boot.py
La deuxième commande rshell permet de copier le fichier local "boot.py" vers l'ESP8266 (/pyboard/boot.py).

Redémarrer votre ESP8266
C'est le moment de redémarrer votre ESP8266. Le mieux c'est de le débrancher et de le rebrancher.
Pour les initiés, vous devez savoir qu'un soft-reboot (Ctrl-D) ne convient pas à l'initialisation de la connexion WiFi + WebRepl.

Si tout se passe bien, vous devriez voir apparaître votre ESP8266 sur votre réseau WiFi. Son nom commence par "ESP_" suivit de la fin de son adresse MAC.

Trouver son ESP8266 sur le réseau
Vous pouvez utiliser les informations disponibles sur votre Box-WiFi ou retournée par l'utilitaire fing ou encore nmap.
Cela vous permet d'avoir soit son adresse IP, soit son nom d'hôtes sur le réseau.

Télécharger le client WebRepl
En vous rendant sur le github suivant, vous pourrez télécharger le client WebRepl.

Il vous suffira d'ouvrir le fichier webrepl.html dans votre navigateur internet (FireFox dans notre cas) pour démarrer le client.

Vous avez l'opportunité de démarrer WebRepl depuis une session interactive.

Etablir une session WebRepl
Pour le reste, vous n'avez plus qu'a saisir l'adresse IP (ou le nom) de votre ESP8266 dans l'interface WebRepl.

WebRepl permet d'établir une connexion REPL par l'intermédiaire d'une interface HTTP. C'est simple et efficace.

A noter qu'a la toute première connexion, vous devrez initialiser le mot de passe qui sécurise la connexion... puis vous reconnecter.



Vous pouvez maintenant saisir vos commandes d'essais, envoyer un fichier (ou en téléverser un).

C'est un long parcours... peut être un peu escarpé (il y a beaucoup de choses nouvelles)... mais avec beaucoup de savoir à la clé.

Happy Electronic Hacking
Dominique