Blog ENI : Toute la veille numérique !
💥 Un livre PAPIER acheté
= La version EN LIGNE offerte pendant 1 an !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. MicroPython et Pyboard
  3. Prise de contrôle
Extrait - MicroPython et Pyboard Python sur microcontrôleur : de la prise en main à l'utilisation avancée
Extraits du livre
MicroPython et Pyboard Python sur microcontrôleur : de la prise en main à l'utilisation avancée
3 avis
Revenir à la page d'achat du livre

Prise de contrôle

Installer une carte MicroPython

À proprement parler, les cartes MicroPython ne requièrent pas d’installation de logiciel spécifique sauf le support du pilote USB-série sous Windows et la gestion des droits d’accès sous Linux. 

1. Sous Windows

Lorsque la carte Pyboard est branchée sur Windows par l’intermédiaire du port USB, celle-ci est reconnue comme un lecteur USB et expose les fichiers présents sur la carte.

Lorsque la Pyboard est branchée pour la première fois sur un ordinateur Windows, celui-ci détecte le périphérique et installe les pilotes.

images/05RI03A.png

Installation automatique de la Pyboard comme un lecteur USB

À ce stade, seul le support « périphérique de stockage de masse » (MSC, Mass Storage) est pris en charge par le système d’exploitation. Il permettra de voir les fichiers présents dans la mémoire flash du microcontrôleur.

Par contre, le support de la communication série « Pyboard Virtual Comm Port » n’est pas encore pris en charge, il faudra poursuivre l’installation du périphérique série.

Le système de fichiers présent dans la mémoire flash de la Pyboard n’est accessible via la connexion USB que lorsqu’il n’y a pas de carte microSD branchée sur la Pyboard. Si une carte microSD est présente sur la Pyboard, alors seul le contenu de la carte microSD sera exposé par la Pyboard comme périphérique de stockage de masse.

En explorant la carte avec le gestionnaire de fichiers, celle-ci expose un fichier pybcdc.inf qui est utilisé pour installer le pilote du port série.

images/05RI03.png

Système de fichiers exposé par la carte MicroPython Pyboard

Pour commencer, il faut ouvrir le gestionnaire de périphériques et localiser l’entrée correspondant au périphérique non supporté, puis utiliser le menu contextuel (clic gauche) et sélectionner l’entrée Mettre à jour le pilote.

images/05RI04.png

Mettre à jour le pilote de « Pyboard Virtual Comm Port ».

Cela ouvre la boîte de dialogue permettant de faire une recherche de pilotes en recherchant les pilotes manquants sur l’ordinateur.

images/05RI04A.png

Sélection du type de recherche de pilotes

Ce qui ouvre...

Communiquer avec MicroPython

Comme expliqué dans le premier chapitre, la carte Pyboard expose deux interfaces dès lors qu’elle est connectée sur le port USB d’un ordinateur.

images/05RI01.png

Interfaces de communication entre ordinateur et carte MicroPython

Ces interfaces permettent d’interagir de deux façons différentes avec la carte :

  • Échange de fichiers avec la carte puisque celle-ci se présente comme un périphérique de stockage de masse (comme une clé USB, un disque flash).

  • Saisir des commandes Python sur la carte par l’intermédiaire du port USB-série. À l’aide d’utilitaires appropriés, cette interface permet également d’échanger des fichiers avec la carte.

images/05RI02.png

Les deux principales façons d’interagir avec la carte

Le cas de la Pyboard-D

Les deux interfaces de base MicroPython sont également exposées de façon identique par une carte Pyboard-D.

À celles-ci vient s’ajouter une interface WebREPL également disponible sur les cartes ESP8266 / ESP32 flashées avec le firmware MicroPython. Cette interface WebREPL permet d’utiliser une connexion réseau (via WiFi) pour saisir des commandes.

Ce point sera abordé plus en détail dans la suite de ce chapitre (cf. section WebREPL).

Utiliser le périphérique de stockage

Cela tombe bien, tous les systèmes d’exploitation disposent d’un navigateur de fichiers. Il est donc très facile de voir, créer, modifier ou même copier des fichiers directement sur la carte.

Il est même possible d’utiliser un simple éditeur de code depuis un ordinateur pour modifier le contenu d’un fichier sur la carte.

La procédure ci-dessous se propose de modifier manuellement le fichier main.py de la carte pour faire clignoter dix fois la LED jaune au démarrage de la carte. En effet, le contenu de main.py est exécuté automatiquement au démarrage s’il est présent sur la carte.

