1. Livres & vidéos
  2. Arduino
  3. MicroPython
Extrait - Arduino Apprivoisez l'électronique et le codage avec les langages Arduino et MicroPython (4e édition)
Extraits du livre
Arduino Apprivoisez l'électronique et le codage avec les langages Arduino et MicroPython (4e édition) Revenir à la page d'achat du livre

MicroPython

Présentation

Même s’il existe quelques différences de syntaxe entre le langage Arduino (proche du langage C) et le MicroPython, il est assez facile de passer de l’un à l’autre.

En effet, les langages de programmation utilisent tous les mêmes principes. Vous retrouverez donc les variables, les conditions, les boucles, les fonctions, les bibliothèques, etc.

Cependant, avec le langage Arduino, le code source est compilé par l’ordinateur avant d’être téléversé sous forme de langage machine, tandis qu’en MicroPython, vous transférez (ou modifiez) directement le code source (sous forme de texte) dans l’Arduino, qui se charge ensuite de l’interpréter en temps réel.

Le MicroPython est moins performant que le C, mais il est parfait pour apprendre la programmation. L’utilisateur peut tester, modifier ou déboguer son code très facilement.

Un langage interprété nécessite un microcontrôleur plus puissant qu’un langage compilé (pour traduire à la volée le code source en langage machine). Le MicroPython est donc réservé aux microcontrôleurs récents. Pour cette raison les cartes compatibles fonctionnent toutes sous 3,3 V (au lieu de 5 V qui est l’ancien standard).

La fondation Arduino a beaucoup trop tardé avant de se rendre compte du potentiel du langage MicroPython (dommage que l’Arduino Uno R4 ne soit pas compatible).

Pour l’instant, seuls les Arduino NANO ESP32, Arduino NANO RP2040 CONNECT, Arduino NANO 33 BLE SENSE, Arduino GIGA R1 et quelques autres de la gamme pro peuvent utiliser le MicroPython, alors qu’il existe de nombreuses alternatives, souvent...

Blink

Une fois connecté, il est possible de communiquer avec l’Arduino en entrant directement les commandes dans la console (appelée aussi terminal ou REPL).

 Pour commencer, tapez la ligne suivante pour importer dans l’Arduino la fonction Pin. Elle permet de contrôler les entrées/sorties de l’Arduino.

from machine import Pin 

 Allumez la LED interne en envoyant la valeur 1 au GPIO 48 (déclaré comme une sortie).

Pin(48, Pin.OUT).value(1) 

 Éteignez la LED en envoyant la valeur 0.

Pin(48, Pin.OUT).value(0) 
images/08LF09.png

La console MicroPython

Vous pouvez répéter l’opération aussi longtemps que vous le souhaitez mais il serait certainement plus pratique d’utiliser un script pour automatiser le clignotement de la LED.

 Pour cela, ouvrez le gestionnaire de fichiers en cliquant sur l’icône en haut à droite qui représente des fichiers empilés (File Manager), puis cliquez sur le fichier doté d’un signe + et créez un nouveau fichier nommé main.py (s’il n’est pas déjà créé).

images/08LF10.png

Création du fichier main.py

 Ouvrez le fichier main.py, il contiendra le programme.

 Pour commencer, il est nécessaire d’importer les fonctions utilisées dans le programme. Pour marquer une pause dans le clignotement, nous aurons besoin de la fonction sleep du module time et bien...

LED RGB

L’Arduino Nano ESP possède aussi une LED RGB à anode commune (connectée aux GPIO 46, GPIO 0, GPIO 45 et à la borne 3,3 V). À cause de ce branchement, les LED s’allument quand les GPIO sont à 0 (GND) et s’éteignent quand ils sont à 1 (3,3 V).

images/08LF11.png

LED RGB de l’Arduino Nano ESP

Voici un exemple de programme (inspiré de Blink) qui allume alternativement les LED rouge, verte et bleue.

# LED RGB numérique 
# Importation des fonctions Pin et sleep 
from machine import Pin 
from time import sleep 
 
# Création des objets led_rouge, led_verte, led_bleue 
led_rouge = Pin(46, Pin.OUT) 
led_verte = Pin(0, Pin.OUT) 
led_bleue = Pin(45, Pin.OUT) 
 
