Main

Apprendre : Exemples

Le programme minimum


Description

Cet exemple contient le code minimum qui est nécessaire et indispensable pour un programme Pyduino exécutable. Le code minimum doit comporter :

  • la fonction setup() qui est exécutée une fois au début du programme.
  • et la fonction loop() qui est exécutée en boucle tant que la carte est sous tension.

Une règle essentielle : les deux fonctions setup() et loop() (même vides) sont OBLIGATOIRES dans tout programme Pyduino ! Noter qu'il est possible de désactiver la boucle loop() en posant noLoop=True dans l'entête déclarative.

Pré-requis

Matériel nécessaire

Aucun

Le montage à réaliser

Aucun

Explications du programme

La fonction setup() est la première fonction qui est appelée quand un programme démarre. Il faut utiliser cette fonction pour notamment :

  • initialiser les variables,
  • initialiser le mode de fonctionnement (entrée/sortie) des broches,
  • ...

La fonction setup() sera exécutée seulement une fois, après la mise sous tension ou une réinitialisation (par appui sur le bouton 'reset') de la carte Arduino.

Après la fonction setup, la fonction loop va faire exactement ce que son nom suggère (loop = boucle en anglais) : elle va s'exécuter en boucle, sans fin, permettant au programme d'exécuter des instructions et de réagir durant son exécution. C'est le code placé dans la fonction loop qui est activement utilisé pour contrôler la carte Arduino : on peut dire que c'est le "coeur" de votre programme.

Le code présenté ici ne fera absolument rien... mais sa structure vous sera très utile pour réaliser un copier/coller avant de démarrer un programme de votre crû.

Ce programme minimal vous montre également comment mettre des commentaires dans votre code. Toute ligne qui commence par deux slashes // ne sera pas lue par le compilateur : vous pouvez donc écrire à ce niveau ce que vous voulez. Commenter votre code de cette façon sera particulièrement utile pour expliquer à vous-mêmes ou aux autres votre programme pas à pas. Pour plus détails, voir la page Commentaires.

Si les fonctions loop() et setup() sont laissées vides, y placer l'instruction return pour éviter un message d'erreur en exécution.

Le fichier *.yno

Copier/coller ce code dans l'IDE Pyduino


# exemple pyDuino - par X. HINAULT - www.mon-club-elec.fr
# Juin 2013 - Tous droits réservés - GPLv3
# code minimal

# entete declarative

#--- setup ---
def setup():
        return # si vide

# -- fin setup --

# -- loop --
def loop():
        return # si vide

# -- fin loop --
 

Le fichier *.py

Si vous préférez utiliser le code Python complet : voici la procédure à suivre pour développer par exemple dans l'éditeur Geany.

Comparativement au code Pyduino, le code Python correspond simplement à l'ajout au code Pyduino :

  • de la ligne d'import de la librairie Pyduino utilisée qui est fonction de la plateforme (cette insertion est gérée automatiqement par l'IDE Pyduino)

from pyduino_pcduino import * # importe les fonctions Arduino pour Python - version pcduino
# from pyduino_rpi import * # importe les fonctions Arduino pour Python - version raspberryPi
# from pyduino_arduino_pc import * # importe les fonctions Arduino pour Python - version desktop + arduino
# from pyduino_light import * # importe les fonctions Arduino pour Python - version desktop sans hardware
 
  • d'une fin de code qui permet l'exécution du script Python et la gestion des fonctions setup() et loop()

#--- obligatoire pour lancement du code --
if __name__=="__main__": # pour rendre le code executable
        setup() # appelle la fonction setup
        while not noLoop: loop() # appelle fonction loop sans fin
 

ce qui donne :


#!/usr/bin/python
# -*- coding: utf-8 -*-

# exemple pyDuino - par X. HINAULT - www.mon-club-elec.fr
# Juin 2013 - Tous droits réservés - GPLv3
# voir : https://github.com/sensor56/pyDuino

# code minimal

