Premier programme : blink !
Pour débuter sous circuitPython, nous allons bien sûr faire clignoter une LED ! Mais avant cela, regardons la structure d'un programme sous micropython en partant d'un exemple sous Arduino. Un programme vide sous arduino ressemble à ceci :
// déclaration des variables globales
int maVariable;
void setup() {
// code pour l'initialisation
}
void loop() {
// boucle infinie qui contient le programme principal
}
Le code équivalent sous circuitPython sera le suivant :
import blablabla
# déclaration des variables globales
maVariable = 0
# initialisation des divers composants du programme
while True:
# boucle infinie qui contient le programme principal
...
Remarque :
Il n'y a cependant aucune contrainte forçant le programme principal à se trouver dans une boucle infinie. Un programme circuitPython peut très bien lire la valeur d'un capteur, afficher un message et se terminer ainsi.
Méthode : Le programme blink
Je ne reprends pas ici le programme blink de l'Arduino, mais on voit que le programme circuitPython est très similaire.
import time
import digitalio
import board
# déclaration des variables globales
led = digitalio.DigitalInOut(board.D13)
# initialisation des divers composants du programme
led.direction = digitalio.Direction.OUTPUT
while True:
time.sleep(1)
led.value = True
time.sleep(1)
led.value = False
La librairie digitalio permet de gérer ce qui à rapport avec les entrées sorties numériques. On y trouve entre autre :
DigitalInOut
prend en paramètre la broche à contrôlerDirection
peut valoirDirection.INPUT
ouDirection.OUTPUT
Pull
utilisé pour les entrées numériques pour configurer la broche en pull-up (Pull.UP
) ou pull-down(Pull.DOWN
).
La librairie board pemet de référencer clairement les broches de la carte utilisée. Celle-ci dépend donc de la carte et son contenu varie d'une carte à l'autre. Le board d'une CPX permettra d'atteindre les broches mais aussi les différents capteurs. Le board de ma carte Metro M4 express contient 'A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'D0', 'D1', 'D10', 'D11', 'D12', 'D13', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'I2C', 'LED_RX', 'LED_TX', 'MISO', 'MOSI', 'NEOPIXEL', 'RX', 'SCK', 'SCL', 'SDA', 'SPI', 'TX', 'UART' qui sont en fait toutes les broches accessibles sur cette carte en particulier.
La librairie time gère tout ce qui a trait au temps. On en a pratiquement toujours besoin.
La méthode
sleep
est l'équivalent de la fonctiondelay
en Arduino, mais attention, le temps passé en paramètre est exprimé en secondes ! On peut bien sûr utiliser des nombres décimaux pour avoir des fractions de secondes.La méthode
monotonic
est l'équivalent de la fonction Arduinomillis()
. Elle donne le temps passé depuis le démarrage de la carte. Ce temps est exprimé également en secondes. Pour plus de précision, on peut utilisermonotonic_ns
en nanosecondes ! On en verra un exemple juste après.