# Boucle infinie 
while True: 
 # Allume la LED rouge 
 led_rouge.value(0) 
 # Pause d'une seconde 
 sleep(1) 
 # Éteint la LED rouge 
 led_rouge.value(1) 
 # Allume la LED verte 
 led_verte.value(0) 
 # Pause d'une seconde 
 sleep(1) 
 # Éteint la LED verte 
 led_verte.value(1) 
 # Allume la LED bleue 
 led_bleue.value(0) 
 # Pause d'une seconde 
 sleep(1) 
 # Éteint la LED bleue 
 led_bleue.value(1) 

Bien sûr, vous pouvez créer de nouvelles couleurs en mélangeant les trois couleurs de base, mais en numérique, les possibilités sont quand même très limitées.

 Pour utiliser les sorties analogiques de l’Arduino, importez la fonction PWM du module machine (en plus de la fonction Pin).

from machine import Pin, PWM 

 Créez les objets PWM.

led_rougePWM = PWM(Pin(46)) ...

LED externe

Connectez une LED (avec une résistance de 1KΩ) à l’une des entrées/sorties de l’Arduino Nano ESP. Dans cet exemple, il s’agit de la borne D12, qui correspond au GPIO 47. Rien ne vous empêche d’en choisir une autre (à condition, bien sûr, d’adapter le code).

images/08LF12.png

Branchement de la LED au GPIO 47

C’est le même principe qu’avec les LED internes : vous pouvez faire clignoter la LED en mode numérique (0 ou 1).

# LED Externe 
# Importation des fonctions Pin et sleep 
from machine import Pin 
from time import sleep 
 
# Création de l'objet led 
led = Pin(47, Pin.OUT) 
 
# Boucle infinie 
while True: 
 # Allume la LED 
 led.on() # ou led.value(1) 
 # Pause d'une seconde 
 sleep(1) 
 # Éteint la LED 
 led.off() # ou led.value(0) 
 # Pause d'une seconde 
 sleep(1) 

Vous pouvez également faire varier sa luminosité en mode analogique (0 à 1 023 en 10 bits).

# LED externe boucle 10 bits 
from machine import Pin, PWM 
from time import sleep_ms 
 
# Création de l'objet led_PWM 
led_PWM = PWM(Pin(47)) 
 
# Boucle infinie 
while True: 
 for lum in range(1023, -1, -1): 
   led_PWM.duty(lum) 
   sleep_ms(1) 
 for...

Bouton-poussoir

Dans cet exemple, la LED est reliée avec sa résistance de 1Kimages/03ic02.png à la borne D12 (GPIO 47) et le bouton-poussoir à la borne D4 (GPIO 7). Mais comme d’habitude, rien ne vous empêche de choisir d’autres entrée/sortie (à condition bien sûr, d’adapter le code).
images/08LF13.png

Branchement de la LED et du bouton-poussoir

 Pour utiliser l’entrée numérique de l’Arduino, importez la fonction Pin du module machine

from machine import Pin 

 Créez un objet qui regroupe les références du bouton (en activant la résistance de pull-up interne de l’Arduino).

# Création de l'objet bouton (en mode pull-up) 
bouton = Pin(7, Pin.IN, Pin.PULL_UP) 

La fonction value permet de connaître l’état du bouton. Avec ce branchement, le bouton renvoie la valeur numérique 1 au repos et 0 quand il est appuyé. Vous pouvez stocker cette valeur dans une variable ou l’utiliser directement dans une condition.

# Lecture et récupération de l'état du bouton 
etatBouton = bouton.value() 
images/08LF14.png

Le bouton allume la LED

Voici un exemple de programme qui allume la LED quand on appuie sur le bouton.

# LED et bouton 
# Importation des fonctions Pin et sleep 
from machine import Pin 
from time import sleep 
 
# Création des objets led et bouton (pull-up) 
led = Pin(47, Pin.OUT) ...

Potentiomètre

La LED est toujours reliée avec sa résistance de 1Kimages/03ic02.png à la borne D12 (GPIO 47) et le potentiomètre à la borne D7 (GPIO 10). Évidemment, vous pouvez utiliser d’autres entrée/sortie en adaptant le programme).
images/08LF15.png

