Ce tutoriel a pour objectif d’apprendre la programmation en langage microPython en utilisant la carte Raspberry Pi Pico. Cette carte est équipé d’un microcontrôleur RP2040. Le langage microPython est le portage du langage Python adapté aux microcontrôleurs.
Un premier exemple très simple d’affichage de texte avec la fonction print() :
Gestion d’une led avec le shell
Un exemple de programmer pour allumer une led.
La led est connecté sur la pin n°2 (GP2)
Vous pouvez essayer de taper ces lignes de code dans le shell :
Et la lumière fut, allumer et éteindre une led !
Un exemple très simple de programme pour allumer une led :
La led doit être connectée sur la GPIO n°2
[code language=”python”]
from machine import Pin
led = Pin(2, Pin.OUT) # configuration de la pin 2 en sortie
led.value(1) # mise à l’état haut de la pin 2, la led s’allume !
[/code]
Un exemple simple de programme pour allumer une led pendant 2 secondes et ensuite l’éteindre :
[code language=”python”]
from machine import Pin
import time
led = Pin(2, Pin.OUT) # configuration de la pin 2 en sortie
while True: # boucle infini
led.value(1)
time.sleep(2) # pause de 2 secondes
led.value(0)
time.sleep(1) # pause de 1 seconde
[/code]
Un autre exemple avec l’utilisation de la fonction toggle():
La led va clignoter toutes les 2 secondes
[code language=”python”]
from machine import Pin
import time
led = Pin(2, Pin.OUT)
while True:
led.toggle()
time.sleep(2)
[/code]
Utilisation du shell, print
Utilisation de la fonction print() pour afficher du texte dans le shell :
[code language=”python”]
from machine import Pin
import time
print("Hello Raspberry Pi Pico ! ")
[/code]
Le résultat dans le shell :
Gestion d’un bouton poussoir
Un exemple pour lire le manière continue l’état d’un bouton poussoir connecter sur la pin 3 de la carte Raspberry Pi Pico :
[code language=”python”]
from machine import Pin, ADC, PWM
import time
PWM : Pulse With Modulation ou modulation de la largeur d’impulsion
C’est quoi un signal PWM ?
This file is licensed under the Creative Commons Attribution-Share Alike 4.0 International license. (https://en.wikipedia.org/wiki/Pulse-width_modulation)
Un exemple sur la pin 4, d’un signal PWM. Ce signal PWM permet par exemple de contrôler l’intensité lumineuse d’une led ou encore la commande en vitesse d’un moteur à courant continu.
[code language=”python”]
from machine import Pin, ADC, PWM
import time
signal = Pin(4, mode=Pin.OUT)
signal = PWM(Pin(4))
signal.freq(500) # fréquence de 500 Hz
signal.duty_u16(32000) # rapport cyclique
[/code]
Un autre exemple de génération d’un signal PWM :
[code language=”python”]
from machine import Pin, ADC, PWM
import time
signal = Pin(4, mode=Pin.OUT)
signal = PWM(Pin(4))
signal.freq(500)
for rapport in range(0,65_536):
signal.duty_u16(rapport)
print(rapport)
time.sleep(0.001)
[/code]
Contrôle d’un servomoteur
Maintenant, passons au contrôle d’un servomoteur en microPython.
Connexion du servomoteur :
Fil rouge : +5V
Fil noir : GND
Fil orange : GPIO 4
Un exemple de programme pour le contrôle d’un servomoteur :
Configuration de la GPIO 4 en signal PWM
Pour le contrôle d’un servomoteur la fréquence doit être de 50 Hz
Le contrôle angulaire d’un servomoteur varie en fonction du rapport cyclique (entre 1 et 2 ms environ, dépends du type de servomoteurs)
[code language=”python”]
from machine import Pin, PWM
import time
servo = Pin(4, mode=Pin.OUT)
servo = PWM(Pin(4))
servo.freq(50)
while True:
servo.duty_u16(2314)
time.sleep(2)
servo.duty_u16(7600)
time.sleep(2)
[/code]
Allumer une led avec un timer !
Un exemple d’utilisation d’un timer pour faire clignoter la led interne de la carte Raspberry Pi PICO toutes les secondes :
[code language=”python”]
from machine import Pin, Timer
Un exemple de programme pour gérer l’appui d’un bouton poussoir avec une interruption matérielle (IRQ). Une interruption matérielle est déclenchée par une entrée (GPIO) du microcontrôleur. Dans cet exemple, l’entrée 3 est configurée en interruption.
[code language=”python”]
from machine import Pin
import time
def mon_interruption(pin):
print("Bouton ON")
bouton = Pin(3, Pin.IN, Pin.PULL_UP) # configuration du bouton sur l’entée 3