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 :

1
#include blablabla
2
3
// déclaration des variables globales
4
int maVariable;
5
6
void setup() {
7
  // code pour l'initialisation
8
9
}
10
11
void loop() {
12
  // boucle infinie qui contient le programme principal
13
14
}

Le code équivalent sous circuitPython sera le suivant :

1
import blablabla
2
3
# déclaration des variables globales
4
maVariable = 0
5
6
# initialisation des divers composants du programme
7
8
while True:
9
    # boucle infinie qui contient le programme principal
10
    ...

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éthodeLe programme blink

Je ne reprends pas ici le programme blink de l'Arduino, mais on voit que le programme circuitPython est très similaire.

1
import time
2
import digitalio
3
import board
4
5
# déclaration des variables globales
6
led = digitalio.DigitalInOut(board.D13)
7
8
# initialisation des divers composants du programme
9
led.direction = digitalio.Direction.OUTPUT
10
11
12
while True:
13
    time.sleep(1)
14
    led.value = True
15
    time.sleep(1)
16
    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ôler

  • Direction peut valoir Direction.INPUT ou Direction.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 fonction delay 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 Arduino millis(). 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 utiliser monotonic_ns en nanosecondes ! On en verra un exemple juste après.