Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
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. MicroPython Pyboard
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

MicroPython Pyboard

Introduction

Il est maintenant temps de faire connaissance avec les aspects matériels de la carte MicroPython Pyboard, la plateforme de référence MicroPython.

MicroPython et la plateforme Pyboard sont à la croisée de deux univers. D’un côté, il y a les aspects relatifs à la programmation Python et, de l’autre, les aspects d’ordre technique permettant de prendre le contrôle d’interfaces matérielles.

La carte Pyboard est avant tout une carte électronique et il convient d’en connaître les caractéristiques et limitations techniques, histoire de ne pas détruire la plateforme dès le premier branchement. Ces caractéristiques techniques varient d’une plateforme à l’autre même si les principes fondamentaux restent les mêmes.

Les aspects relatifs à la programmation MicroPython sur plateforme microcontrôleur sont transposables d’une plateforme MicroPython à l’autre. L’interface de programmation (dite API pour Application Programming Interface) permettant d’accéder au niveau matériel a été formalisée il y a plusieurs années. Ainsi, l’activation d’une broche en sortie sur la carte Pyboard est identique à l’activation d’une broche en sortie sur la carte WiPy ou ESP8266. D’où l’intérêt...

Présentation de la Pyboard

1. MicroPython

MicroPython est une implémentation de Python 3 fonctionnant en Bare Metal sur des microcontrôleurs offrant un certain seuil de performance. Il permet de faire de la programmation Python sur microcontrôleur, offre un système de fichiers interne et une interface de programmation (API) pour manipuler les éléments matériels du microcontrôleur (entrée/sortie, bus, etc.).

images/03RI01.png

Principe de fonctionnement de MicroPython.

Ces caractéristiques de MicroPython sont abordées dans le premier chapitre (cf. Qu’est-ce que MicroPython ? - Présentation de MicroPython).

2. MicroPython Pyboard

MicroPython Pyboard est la toute première plateforme supportant MicroPython. Basé sur un microcontrôleur STM32F4 de STMicroelectronics, celui-ci offre de nombreux GPIO, fonctionnalités matérielles et puissance de traitement faisant que, aujourd’hui encore, cette plateforme reste une référence du domaine MicroPython.

a. En cas de problème

À moins de manipulation électrique/électronique inappropriée, il est virtuellement impossible de détruire une carte Pyboard.

Il est cependant possible d’endommager le système de fichiers MicroPython (débrancher la carte durant une opération d’écriture), d’avoir une boucle infinie consumant tout le temps machine ou de réaliser par inadvertance une mise à jour avec un firmware incompatible.

Pas de panique, la carte prévoit un mode Safe Boot (mode sans échec) et Reset Factory (réinitialisation d’usine) qu’il est possible d’activer au démarrage de la carte Pyboard (cf. Annexes - Safe Mode et Reset Factory).

Bien que stable, MicroPython est en constante évolution. La version 1.9.4 a, par exemple, ajouté le support d’asyncio utilisé, entre autres, avec les ESP8266 sous MicroPython dans le livre « Python, Raspberry Pi et Flask » (paru aux Éditions ENI). Au moment de la relecture de cet ouvrage, la version est passée à 1.10.

Pouvoir faire une mise à jour du firmware MicroPython peut parfois être nécessaire. Cette mise à jour ne requiert pas de matériel particulier, uniquement un câble USB et le logiciel adéquat....

La Pyboard en détail

Les éléments matériels de la plateforme MicroPython Pyboard ont été abordés en début de chapitre.

Les graphiques ci-dessous reprennent les informations techniques utiles auxquelles se joindront les informations détaillées du brochage dans la section suivante.

1. Interfaces matérielles

images/03RI03.png

Éléments de la carte

Cet ouvrage ne reprend pas le schéma technique de la carte Pyboard, il se concentrera plutôt sur un formalisme nettement plus accessible au néophyte. Ce schéma technique reste néanmoins facilement accessible sur MicroPython.org ou dans les ressources du dépôt GitHub associé à cet ouvrage : https://github.com/mchobby/pyboard-driver/tree/master/ressource/schema (voir le sous-répertoire ressource/schema/).

images/03RI03b.png

Disponibilité du schéma

a. LED

La carte propose une interface utilisateur rudimentaire directement raccordée sur certaines broches du microcontrôleur.

images/03RI19B.png

LED utilisateurs

La vue schématique ci-dessous reprend les différents branchements correspondant à l’interface utilisateur. À noter que les LED utilisateur sont également utilisées durant le traitement du démarrage sans échec et la réinitialisation d’usine (cf. Annexes - Safe Mode et Reset Factory).

images/03RI19.png

Branchement correspondant à l’interface utilisateur.