Ouvrez le fichier main.py de la carte en utilisant le navigateur de fichiers et le menu contextuel. L’éditeur par défaut du système d’exploitation convient généralement parfaitement (d’autres outils sont aussi proposés dans le chapitre dédié à l’environnement de travail (cf. Environnement de travail - Éditeur de texte).

images/05RI18.png

Ouvrir un fichier avec l’éditeur de texte

Au commentaire près, le fichier main.py disponible sur la carte est complètement vide.

images/05RI19.png

Contenu du fichier main.py présent sur la carte Pyboard

Saisissez le code suivant dans le fichier main.py . Celui-ci va changer dix fois l’état de la LED orange...

REPL : l’invite en ligne de commande

REPL est l’invite de commandes MicroPython (>>>) accessible sur le port série exposé par la Pyboard (port USB-série). REPL est l’acronyme de Read-Eval-Print-Loop directement tiré de son fonctionnement et signifiant « boucle de lecture, évaluation et affichage ».

L’invite de commandes REPL permet donc de saisir des instructions Python sur une console série, instructions interprétées directement par la machine virtuelle MicroPython.

Pour exploiter REPL, il est nécessaire d’utiliser un logiciel terminal comme PuTTY ainsi que l’identification du port série associé à l’interface USB (cf. Environnement de travail - Console série et REPL).

La capture suivante utilise un logiciel terminal pour interagir avec la Pyboard. Il est possible d’y voir la définition d’une fonction dit( texte ) qui est, par la suite, appelée avec un argument.

images/05RI23.png

Exemple de session REPL

Une invite de commandes REPL débute par >>> et la commande est exécutée dès que le retour clavier est pressé. C’est le cas de l’appel dit( ’Bonjour’ ) qui exécute directement l’appel de fonction.

À noter que lorsqu’une instruction s’étend sur plusieurs lignes, l’invite >>> est remplacée par ... (voir déclaration def dit( texte ):). Les règles d’indentation de Python sont bien entendu de rigueur. Le bloc est terminé et évalué lorsqu’une ligne vide (sans indentation) est saisie sur l’invite ....

À noter également que la session REPL partage le contexte d’exécution de la machine virtuelle Python de la Pyboard. Cela signifie qu’il est possible de créer des variables, des objets sur l’invite REPL, éléments qui pourront être utilisés dans d’autres commandes. Il est également possible de charger des modules à la volée avec l’instruction d’importation (ex. : from machine import Pin ).

Dans le même ordre d’idée, il est également possible d’interroger les variables et objets créés par le script exécuté sur la Pyboard (comme main.py).

REPL...

REPL via Bluetooth

Le module os contient une fonction appelée dupterm() qui permet de dupliquer le terminal REPL sur une interface série.

Cette assertion pourtant anodine cache pourtant une fonctionnalité captivante, car elle permet de prendre le contrôle d’un projet (ex. : un robot) ou d’établir une session REPL par l’intermédiaire d’une connexion sans fil.

1. À propos de Bluetooth

L’approche proposée ici s’appuie sur un module exploitant le Bluetooth classique (et non Bluetooth Low Energy, aussi appelé BLE).

Bien que très pratique pour des raisons de confort, il faut bien reconnaître que l’interconnexion de matériel Bluetooth peut également devenir de véritables casse-tête, car cela dépend de nombreux paramètres : la compatibilité Bluetooth matérielle, le système d’exploitation (Windows, Android, Linux, Mac) ainsi que sa version, le support logiciel sur l’OS (car un module peut très bien être reconnu, appairé, mais le port série pas ouvert)...

Une fois en place et configurée de façon appropriée, cette solution peut être considérée comme pérenne et offrira un confort d’utilisation hors du commun.

L’auteur n’est pas un grand fan de la technologie Bluetooth qui, selon les circonstances, peut offrir trop d’imprévus/d’incertitudes lors d’un appairage avec un nouveau périphérique hôte (ex. : passer du PC au smartphone).

2. Module Bluetooth série

Un module Bluetooth série comme le HC-05, simple à mettre en œuvre, permet d’établir une liaison série avec la Pyboard via Bluetooth.

Il existe de nombreux modules HC-05 sur le marché, il faut veiller à disposer d’un module compatible avec une logique 3,3 V. À noter que la carte Pyboard est tolérante 5 V.

Attention cependant à ne pas opter pour un module Bluetooth Low Energy (ou BLE), car ces derniers nécessitent une phase de configuration logicielle là où le HC-05 se comporte comme un simple tunnel série via Bluetooth.

Voici un module HC-05 typique. L’ordre et le nombre de broches peut varier d’un produit à l’autre, veillez donc à...

RShell

RShell est un utilitaire Python écrit par Dave Hylands. RShell propose une interface utilisateur similaire au shell Linux et accepte des commandes de type shell (ls, cp, cd, cat, mkdir...) permettant de transférer des fichiers depuis/vers une carte MicroPython, d’afficher et éditer le contenu de fichiers, la prise en charge des sessions REPL depuis RSHell, etc.

RShell est capable d’exploiter les connexions série et/ou Telnet pour communiquer avec une ou plusieurs cartes MicroPython.

Bien qu’il existe d’autres utilitaires, la maîtrise d’un outil comme RShell apporte de réels avantages. C’est d’ailleurs l’outil utilisé quotidiennement par l’auteur (avec l’éditeur Atom IDE) pour réaliser ses développements MicroPython.

RShell utilise Python 3 et s’installe à l’aide de l’utilitaire pip3. Saisissez la commande suivante sur le Raspberry Pi pour installer RShell.

sudo pip3 install rshell 
images/05RI54.png

Installation de RShell

RShell accepte de nombreux paramètres en ligne de commande. Les plus importants sont :

rshell --port nom_port --baud débit --buffer-size taille_buffer 
      --editor éditeur 
  • nom_port : périphérique série (/dev/ttyUSBx) sur lequel est connecté une carte MicroPython. RShell établira immédiatement la communication avec la carte.

  • débit : permet de fixer le débit de la communication (en bauds).

  • taille_buffer : permet de modifier la taille de la mémoire tampon utilisée durant les échanges de données avec la carte MicroPython.

  • éditeur : permet de mentionner l’éditeur à utiliser avec la commande edit de RShell. Nano est un éditeur simple d’emploi pouvant être utilisé dans une session terminal.

La commande suivante, saisie dans le terminal, démarre RShell en enregistrant la carte MicroPython présente sur le périphérique /dev/ttyUSB0

rshell --port /dev/ttyUSB0 --baud 115200 --editor nano 

1. Ligne de commande RShell

Une fois RShell démarré, l’invite de commandes est modifiée et indique le répertoire courant (soit /home/pi dans le cas présent).

images/05RI55.png

Ligne de commande RShell

RShell adopte la notation du système de fichiers afin de distinguer...

upy-shell

upy-shell est un petit interpréteur de commandes de type shell destiné à fonctionner sur la plateforme MicroPython. Ce microshell chargé dans la session REPL permet d’avoir quelques commandes bien utiles comme ls, cd, rm, cat, etc. Ces commandes pouvant remplacer avantageusement les différentes manipulations os.listdir() et with open(’main.py’, ’r’ ) as f destinées à l’exploration des fichiers.

Après avoir copié le script shell.py et la dépendance cmd.py sur la carte MicroPython, le shell peut démarrer à l’aide de import shell (ou réinvoquer le shell avec shell.run()).

images/05RI64.png

Utilisation de upy-shell sur la plateforme MicroPython

Si, de prime abord, cet utilitaire ne fait pas partie des outils indispensables, il pourra se montrer très utile dans certaines situations ou comme base d’un système Python autonome.

upy-shell est disponible sur : https://github.com/dhylands/upy-shell/blob/master/shell.py

Et la dépendance, la classe générique Cmd qui permet de réaliser des interpréteurs de ligne de commande, est quant à elle disponible sur :

WebREPL

WebREPL concerne surtout les systèmes MicroPython équipés d’une interface réseau (WiFi ou filaire).

Cela concerne principalement les plateformes Pyboard-D, ESP8266, ESP32 ou Pyboard équipées d’une interface WiFi ou Ethernet.

Le sujet concernant l’ESP8266 (et forcément ESP32) est déjà traité dans le livre « Python, Raspberry Pi et Flask » paru aux Éditions ENI (cf. ESP8266 sous MicroPython, WebREPL), cette section s’attarde donc sur la Pyboard-D.

images/04bRI06.png

Interface WiFi/Bluetooth de la Pyboard-D

WebREPL est une fonctionnalité avancée de MicroPython sur ESP8266, également présente sur la Pyboard-D, qui permet d’initier une session REPL par l’intermédiaire d’une interface web exécutée au sein d’un navigateur Internet. WebREPL s’appuie sur le « service Python » WebREPL qu’il faut activer sur le microcontrôleur (sécurité oblige !). Ce service expose un Websocket permettant à la partie cliente de WebREPL (le navigateur Internet) d’interagir avec la plateforme MicroPython.

L’activation du service WebREPL s’effectue via une session REPL, donc via la liaison série. L’activation du service permet de définir le mot de passe qui protégera ensuite les sessions WebREPL accessibles via l’interface WiFi.

Le client WebREPL se présente comme suit :

images/03RI60.png

Interface WebREPL

L’interface WebREPL propose les options suivantes :

1. Zone de saisie de l’adresse de la carte MicroPython. Cette adresse est préfixée par « ws:/ » car il s’agit d’une connexion websocket. Le suffixe « :8266 » indique le numéro de port à utiliser (8266 en clin d’œil à la plateforme ESP8266). L’adresse IP 192.168.4.1 est l’adresse par défaut d’une interface WiFi MicroPython démarrant en mode point d’accès (AP). Si la carte MicroPython est connectée sur le réseau WiFi domestique, alors l’adresse IP de la carte sur ce réseau domestique doit être utilisée. Celle-ci...

Support WiFi sur la Pyboard-D

Le support du réseau WiFi sur les cartes MicroPython passe par le module WLAN.

Si les ESP8266 sous MicroPython disposent d’une interface WiFi active par défaut, ce n’est pas le cas de la Pyboard D, ce que démontrent les instructions suivantes saisies sur une session REPL d’une carte fraîchement mise sous tension.

>>> from network import WLAN 
>>> wlan=WLAN() 
>>> wlan 
<BCM43x STA down 0.0.0.0> 

L’interface WiFi est en mode STA (station) pour se connecter sur un réseau WiFi existant. Cette interface est connue comme « down » donc inactive et il n’y a pas d’adresse IP disponible.

La première chose à faire est donc d’enregistrer la carte sur le réseau WiFi domestique avant de pouvoir s’y connecter.

Connaître le nom d’hôte de la carte est un élément important puisqu’il permettra de localiser facilement celle-ci sur un réseau local (mode station) ou le nom du réseau WiFi créé lorsque la carte se comporte comme un point d’accès (mode AP pour Access Point).

1. WiFi et réglementation locale

Différentes régions du monde imposent des réglementations concernant la puissance d’émission et les canaux utilisables sur une interface WiFi.

La carte Pyboard-D prend ce paramètre...

Mode station (STA)

Les différents appareils WiFi (ordinateurs, smartphones, tablettes, etc.) se comportent généralement en mode station (aussi dit STA). Dans ce mode, l’appareil est un client du réseau et se connecte sur un point d’accès (dit AP pour Access Point) qui, sur les réseaux WiFi domestiques, prend généralement la forme du modem-routeur fourni par l’opérateur d’accès Internet. Ce point d’accès (alias le « modem-routeur ») prend en charge la gestion du réseau local, mais aussi toute une série de services comme la résolution de nom, le routage des requêtes vers Internet, protection du réseau domestique (pare-feu), voire parfois des fonctionnalités avancées telles que « box média », etc.

La Pyboard-D, comme tous les autres périphériques d’un réseau WiFi, se connecte en mode station.

images/05RI99.png

Divers clients en mode station

Le mode station permet à la Pyboard-D de se connecter sur un réseau WiFi existant. Il est ainsi possible d’avoir plusieurs Pyboard-D cohabitant sur le réseau local et d’autres objets IoT (Internet of Things, Internet des objets) donc tous accessibles depuis n’importe quel ordinateur présent sur le même réseau.

L’utilisation du réseau local s’avère également plus appropriée dans le cadre d’un projet IoT car cela permet de contrôler un objet à distance ou de lui donner la possibilité de publier des informations vers un service de supervision, de faire une publication vers un broker MQTT (service de messagerie IoT) également présent sur le réseau local...

1. Mode STA et scan réseau

Les commandes suivantes, saisies sur une invite REPL, permettent de détecter les réseaux WiFi à portée de la carte MicroPython.

01: from network import * 
02: wlan = WLAN( STA_IF )  
03: wlan.active( True ) 
04: for wifi in wlan.scan(): 
05:    print( wifi ) 

Ligne 1 : permet d’importer les classes et constantes nécessaires.

Ligne 2 : crée un objet WLAN permettant d’interagir avec l’interface WiFi de la Pyboard-D. Le paramètre STA_IF indique que l’interface doit être configurée...

Mode point d’accès (AP)

Le point précédent a couvert le fonctionnement de la Pyboard en mode station (client sur le réseau).

Le module WiFi de la Pyboard-D peut également fonctionner en mode AP (Access Point signifiant « Point d’accès »). Dans un tel mode, le module WiFi crée son propre réseau WiFi sur lequel viennent se connecter ordinateurs, smartphones, tablettes, etc.

images/05RI98.png

Pyboard-D en mode point d’accès

Le mode point d’accès (AP) n’est pas le mode de fonctionnement le plus intéressant à exploiter, mais il peut s’avérer très utile dans un certain nombre de circonstances :

  • Créer un mode de configuration permettant d’initialiser des paramètres avant une mise en service. En effet, le mode AP, permet de connecter un ordinateur, un smartphone ou une tablette pour procéder à la phase de configuration à l’aide d’un simple navigateur Internet connecté directement sur le réseau créé par la Pyboard-D.

  • Créer un point d’accès pour la collecte d’informations de divers capteurs WiFi (comme des ESP8266) et pérenner le stockage sur carte microSD ou module eMMC.

  • Créer un réseau WiFi maillé en combinant les modes AP et STA de façon à pouvoir couvrir une plus grande surface.

Le nom du réseau...