Le pcDuino : quel langage pour programmer le - Mon Club-Elec

publicité
Le pcDuino : quel langage pour programmer le pcDuino ?
Par X. HINAULT – Juin 2013– MAJ : Juin 2013 – www.mon-club-elec.fr
Intro
•
Le pcDuino est donc un vrai mini-PC qui dispose des broches E/S sur le même schéma que l'Arduino sur un même système. La question se pose tout
naturellement de la meilleure solution de développement à adopter, au sens fluidité d'usage, simplicité de mise en œuvre, facilité de codage, potentiel
évolutif, etc... pour programmer la « bête ».
•
Pour les possibilités de programmation des broches E/S, grosso modo, on peut distinguer :
◦ le codage en C/C++ (langage compilé – chaîne de compilation présente nativement sur le système)
▪ soit en C/C++ brut dans un éditeur C/C++
▪ soit en Arduino-like dans l'éditeur Arduino adapté, qui rappelons-le repose sur Java. En pratique, le code utilisé est tout de même assez différent du
code Arduino original..
◦ le codage en Python (langage interprété – présent nativement sur le système )
▪ soit en Python dans l'interpréteur, ce qui permet très simplement de faire des tests
▪ soit en Python brut dans un éditeur Python permettant l'exécution des codes « à la volée » par simple clic sur bouton exécuter
▪ soit en Python « Arduino-like » dans un éditeur Python : je vous propose ma propre solution « maison »... je pense que çà vous plaira...
•
Ce qu'il faut savoir, c'est que les broches E/S du pcDuino sont accessibles par l'intermédiaire de fichiers système, en lecture ou écriture. Dès lors, travailler
avec les broches E/S et analogiques du pcDuino va essentiellement consister à travailler sur des fichiers. A ce titre, l'usage de la chaîne de compilation
Le pcDuino : choisir un langage pour programmer le pcDuino - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 1 / 7
C/C++ n'a rien d'indispensable sur le pcDuino (à la différence de l'Arduino qui exécute un binaire transféré dans le microprocesseur)
Programmer les broches E/S du pcDuino en C/C++ à partir de l'IDE Arduino ?
•
La dernière version de la distribution Lubuntu fournie pour le pcDuino intègre un IDE Arduino modifié (paquet pcduino-arduino-ide) pour programmer
directement les broches E/S du pcDuino (voir : http://www.pcduino.com/?p=946 ):
Ajout de la carte pcDuino et des exemples pour le pcDuino
Le pcDuino : choisir un langage pour programmer le pcDuino - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 2 / 7
Le code « Arduino » utilisé est quand même assez différent du code Arduino « standard »...
•
L'idée paraît séduisante à première vue en ce sens que l'on reste dans l'environnement connu de l'IDE Arduino mais les limites sont bien là :
◦ le langage « Arduino » utilisé intègre de nombreux éléments de C/C++ qui nécessitent une réelle adaptation... Rien que la capture d'écran ci-dessus est
à peu près incompréhensible si on ne connaît que Arduino...
◦ même si coder les broches E/S de cette façon peut éventuellement être intéressante pour un test initial...
◦ … cette solution est surtout une impasse en terme de possibilités de développement à moyen terme car elle fait perdre le potentiel très très intéressant
que représente la « jonction » des broches E/S et des fonctions systèmes au sein d'un même code : cela semble vraiment dommage vu le potentiel très
intéressant que représente la possibilité d'allier dans un même code l'utilisation des broches E/S, analogiques, etc... et les fonctions avancées du système
Le pcDuino : choisir un langage pour programmer le pcDuino - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 3 / 7
Lubuntu (vidéo, réseau, son, etc... )
En bref :
A mon sens, programmer les broches E/S du pcDuino au sein de l'IDE Arduino sur le pcDuino, c'est se priver du potentiel énorme que représente la programmation au sein
d'un même code des broches E/S ET des éléments du système Lubuntu du pcDuino (réseau, vidéo, son, etc... ). Dans ce cas autant utiliser une carte Arduino !
En clair, avec l'IDE Arduino, vous ne pourrez jamais réaliser une capture d'image (fonctionnalité système Lubuntu) par appui sur un bouton poussoir (broche E/S), alors
qu'avec un code Python, çà sera assez facile à faire, mais aussi à l'enregistrer, l'envoyer sur le réseau, etc...
En « re-clair », avec l'IDE Arduino, on ne fera que du -Duino sur le pcDuino : seul Python permettra de faire du PC+Duino sur le pcDuino !
Analyse : ressources utilisées par Java, l'IDE Arduino et la toolchain avr-c versus Python / Geany
•
De plus, l'IDE Arduino repose sur Java (l'IDE Arduino est un fait une interface Processing « modifiée »), ainsi que sur la chaîne de compilation C pour
l'avr... Or, je rappelle que :
◦ nous sommes sur un « vrai » PC et que l'accès aux broches E/S se fait par de simples fichiers... donc à priori pas la peine de se compliquer la vie avec
une chaîne de compilation qui n'est pas indispensable...
◦ nous sommes dans la situation d'un système néanmoins limité, notamment l'espace de mémoire NAND pour le système n'est que de 2 Go... Un rapide
listing des paquets installés classé par ordre de taille avec la commande :
$ dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n
donne ceci :
Le pcDuino : choisir un langage pour programmer le pcDuino - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 4 / 7
•
Constat : à eux seuls les paquets Java, IDE Arduino, gcc-avr , binutils-avr... etc.. occupent 200 Mo de la mémoire NAND... En comparaison, l'alternative
représentée par Python + l'éditeur Geany occupe à peine 10 Mo... !!!!!!
•
Au final, ce constat m'incite à opter pour l'alternative légère et puissante que constitue Python + Geany pour développer sur le pcDuino.
•
De plus, cette façon de coder va permettre une programmation très interactive car aucune compilation n'est nécessaire, le code étant immédiatement
interprété.
Mon choix : le langage Python
•
A mon sens, le langage Python est probablement la meilleure solution pour plusieurs raisons :
Le pcDuino : choisir un langage pour programmer le pcDuino - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 5 / 7
◦ langage interprété pouvant notamment être testé ligne à ligne dans l'interpréteur Python
◦ il existe un éditeur léger, Geany, à coloration syntaxique, permettant d'exécuter immédiatement le code avec affichage des messages dans la console
◦ langage peu gourmand en ressources
◦ langage permettant assez simplement la mise en place d'interface GUI de toute sorte, dans lesquelles il sera facile d'intégré les données issues des
broches E/S
◦ syntaxe simplifiée comparativement au C/C++
◦ grande puissance de codage, notamment pour la gestion de tableaux, des types, etc... Il faut l'avoir testé pour comprendre de quoi on parle. Par exemple,
en C, passer un tableau à une fonction est assez complexe... en Python, il n'y a aucun problème... çà se fait simplement. Dans la même veine, en Python,
il est possible d'appliquer une fonction mathématique sur un tableau à 2 dimension... en 1 seule ligne de code !
◦ et surtout gestion relativement simple du réseau éthernet, de la communication avec le système, de l'utilisation du port série... etc... le tout dans un
même programme qui pourra gérer également les broches E/S du pcDuino. Ceci ne sera pas aussi facilement possible (pour ne pas dire impossible) avec
l'IDE Arduino seul... ce qui fait perdre une bonne partie de l'intérêt de la plateforme pcDuino.
◦ et puis Python c'est aussi le traitement d'image (opencv), la 3D (openGL), des librairies de calcul astronomique, des librairie d'affichage graphique
numérique, etc... En un mot polyvalence assurée !
•
Si çà peut vous rassurer, le langage Python est utilisé par la NASA, ILM ( effets spéciaux de Stars Wars...), etc...
Coder à la façon Arduino dans un environnement Python
•
Je suis comme vous : si je peux réutiliser facilement des codes que j'ai déjà écrit... je préfère le faire plutôt que de tout chambouler... Donc, ni une, ni deux,
je vous propose une petite librairie Python « fait maison » que vous aurez juste à coller (1 fichier) dans le répertoire où vous mettrez vos codes Python et
vous allez pouvoir coder sous cette forme :
from arduino import * # importe les fonctions Arduino pour Python
# entete declarative
LED=2 # broche utilisée pour la LED
#--- setup --def setup():
pinMode(LED,OUTPUT) # met la broche en sortie
# -- loop -def loop():
digitalWrite(LED, HIGH) # allume la LED
Le pcDuino : choisir un langage pour programmer le pcDuino - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 6 / 7
Serial.println('LED allumée')
delay(1000) # pause en millisecondes
digitalWrite(LED,LOW) # eteint LED
Serial.println('LED éteinte')
delay(1000) # pause en millisecondes
•
Bon, je pense que là, vous êtes rassuré non ? Vous allez pouvoir coder aussi facilement que si vous étiez dans l'IDE Arduino, mais sauf que vous serez en
Python... et le moment venu, vous pourrez sans vous compliquer la vie, intégrer vos instructions Arduino dans une application avec interface graphique,
etc...
•
Suivez le guide... dans le prochain tuto je vous montre comment vous installer pour coder en Python avant de prendre en main le connecteur E/S de votre
pcDuino.
Le pcDuino : choisir un langage pour programmer le pcDuino - Par X. HINAULT – Juin 2013 – www.mon-club-elec.fr – p. 7 / 7
Téléchargement