Branchement de la LED et du potentiomètre

Pour utiliser une entrée de l’Arduino en mode analogique, nous aurons besoin des fonctions Pin et ADC du module machine.

from machine import Pin, ADC 

 Créez ensuite un objet qui regroupe les références du potentiomètre (donnez-lui le nom que vous voulez).

potentiometre = ADC(Pin(10)) 

La valeur récupérée par la fonction read_u16 possède une résolution de 16 bits (entre 0 et 65 535). Vous pouvez la stocker dans une variable ou l’utiliser directement dans une condition.

valeurPotentiometre = potentiometre.read_u16() 

Dans cet exemple de code, le potentiomètre permet de modifier la luminosité de la LED, également en 16 bits. La valeur mesurée est affichée sur la console.

# LED et potentiomètre 
# Importation des fonctions 
from machine import Pin, PWM, ADC 
from time import sleep 
 
# Création des objets led_PWM et potentiomètre 
led_PWM = PWM(Pin(47)) 
potentiometre = ADC(Pin(10)) 
 
# Boucle infinie 
while True: 
 # Valeur du potentiomètre...

Buzzer

Les sorties analogiques permettent aussi de jouer de la musique. Branchez un buzzer (passif) entre la borne D3 (GPIO 6) et la masse (GND). Il est possible d’utiliser une autre sortie mais dans ce cas, il faudra adapter le programme.

images/08LF17.png

Branchement du buzzer

Pour générer une note, la membrane du buzzer doit vibrer à une certaine fréquence. Nous devons donc modifier la fréquence de la sortie analogique (qui, par défaut, est de 1 000) en fonction de la note à jouer. Par exemple, pour jouer la note La (de la troisième octave), le buzzer doit vibrer 440 fois par seconde.

N’oubliez pas ensuite de couper la sortie PWM, sinon la note sera jouée en continu.

# Buzzer note La 
# Importation des fonctions 
from machine import Pin, PWM 
from time import sleep 
 
# Création de l'objet buzzer 
buzzer = PWM(Pin(6)) 
 
# Activation de la sortie PWM 
buzzer.duty_u16(1000) 
# Modification de la fréquence 
buzzer.freq(440) 
# Durée de la note 
sleep(1) 
# Désactivation de la sortie PWM 
buzzer.duty_u16(0) 

Bien sûr, pour jouer un morceau de musique, il est plus simple de créer une fonction et d’indiquer dans ses paramètres la fréquence et la durée de la note.

# Buzzer Marseillaise 
# Importation des fonctions 
from machine import Pin, PWM 
from time...

LED adressables (Neopixel)

Pour contrôler un anneau ou une bande de LED adressables, reliez (par exemple) l’entrée IN à la sortie A3 (GPIO 10) de l’Arduino.

Si vous n’avez qu’une dizaine de LED, vous pouvez utiliser l’alimentation de l’Arduino (3,3 V et GND). Au-delà, il est conseillé d’ajouter une alimentation externe ou de réduire la luminosité.

images/08LF18.png

Branchement d’un module Neopixel

Nous aurons besoin des fonctions Pin du module machine et NeoPixel du module Neopixel.

from machine import Pin 
from neopixel import NeoPixel 

 Créez ensuite un objet qui regroupe les références du module (numéro de GPIO et nombre de LED adressables).

# Création de l'objet ledNeopixels 
nombre_de_LED = 12 
ledNeopixels = NeoPixel(Pin(4, Pin.OUT), nombre_de_LED) 

Les LED sont numérotées de 0 à n-1. Pour définir la couleur d’une LED, il est nécessaire d’indiquer son numéro et la proportion de rouge, de vert et de bleu (entre 0 et 255). Vous pouvez bien sûr composer de nombreuses couleurs différentes en mélangeant les trois couleurs de base.

# 1  
re 
 LED en rouge  
ledNeopixels[0] = (255, 0, 0)  
# 2 
e 
 LED en vert  
ledNeopixels[1] = (0, 255, 0)  
# 3 
e 
 LED en bleu  
ledNeopixels[1]...

