Programmer un microcontrôleur avec le langage Python :

Les projets de programme pour la réforme 2019 du lycée font apparaître  clairement et à plusieurs reprises la nécessité d'introduire des éléments de programmation avec le langage Python ainsi que l'utilisation d'un microcontrôleur

Cette nouveauté dans les programmes de seconde et de première se retrouvera très certainement aussi dans le programme de Terminale.

Nous vous proposons dans les onglets ci-dessous de découvrir ce qu'est un microcontrôleur, une carte microcontrôlée et comment l'utiliser avec le langage Python pour réaliser de petites applications accessibles au lycée, tant du point de vue matériel que logiciel :

Le microcontrôleur :

Le microcontrôleur

Si le terme de microcontrôleur est bien moins connu que celui de microprocesseur, ce composant est pourtant omniprésent dans notre environnement. Ci-dessous un lien vers le diaporama réalisé pour faire découvrir ce composant.

diapo_micro.png

A retenir : dans un seul et même circuit intégré, appelé "microcontrôleur" sont embarqués :

  • un microprocesseur (initialement sur 8 bits ... bien souvent sur 32 bits maintenant)
  • de la mémoire de type RAM
  • de la mémoire non volatile pour stocker le programme (c'est l'équivalent du disque dur pour un ordinateur). Cette mémoire est maintenant reprogrammable ce qui permet de mettre à jour le programme ("firmware")
  • des ports de communication de type parallèle ou série : UART (pour la communicationRS232), USB, I2C, CAN (controller area network), Ethernet...voire même un module radio (bluetooth, wifi, zigbee...)
  • des convertisseurs analogique-numériques (CAN) ...

Le même composant peut ainsi être affecté à des tâches très différentes, et selon la complexité de l'application à réaliser, on peut choisir dans une même famille de microcontrôleurs le plus adapté.

Initialement programmés en assembleur (langage spécifique à la famille à laquelle appartient le microcontrôleur), ces composants sont le plus souvent maintenant programmés dans un langage universel de plus haut niveau tel que le C.

Rappelons qu'un programme rédigé en C sera compilé avant d'être implanté dans la cible (le microcontrôleur):

- le programme, rédigé avec un éditeur de texte est ensuite compilé avec un "cross-compilateur" pour être transformé en langage machine adapté au microcontrôleur choisi. La taille du programme obtenu à l'issue de la compilation est souvent supérieure à celle obtenue à ce que l'on aurait obtenu avec une programmation en langage d'assemblage, mais le gain en temps de développement (et en portabilité / réutilisation du code ) est tel que le C s'est imposé depuis une vingtaine d'années comme le langage de programmation de prédilection sur microcontrôleur. La fin de diaporama montre l'intérêt de la programmation en C.

L'augmentation importante de la taille mémoire disponible sur les microcontrôleurs récents permet même aujourd'hui de programmer ces composants en Python. Rappelons que Python est un langage interprété qui nécessite donc un "interpréteur" qui doit être implanté dans le système (ici le microcontrôleur) qui exécutera le code Python. La mémoire "ROM" du microcontrôleur doit donc être suffisante pour contenir :

  • l'interpréteur Python
  • le programme Python que l'on créee pour réaliser une applicattion donnée

C'est une telle solution que l'on vous propose dans les onglets suivants : utiliser une carte microcontrôlée, programmable en Python, ce qui permettra de répondre à la demande des nouveaux programmes de cette réforme 2019 :

  • utiliser un microcontrôleur
  • programmer en Python

 

 

 

Choix d'une carte microcontrôlée :

 

Pour expérimenter avec un microcontrôleur, on utilise bien souvent maintenant des cartes de développement prête à l'emploi qui permettent la (re)programmation du microcontrôleur.

On peut citer le très connu système Arduino dont la carte de développement peut accueillir une multitude de cartes additionnelles différentes (écrans tactiles ou non, modules radio etc...) :

 

arduino.png   shield_bt.png

Platine Arduino .... et ici équipée d'une carte additionnelle (un "shield") Bluetooth

