View  Edit  Attributes  History  Attach  Print  Search

ACCUEIL | ARDUINO > S'INSTALLER > DEBUTER > APPROFONDIR | PROCESSING | MECATRONIQUE | MATERIEL | OUTILS | TESTS | Plus...|
Python > Shell > ATELIERS Python + Qt > PyQt apps > PyQt+Arduino | Mes Robots | RepRap | Mes lib'Arduino | Mes shields Arduino | Mes distros | Les Mini-PC |
ATELIERS ARDUINO| VIDEOS | COMPRENDRE | REFERENCES | CODER | TECHNIQUE | GNU/LINUX | LIENS | Rien à voir |

Programmer le pcDuino : Python simple : Le code minimum

Par X. HINAULT - Juin 2013

Ce que l'on va faire ici

  • Ce code est le code Python minimum "Arduino-like" s'exécutant sur le pcDuino.

Pré-requis

Matériel nécessaire

Aucun

Le montage à réaliser

Aucun

Le fichier *.yno

Copier/coller ce code dans l'IDE Pyduino


# entete declarative

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

# -- fin setup --

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

# -- fin loop --
 

Le fichier *.py

Copier/coller ce code dans l'éditeur Geany


#!/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 arduino import * # importe les fonctions Arduino pour Python

# 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(1): 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

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 import * # importe les fonctions Arduino pour Python

# 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