Ecrire un script Micropython

Principe général

Un script pourra être exécuté de 2 façons :

  • soit en étant flashé en RAM, ce qui est fait automatiquement par l'éditeur. Le script est alors enregistré sur l'ordinateur.

  • soit étant enregistré/copié sur la carte et chargé au démarrage. Ce qui est fait également par l'éditeur si on a choisi cette option.

Lancer l'éditeur

Les choses sont toute aussi simple.

Si ce n'est déjà fait, lancer l'éditeur Thonny précédemment installé. On obtient l'interface avec 2 fenêtres et l'éditeur Micropython correspond à la fenêtre du haut, celle SANS l'invite >>>

Ici, on va vite, c'est juste pour montrer le principe. Donc ne vous inquiétez pas si vous ne comprenez pas tout : on vous expliquera çà en détail dans des tutos et pages dédiés.

Premier script

A présent saisir directement votre code. Par exemple, pour allumer la LED "onboard", on fera :

from machine import Pin

led=Pin(25, Pin.OUT)

led.on()

Ensuite, cliquer sur exécuter :

On a alors une fenêtre qui apparaît proposant 2 options :

  • enregistrer sur l'ordinateur
  • enregistrer sur la carte

Choisissez ce que vous préférez (je conseille sur l'ordinateur).

Si vous enregistrez sur l'ordinateur, c'est le fichier qui sera enregistré sur l'ordinateur. Il sera par contre chargé en mémoire RAM de la carte et sera bien exécuté par Micropython sur la carte.

Par contre, le code ne sera pas exécuté au démarrage suivant de cette façon. Si vous voulez que le code s'exécute en autonomie, choisir "sur la carte Pi Pico". Ce n'est pas indispensable en phase d'apprentissage / exploration.

Pour info, le fichier qui sera exécuté au démarrage sera le main.py présent que la carte Pi Pico. Enregistrer le fichier sur la carte et sous ce nom pour un démarrage automatique après déconnexion. Nous aurons l'occasion de revenir sur ces notions, mais je vous le signale malgré tout à ce stade.

Ensuite sélectionner le chemin voulu (pas exemple un répertoire créé exprès sur le Bureau), donner le nom voulu (par exemple test.py) puis enregistrez.

Les fichiers Python, et MicroPython du coup, prennent le suffixe .py

Une fois fait, la LED doit s'allumer.

La structure d'un code type

En général, dans un code Micropython, on a plusieurs parties successives :

  • les import de modules
  • la déclaration des variables et objets
  • du code d'initialisation exécuté une fois
  • du code exécuté en boucle

Suivez notre conseil !

Vous verrez de nombreux exemples sur le web qui vous suggèrent de réaliser une boucle en utilisant une instruction while True. Avec Micropython, et même Python en général, une telle façon de faire n'est pas très efficace et est surtout bloquante et source de problèmes tel que absence de réactivité de l'interpréteur, etc. Donc franchement, éviter ++++ !

Avec la façon de faire que nous vous proposons (utiliser un Timer, votre code sera exécuté en boucle et vous pourrez toujours interagir avec Micropython pendant son exécution ! Vous pourrez même ainsi appeler une fonction du code, modifier une variable globale, etc durant l'exécution. Tout l'inverse d'un blocage permanent... Suivez le guide !

Il est beaucoup plus simple et efficace d'utiliser un Timer pour faire "boucler" du code et le code type à utiliser est de la forme :

from machine import Pin, Timer

led=Pin(25, Pin.OUT)

timer=Timer()

def loop(timer): # fonction appelee en boucle - attention recoit le timer
    led.toggle() # inverse etat de la LED

timer.init(freq=1,callback=loop) # (frequence en Hz, callback=fonction

La LED onboard va se mettre à clignoter. Vous pouvez ici vous amuser à modifier la valeur de freq=1 pour accélérer le clignotement.

Je vous conseille de copier/coller ce code dans l'éditeur et de l'appeler modele.py pour vos prochains codes. Nous aurons l'occasion de revoir çà en détail, je vous rassure.

Bon à savoir

Une règle importante ici est que le code exécuté soit d'une durée inférieure à la fréquence de rappel, ici toutes les secondes. On reverra çà en détail, mais çà vous montre le principe général.

Un autre avantage aussi de cette façon de faire, est la possibilité de créer plusieurs objets Timer et par conséquent de gérer plusieurs tâches différentes "en parallèle", ce que ne permet pas un while True qui oblige une programmation séquentielle.

Bref, conseil d'ami, le while True, on oublie !! L'utiliser n'est que source de problèmes casse-pied et c'est inefficace en pratique.

Conclusion

Ici, le but est de vous montrer le principe de l'écriture d'un code et vous voyez que les choses sont plutôt simples et intuitives. Vous ne comprenez pas le détail du code à ce stade, et ce n'est pas très grave : nous allons présenter çà en détail dans nos tutos dédiés.