Sur le schéma, les LED rouge, verte, jaune, bleue sont respectivement branchées sur les broches P5, P4, P3, P2. L’annotation PA13 correspondant à la LED rouge renseigne la sortie sur le port microcontrôleur (port A sortie #13) et n’a vraiment d’intérêt que si l’on programme en C ou en assembleur.

Le lecteur attentif remarquera que la résistance de la LED bleue est singulièrement plus basse (220 Ohms) que les autres couleurs utilisant une valeur standard de 560 Ohms pour un fonctionnement sous 3,3 V. Ces résistances servent avant tout à limiter le courant dans la LED et sont donc aussi le siège d’une chute de tension puisque ce courant les traverse. Ainsi, la résistance doit être calculée pour ne pas provoquer une chute de tension trop importante, sinon la LED ne s’allumera pas ! En effet, dans ce cas, elle sera sous un seuil...

Pyboard : tension logique et courant

La carte MicroPython Pyboard fonctionne en logique 3, 3V avec une tolérance 5 V pour les broches en entrée (attention aux exceptions !).

1. Niveau logique et tensions

  • En sortie : le niveau logique est à 3,3 V lorsque la broche est au niveau HAUT, à 0 V lorsqu’elle est au niveau BAS.

  • En entrée : la broche est considérée au niveau HAUT à partir de 2 V jusqu’à 3,3 V (et jusqu’à 5 V pour les broches tolérantes). Toute tension inférieure à 0,8 V produira un niveau BAS.

2. Niveau logique et Python

Durant la programmation sous MicroPython :

  • Un niveau HAUT correspond aux expressions Python 1, True ou toute autre expression Python évaluée comme vraie. Un entier supérieur à zéro produit un résultat True sous Python.

  • Un niveau BAS correspond aux expressions Python 0, False.

3. Tolérance 5 V

Les broches de la carte MicroPython Pyboard sont tolérantes 5 V à l’exception des broches X5 et X6.

Le bus SPI présent sur le Skin X ne peut pas être utilisé en 5 V !

4. Courants maximum, source et sink

Le microcontrôleur est prévu pour conduire un courant maximum de 250 mA (sur sa broche d’alimentation VDD). Attention, une partie de ce courant est nécessaire au fonctionnement du microcontrôleur lui-même....

Les fonctions alternatives sur la Pyboard

Les broches de la carte Pyboard peuvent être utilisées comme des entrées/sorties numériques. Une utilisation de base commune à TOUS les microcontrôleurs.

Cependant, ces broches peuvent également offrir une ou plusieurs fonctionnalités alternatives, des fonctionnalités très utiles décrites ci-dessous.

1. Sortie PWM

Une sortie PWM est capable de générer un signal carré, répétitif, à une fréquence donnée et dont il est possible de fixer la largeur d’impulsion. Cette longueur d’impulsion est aussi appelée cycle utile du signal ou « duty cycle » en anglais.

PWM est l’acronyme de Pulse Width Modulation signifiant modulation de largeur d’impulsion. Son usage est très répandu, il servira aussi bien à contrôler l’intensité d’une LED qu’à contrôler l’angle d’un servomoteur chez les modélistes ou, plus rarement, contrôler un périphérique de puissance (vitesse de moteur, intensité d’un système d’éclairage).

Dans l’exemple suivant, un signal PWM est généré à partir d’un signal de 50 Hz et donc d’une période de 20 ms (1/f  = 1/50 = 0,02 sec).

Pour un cycle utile de 25 %, l’impulsion est de 5ms toutes les 20 ms. À 90 % de cycle utile, l’impulsion dure 18 ms sur les 20 ms de la période.

Ainsi, un cycle utile de 0 % équivaut à un signal au niveau bas tandis qu’un cycle utile de 100 % produit un signal équivalent à un niveau haut.

images/03RI30.png

Génération de signal PWM et cycle utile

Les servomoteurs, très appréciés par les hobbyistes, disposent d’un asservissement permettant de fixer un angle arbitrairement entre 0 et 180°. Idéal pour commander la direction d’un véhicule télécommandé, une petite trappe ou une animatronique.

images/03RI31.png

Servomoteur

Ces moteurs sont commandés par un signal PWM dont l’impulsion varie entre 0,5 ms pour un angle de 0° à 2,5 ms pour 180°. Il s’agit d’un cas particulier du signal PWM où le cycle utile exploité est relativement faible...

Brochage de la Pyboard

Les images ci-dessus reprennent le brochage de la Pyboard ainsi que les fonctions alternatives disponibles. Certaines fonctions alternatives sont représentées sous forme de graphique.

images/03RI25B.png

Légende des fonctions alternatives

Comme précisé précédemment, la carte Pyboard est divisée de façon logique à mi-hauteur. Cela permet de dissocier le Skin Y dans la partie supérieure (où tous les noms de broches commencent par Y) du Skin X dans la partie inférieure.

images/03RI41B.png

Découpage symétrique des Skin X et Skin Y

En observant attentivement la découpe des Skin X et Skin Y, il est déjà possible d’identifier la symétrie de numérotation. Ainsi, en faisant faire une rotation de 180° (un demi-tour) au Skin Y, il est possible de voir la superposition de numérotations et broches d’alimentation (RST, GND, 3V3, V+).

Cette symétrie se prolonge dans les fonctionnalités, puisqu’une partie des fonctions alternatives sont également proposées de façon symétrique.

images/03RI41c.png

Symétrie d’une partie des fonctions alternatives

Cette particularité permet de rapidement adapter du code pour fonctionner soit sur la partie supérieure de la Pyboard, soit sur la partie inférieure (en opérant une rotation physique de 180° aux connecteurs.

1. Partie droite

Toutes...

Brochage avancé et timers

Les graphiques ci-dessous reprennent le brochage de la Pyboard avec des informations avancées telles que le nom des broches du microcontrôleur, les timers et canaux associés.

Ces informations seront utiles dès lors que l’utilisateur voudra faire de la programmation avancée en manipulant les timers ou en saisissant des instructions en assembleur en utilisant le décorateur Python @viper.

images/03RI45.png

Légende

images/03RI46.png

Partie droite de la Pyboard (carte SD vers le haut)

images/03RI47.png

Partie gauche de la Pyboard (carte SD vers le haut)

images/03RI48.png

Partie basse de la Pyboard

1. Broches du STM32

Pourquoi mentionner les broches du microcontrôleur STM32 dans la documentation ?

Les entrées/sorties d’un microcontrôleur sont des bits regroupés ensemble sur des « ports ». La manipulation des entrées/sorties d’un microcontrôleur se résume grossièrement par la manipulation de bits sur des registres du microcontrôleur. Des opérations binaires rébarbatives qui peuvent être confortablement évitées à l’aide de MicroPython mais d’une rapidité foudroyante lorsque ces opérations sont réalisées en assembleur.

Certaines opérations requièrent un temps de traitement très court, court au point que seul l’assembleur puisse répondre aux contraintes de temps imposées. La connaissance précise des broches (port et numéro de bit) du microcontrôleur est donc nécessaire dans ce cas de figure. La relation entre les broches MicroPython (Y12) et la broche du microcontrôleur (B1, port B bit 1) doit donc aussi pouvoir être établie.

La capture des signaux infrarouge d’une télécommande fait partie de ces cas de figure où le temps de traitement doit être particulièrement court (signal à 38 KHz injecté sur un signal pulsé d’une période de 2 ms).

images/03RI49.png

Signal de télécommande infrarouge

Un autre cas de figure où le temps de traitement est crucial est la gestion de l’accélération de multiples moteurs pas-à-pas.

Après les optimisations MicroPython de base, la seule façon d’accélérer certaines portions de code est de recourir à l’assembleur...

Comment détruire sa Pyboard en sept leçons ?

Il n’est pas question d’expliquer comment détruire une Pyboard à coups de marteau, de foreuse ou en la plongeant dans un verre d’eau.

Derrière ce titre en boutade se cachent des erreurs plutôt courantes qui peuvent être commises trop vite par manque d’expérience. Une fraction de seconde plus tard, la Pyboard a rendu l’âme.

1. Placer une broche directement à la masse

Il y a de nombreuses façons de faire un raccordement accidentel à la masse (le plan de masse des cartes est généralement le plus important en taille). Un faux contact, des fils torsadés qui se détachent, une modification de raccordement à la hâte alors que le projet est sous tension augmentent drastiquement les risques d’erreurs.

images/03RI50.png

Exemple de contact accidentel avec un plan de masse

Si par malchance la broche concernée (Y9 dans l’illustration) est en sortie au niveau HAUT (+3,3 V) alors un courant de court-circuit circulera entre le +3,3 V du régulateur et la masse du régulateur en passant par la broche.

En dépassant le courant maximum de la broche, la température des jonctions (à l’intérieur du microcontrôleur) augmentera drastiquement et entrera en fusion. Dans le meilleur des cas, seule la broche est perdue, mais ce cas très optimiste est assez rare !

Une règle d’or : ne jamais travailler sous tension, éviter la précipitation et toujours vérifier ses branchements deux fois avant de remettre sous tension.

2. Brancher des GPIO ensemble

En cours d’expérimentation et d’essai, il peut arriver que plusieurs GPIO du microcontrôleur finissent par être branchés directement ensemble par l’intermédiaire du circuit.

L’exemple précédent a été réexploité pour démontrer un cas de destruction dans ce contexte bien précis.

images/03RI51.png

Destruction par mise en contact de GPIO

Les broches Y9 et X7 sont donc en sortie pour commander les relais. Dans cet exemple, en débranchant l’entrée IN2, celle-ci est venue en contact avec la broche IN4 alors que le système était sous tension.

Si la sortie X7 est au niveau HAUT et la sortie Y9 au niveau BAS, alors...