On trouvera sur le net et en librairie une documentation très large de ce système Arduino, mais nous n'en dirons pas plus car :

 ... ARDUINO SE PROGRAMME EN LANGAGE C :

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
 
  This example code is in the public domain.
 */
 
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);     
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}

Une alternative intéressante, et utilisée depuis plusieurs années Outre-Manche, est fournie par la BBC sous la forme d'une carte embarquant un microcontrôleur bien plus puissant que celui présent sur la carte Arduino, ce qui lui donne la possibilité d'être programmé en Python. Il s'agit de la carte BBC Micro:Bit

 

microbit_ar.png  microbit_av.png

Face Arrière Face avant
avec "toute" l'électronique 

avec deux boutons poussoirs et

un panneau de 5x5 Leds rouges

 

Comparaison de ces deux cartes de développement :

  ARDUINO UNO BBC:MICROBIT
Microcontrôleur ATmega328P ARM Cortex M0
Architecture 8 bits 32 bits
Fréquence 16 MHz 16 MHz
Mémoire Flash 32 KB 256 KB
RAM 2 KB 16 KB
EEPROM 1 KB  
Alimentation 5 V 3,3 V
Entrées/Sorties 14 19
CAN 10 bits 10 bits
Bus série I2C, SPI,UART,USB I2C, SPI,UART,USB
Capteurs/Actuateurs    
Boutons poussoirs - 2
LEDs 1 25 (matrice 5x5)
Accéléromètre - 1
Boussole - 1
Capteur de lumière - (avec les Leds)
Capteur de T° - T° du chip
Antenne radio - 1
Programmation C Python
Documentation

Très importante

Réduite
Cartes additionnelles Très variées Beaucoup moins
Prix ~ 20 € ~ 20 €

Dans ce tableau, on a surligné en vert les avantages qu'a une carte par rapport à l'autre.

On voit au premier coup d'oeil que la carte Micro:Bit est, de base, et pour un prix équivalent, plus puissante et bien mieux équipée que la carte Arduino Uno. C'est sur ces caractéristiques et sur la possibilité de la programmer en Python que nous avons décidé de nous y intéresser.

Remarque concernant la tension d'alimentation : la diminution de la tension d'alimentation nécessaire au fonctionnement de l'électronique numérique a été un souci constant chez les fabricants de puces.  Une tension d'alimentation de 3,3 V présente l'intérêt de pouvoir alimenter le montage avec deux piles de type AA ou AAA ce qui est un gros avantage par rapport à une alimentation sous 5 V. Cela diminue effectivement le coût énergétique à l'utilisation, ainsi que l'encombrement et le poids des appareils. Il faut cependant que toute la chaîne électronique soit capable de fonctionner avec cette tension d'alimentation. Dans la liste des cartes ou composants additionnels connectables sur ces cartes de développement, il faudra veiller à la compatibilité au niveau tension. Or actuellement, du fait du fort développement du système Arduino, on trouve, dans le domaine amateur, beaucoup de composants additionnels en 5 volts.

Développer avec la carte Micro:Bit :

 

Les schémas ci-dessous résument de façon visuelle l'ensemble des ressources matérielles disponibles sur la carte BBC Micro:Bit :

MB_avantt.png.jpg

MB_Arriere.png.jpg

Le microcontrôleur, c'est la puce carrée référencée Nordic nRF51822

Plan d'étude proposé pour apprendre à maîtriser cet outil (attention ce n'est pas un cours clé en main à distribuer aux élèves, mais plutôt des éléments d'information pour découvrir BBC Micro:Bit et gagner en confiance pour se sentir à l'aise et créer ensuite ses propres activités) :

  • Démarrer : rassembler le matériel et installer le logiciel nécessaire
  • Découvrir : commencer à programmer en MicroPython quelques unes des ressources matérielles de la carte BBC Micro:Bit (afficheur, boutons poussoirs...)
  • Etendre : utiliser le connecteur d'extension pour augmenter les possibilités de la carte
  • Programmation avancée

 

Démarrer :

Côté Matériel :

Du matériel Micro:Bit est en vente notamment chez les distributeurs suivants (cités par ordre alphabétique) :