Afficheur LCD Grove

1. Installation d’un module (bibliothèque)

Pour l’instant, nous avons seulement utilisé les fonctions MicroPython de base (installées par défaut avec le langage). Mais suivant votre matériel, vous aurez peut-être besoin d’installer de nouveaux modules.

En MicroPython, on parle plutôt de modules que de bibliothèques.

 Pour cela, vous pouvez télécharger et lancer le MicroPython Package Installer que vous trouverez à l’adresse suivante : https://github.com/arduino/lab-micropython-package-installer/releases

 Branchez l’Arduino et cliquez sur le bouton RELOAD s’il n’est pas détecté. Entrez les éléments caractéristiques matériels dans la barre de recherche (par exemple « lcd » pour l’afficheur LCD). N’hésitez pas à cliquer sur More info pour avoir plus de détails sur le module. Pour l’afficheur Grove LCD, vous pouvez choisir le module « micropython-i2c-lcd by Ubi de Feo », mais il est possible que d’autres conviennent aussi.

 Cliquez ensuite sur le bouton INSTALL pour copier les fichiers dans le répertoire lib (libraries) de l’Arduino.

images/08LF19.png

Installation d’un module (bibliothèque) MicroPython

Vous pouvez aussi télécharger votre module et le copier vous-même dans le répertoire lib avec le gestionnaire de fichiers Arduino...

Capteurs de température et d’humidité DHT

Il est possible d’utiliser les mêmes capteurs qu’avec le langage Arduino. Pour cela, il suffit d’installer les modules MicroPython correspondants. Dans cet exemple, il s’agit d’un capteur DHT 11 ou 22, mais bien sûr si vous possédez un autre modèle, le principe est exactement le même.

 Connectez l’Arduino à l’ordinateur, lancez le logiciel MicroPython-Package-Installer, tapez « dth » dans la barre de recherche, choisissez la bibliothèque dht by MicroPython et cliquez sur Install.

images/RelectLF31.png

Installation de la bibliothèque dht

 Vous pouvez également télécharger le module à l’adresse suivante : https://github.com/micropython/micropython-lib/blob/master/micropython/drivers/sensor/dht/dht.py

 Copiez-le alors vous-même dans le répertoire lib à l’aide du gestionnaire de fichiers Arduino Lab for MicroPython.

Dans cet exemple, le capteur est relié à la borne D2 (qui correspond au GPIO 5) et nous utiliserons un afficheur LCD monochrome relié au port I2C. Si vous le souhaitez, vous pouvez remplacer l’afficheur monochrome par un afficheur RGB, en adaptant le code et peut-être aussi le branchement.

images/08LF26.png

Branchement du capteur DHT et de l’afficheur LCD

Pour lire les données du capteur DHT, nous avons besoin...

Retour au langage Arduino

Vous avez expérimenté le langage MicroPython et vous souhaitez maintenant revenir au langage Arduino ?

Pas de problème, voilà la procédure à suivre pour réinstaller le bootloader d’origine de l’Arduino Nano ESP32.

Attention, toutes les données contenues dans l’Arduino (programmes et bibliothèques MicroPython) seront effacées, alors n’oubliez pas de tout sauvegarder avant de supprimer le langage MicroPython.

 Ouvrez l’IDE Arduino et acceptez toutes les mises à jour proposées.

 Reliez ensemble les bornes B1 et GND.

images/08LF28.png

Les bornes B1 et GND sont reliées

 Branchez l’Arduino à l’ordinateur (ou appuyez sur le bouton RST, s’il était déjà branché). La LED RGB s’allume en vert.

 Retirez le câble qui relie les bornes B1 et GND. La LED RGB s’allume en violet.

 Allez dans Outils - Port et sélectionnez le port de la carte (COM11 dans cet exemple). L’Arduino peut être détecté comme un autre modèle de carte ESP32, mais à cette étape, cela n’a aucune importance.

images/08LF29.png

Sélection du port COM

 Allez dans Outils - Carte et sélectionnez Arduino ESP32 Boards - Arduino Nano ESP32 (il est possible que la carte soit déjà sélectionnée automatiquement).

images/08LF30.png

Sélection...