from pyduino_pcduino import * # importe les fonctions Arduino pour Python - version pcduino
# from pyduino_rpi import * # importe les fonctions Arduino pour Python - version raspberryPi
# from pyduino_arduino_pc import * # importe les fonctions Arduino pour Python - version desktop + arduino
# from pyduino_light import * # importe les fonctions Arduino pour Python - version desktop sans hardware

# entete declarative

#--- setup ---
def setup():
        return # si vide

# -- fin setup --

# -- loop --
def loop():
        return # si vide

# -- fin loop --

#--- obligatoire pour lancement du code --
if __name__=="__main__": # pour rendre le code executable
        setup() # appelle la fonction setup
        while not noLoop: loop() # appelle fonction loop sans fin
 

Ce code est également disponible ici : https://raw.github.com/sensor56/pyDuino/master/pcduino/exemples/1.Basics/BareMinimum.py

Pour info : le code Python est automatiquement créé par l'IDE Pyduino lors de l'exécution et est disponible dans le répertoire du fichier *.yno correspondant. Ce fichier Python au format *.py est exécutable de façon autonome au besoin.

Utilisation

  • Appuyer sur le bouton exécuter dans Geany
  • Une fenêtre de Terminal vide doit apparaître sans message d'erreur.

Discussion technique

  • L'inconvénient majeur d'un appel de la fonction loop() automatique à la façon Arduino, c'est un usage élevé de la CPU... : 100% en fait, alors que la tâche exécutée par loop() n'est pas très conséquente.
  • Il est donc beaucoup plus judicieux d'auto-appeler loop() à l'aide de la fonction Pyduino timer() qui permet d'appeler une fonction après un intervalle voulu en millisecondes, sans mobiliser la CPU durant le temps d'attente. Du coup, l'usage CPU chute fortement, à quelques %. Cette solution sera donc à préférer et à privilégier en pratique.
  • Voici un exemple :
#!/usr/bin/python
# -*- coding: utf-8 -*-

# exemple pyDuino - par X. HINAULT - www.mon-club-elec.fr
# Juin 2013 - Tous droits réservés - GPLv3
# voir : https://github.com/sensor56/pyDuino

# code minimal avec Timer (décharge CPU)

from pyduino_pcduino import * # importe les fonctions Arduino pour Python - version pcduino
# from pyduino_rpi import * # importe les fonctions Arduino pour Python - version raspberryPi
# from pyduino_arduino_pc import * # importe les fonctions Arduino pour Python - version desktop + arduino
# from pyduino_light import * # importe les fonctions Arduino pour Python - version desktop sans hardware

# entete declarative
noLoop=True # bloque loop automatique

#--- setup ---
def setup():

        # instructions setup ici

        loop() # premier appel de la fonction loop

# -- fin setup --

# -- loop --
def loop(): # la fonction loop s'auto-appelle a intervalles reguliers

        # instructions loop ici

        timer(100, loop) # appelle fonction loop apres intervalle en ms

        # resultats sur pcduino avec htop :
        # en mode loop auto permanent : usage CPU = 100%
        # 100 ms ~10 appels par seconde = 5% usage CPU
        # 10 ms ~ 100 appels par seconde = 20% usage CPU
        # 5 ms ~ 200 appels par seconde = 30% usage CPU => bon compromis
        # 1 ms ~ 1000 appels par seconde = 60% usage CPU
        # 0.5ms ~ 2000 appels par seconde = 75% usage CPU
        # 0.1ms ~ 10 000 appels par seconde = 95% usage CPU

# -- fin loop --

#--- obligatoire pour lancement du code --
if __name__=="__main__": # pour rendre le code executable
        setup() # appelle la fonction main
        while not noLoop: loop() # appelle fonction loop sans fin

 

Voir également

La documentation des instructions utilisées :


Page d'accueil de la référence Pyduino en français

Corrections, suggestions et nouvelle documentation peuvent être postées sur à l'adresse support_at_mon-club-elec.fr

Cette page a été créée réalisée par Xavier HINAULT (2013) (www.mon-club-elec.fr) et est sous licence Creative Commons Attribution-ShareAlike 3.0.