Pour démarrer, il faut au minimum : une carte Micro:Bit et un câble USB type B (qui permet d'alimenter la carte et de communiquer avec elle)

Si l'on souhaite pouvoir utiliser la carte de façon autonome (lorsqu'elle a été programmée) alors il y a nécessité de l'alimenter avec deux piles de 1,5V via le connecteur d'alimentation : il faut alors se procurer le coupleur de piles dédié :

coupleur-de-pile-pour-carte-microbit.jpg

Il pourrait être judicieux de protéger la carte Micro:Bit. Pour cela il existe des dispositifs en dur (acrylique) ou souples (caoutchouc).

Nous avons choisi de prendre un kit de démarrage contenant ces différents éléments (Référence VMM001). Voici le contenu de la boite :

r_P1060870.JPG

On y trouve :

  • une carte BBC Micro:Bit
  • un câble USB de type B de bonne facture (contacts dorés) et de longueur 70 cm environ
  • un coupleur de piles et 4 piles AAA (ce qui donne deux piles d'avance)
  • un boitier de protection en polycarbonate à monter (plaques protégées par un papier à retirer
  • une "notice" (qui en gros renvoie sur le site Micro:Bit !)

Rque : il existe plusieurs "Starter kits" différemment fournis. Attention à la longueur du cordon USB fourni. Selon que le PC sera sur la paillasse ou en dessous la longueur utile ne sera pas la même et pourrait nécessiter l'achat de rallonges USB

La carte Micro:Bit avec sa protection :

r_P1060874.JPG     r_P1060875.JPG

La carte Micro:Bit est livrée avec un programme de démonstration qui met en évidence les possibilités de l'afficheur de 25 Leds embarqué. Ce programme ne demande qu'à démarrer !

Il suffit pour cela d'alimenter la carte :

  • soit à l'aide du coupleur de piles
  • soit en connectant la carte sur un port USB à l'aide du câble micro USB fourni.

Ci-dessous une partie de cette démo :

(le câble USB n'était pas branché, la carte est alimentée par piles)

Côté logiciel

Le site MicroBit propose deux logiciels en ligne pour programmer le microcontrôleur :

 

javascript-editor.png   python-editor.png

A gauche : l'éditeur "MakeCode" pour programmer de façon graphique (à la manière de Scratch pour ceux qui connaissent). Cet éditeur est plutôt destiné à de jeunes programmeurs.

A droite : un éditeur Python. (Inconvénient : il faut être sûr de disposer d'une connexion internet pour le faire fonctionner

Pour cette raison, on préferera travailler avec un autre éditeur Python à installer sur l'ordinateur (fonctionnant sous Windows, Linux ou Mac) prenant en charge une version de Python dédiée aux microcontrôleurs (appelée MicroPython ). Ce logiciel s'appelle Mu-Editor et se trouve sur le site https://codewith.mu.

On choisira sur la page de téléchargement la version adaptée à son systme d'exploitation. Nous allons décrire l'installation sous Windows ainsi que celle sous Linux :

1- Installation sous Windows :

  • Pour vérifier la version de Windows (32 ou 64 bits), Ouvrir le Panneau de configuration et aller dans Système et Sécurité puis Système. L'information se trouve à la rubrique "Type du système"

version_windows.png

  • Choisir sur la page de téléchargement la version adaptée : 32 ou 64 bits puis exécuter le fichier pour installer mu-editor. Si plusieurs personnes peuvent utiliser l'ordinateur, penser à cocher l'option qui autorise l'accès du logiciel à tous les utilisateurs. Le détail de l'installation est donné ici (également pour les administrateurs réseaux)
  • Il faudra également installer le driver :
    • Télécharger le driver
    • Connecter la carte BBC Micro:Bit au PC à l'aide du câble USB
    • La carte est vue comme un lecteur, contenant deux fichiers :

bbc_windows.png

  • Refermer cette fenêtre
  • Installer le driver téléchargé

2- Installation sous Linux :

  • Sous Linux, on installera mu-editor à l'aide de l'outil de gestion de paquets Python pip :
    • Vérifier dans le gestionnaire de paquets la présence du paquet python3-pip ; en faire éventuellement l'installation. (Ci-dessous un exemple dans Synaptic)

python3-pip.png

  • On peut alors utiliser l'outil pip. Dans un Terminal, entrer la commande : pip3 install mu-editor
  • pip va alors télécharger tous les fichiers nécessaires au bon fonctionnement de mu-editor et les installer. Ci-dessous une copie d'écran de l'installation de mu-editor dans une distribution Ubuntu :

linux_install_mu-editor.png

  • Pas de driver à installer, par contre il faut que l'utilisateur appartienne au groupe dialout pour pouvoir utiliser la connexion USB entre l'ordinateur et la carte :

exemple ici pour ajouter l'utilisateur "vincent" au groupe dialout

dialout.png

on obtient ceci :

dialout_fin.png

  • Attention, l'intégration dans un groupe n'est prise en compte qu'au lancement du compte utilisateur : il faudra donc fermer la session puis la réouvrir
  • On pourra vérifier l'intégration au groupe avec la commande : groups

groups.png

On voit que l'utilisateur "vincent" appartient à différents groupes dont "dialout"

On est prêt maintenant à tester l'association du logiciel mu-editor avec la carte Micro:Bit !

Remarque : sous Debian "Stable" l'installation a échoué pour une raison d'incompatibilité de fichiers. Par contre elle se déroule sans problème dans une version Debian "Unstable" (Debian 10) ou dans une version récente d'Ubuntu (18.04) ou dérivée. Debian 10 sera la version stable de Debian en Mars 2019.

Addendum : l'installation a été effectuée sans problème sur une Debian 9.8 (Mars 2019)

Premiers pas avec Mu-Editor :

1- Démarrer mu-editor :

  • Sous Windows, on trouvera mu-editor dans la liste des programmes :

mu_win.png

  • Sous Linux, on entrera dans un Terminal : mu-editor
    • (on pourra réaliser un lanceur avec cette commande ; le site https://codewith.mu propose l'installation d'un racourci par l'installation de l'utilitaire shortcut : pip3 install shortcut suivi de la commande shortcut mu-editor

2- Découvrir mu-editor :

Au premier démarrage, une boite de dialogue va s'ouvrir pour demander dans quel mode utiliser mu-editor :

mode_mu-editor.png

On choisira ici le mode BBC micro:bit

L'ensemble du menu de mu-editor est réalisé au travers d'icônes séparées en cinq groupes :

mu-editore_icones.png

mu-editor_icones_mode.png Permet de revenir dans la boite de dialogue pour changer le mode d'utilisation de mu-editor... Indispensable si on n'a pas fait le bon réglage à la première mise en route du logiciel !

mu-editor_icones_fichiers.png Ce bloc d'icônes concerne les opérations de fichier sur le disque dur du PC

  • NOUVEAU : pour créer un nouveau programme python
  • CHARGER : pour récupérer un fichier programme enregistré préalablement sur le PC
  • ENREGISTRER : pour sauvegarder un fichier programme sur le PC. Attention : le logiciel ne propose pas l'option enregistrer sous. Donc si on modifie le contenu d'un fichier déjà nommé, le bouton "Enregistrer" viendra écraser le fichier enregistré sur le disque dur avec le contenu présent à l'écran. La solution consiste alors à cliquer sur le bouton "Nouveau", ce qui ouvre un nouvel onglet nommé "sans titre", et à copier-coller dedans la/les parties de programme que l'on souhaite reprendre pour une nouvelle utilisation

Remarque : lors de l'installation de mu-editor, un dossier "mu-code" a été créé sur le disque dur, directement dans le dossier de l'utilisateur ("Vincent" étant ici le nom de l'utilisateur connecté) :

  • Sous Windows, il se trouve en : 

fichiers_windows.png

 

  • Sous Linux (ici Ubuntu) :

fichiers_ubuntu.png

Remarque : si l'on veut utiliser l'option Fichiers dans le bloc d'icônes ci-dessous, les programmes devront être stockés à la racine du dossier mu_code et pas dans un sous-répertoire.