Mini-PC : Pyduino : UART, IDE Arduino and co sur le pcduino Ce qu

publicité
Mini-PC : Pyduino : UART, IDE Arduino and co sur le pcduino
Par X. HINAULT – Novembre 2014 – www.mon-club-elec.fr
Ce qu'on va faire ici...
Je fais ici une petite mise au point en ce qui concerne l'usage de l'IDE Arduino et du port série (UART) sur pcduino...
Pour comprendre
Pour avoir les idées claires, il faut comprendre les points suivants :
• le pcduino natif est livré avec un IDE Arduino « modifié » (à ne pas confondre avec l'IDE Arduino « classique ») qui permet l'accès directement aux
broches E/S etc... et ne communique pas par le port série pour contrôler le mini-PC. Je considère cet IDE Arduino modifié comme à peu près inutile, dans
la mesure où la librairie fait le même job tout en offrant la possibilité d'inclure dans le même code les fichiers, etc... Je conseille de désinstaller cet IDE.
• il est tout à fait possible d'utiliser l'IDE Arduino « classique » sur le mini-PC pour programmer une carte Arduino à distance: cette solution est
intéressante dès lors que l'on voudra reprogrammer à distance par accès VNC une carte Arduino connectée avec le mini-PC. Cet IDE sera à installer.
• enfin, il est tout à fait possible d'utiliser le port série au sein d'un programme Pyduino pour communiquer avec une carte Arduino (ou tout autre
dispositif UART), soit par USB, soit directement hardware (broche à broche entre mini-pc et arduino)
L'utilisation d'une carte Arduino avec un mini-pc pourra sembler étonnante, mais en fait, elle permet de couvrir les 20 % de situations où le mini-pc ne fera pas
bien, voire ne fera pas, des choses faciles à faire avec Arduino (servomoteurs, capteurs spécifiques, etc...). Cette technique permet aussi d'ajouter facilement des
broches analogiques et E/S au mini-PC. Il suffit alors d'utiliser Arduino pour faire ces tâches et d'utiliser la communication série au sein d'un code Pyduino pour
récupérer les informations utiles pour le mini-pc. Un autre intérêt de cette façon de procéder est de dissocier le code Arduino de bas niveau, robuste, autonome du
code de « haut » niveau exécuté côté mini-pc.
Mini-PC : Pyduino : UART, IDE Arduino and co sur le pcduino - Par X. HINAULT – Novembre 2014 – www.mon-club-elec.fr – p. 1 / 11
L'IDE Arduino « modifié » livré avec le pcduino
C'est la version installée par défaut sur le pcduino lorsqu'on le reçoit. Cette version permet d'utiliser l'IDE Arduino et du code Arduino pour contrôler les ports
E/S de la carte mini-pc, comme on le ferait pour une carte Arduino.
Limites
Par contre, ceci se limite aux GPIO et ne concerne pas les autres fonctionnalités du système notamment multimédia.
D'autre part, l'environnement Java est assez lourd et l'IDE Arduino n'est pas très fluide sur le mini-PC...
C'est à cause notamment de ces limites que j'ai créé Pyduino qui permet dans un même code de gérer aussi bien GPIO que multimédia, tout en ajoutant les
possibilités du langage Python (souplesse de codage, nombreuses librairies, utilisable en mode interpréteur, ...) . De plus l'IDE Pyduino écrit en PyQt est très léger,
donnant une bonne fluidité d'usage sur le mini-PC.
En pratique
En clair, avec Pyduino, vous n'avez pas besoin de cet IDE que vous allez pouvoir enlever, ce qui se fait simplement en ligne de commande :
$ sudo apt-get remove pcduino-arduino-ide
$ sudo apt-get autoremove
A titre indicatif, l'IDE Arduino modifié + Java occupent ~200Mo de NAND là où l'ensemble de la chaîne Python (y compris graphique) atteint à peine 100Mo...
Pour plus de détails, voir la procédure « Alléger la mémoire NAND »
Note
Le seul intérêt potentiel de l'IDE Arduino modifié est de s'inspirer du code C utilisé pour accéder aux fonctionnalités GPIO du mini-pc.
Mini-PC : Pyduino : UART, IDE Arduino and co sur le pcduino - Par X. HINAULT – Novembre 2014 – www.mon-club-elec.fr – p. 2 / 11
Installer IDE Arduino « classique »
Le scénario
Ici, on souhaite pouvoir programmer une carte Arduino connectée au mini-pc : pour cela on va installer l'IDE Arduino « classique » non modifié, qui va permettre
de programmer Arduino comme on le ferait sur n'importe quel autre poste.
L'intérêt d'utiliser l'IDE Arduino « classique » sur le mini-PC est de pouvoir programmer une carte Arduino à distance : cette solution est intéressante dès lors
que l'on voudra reprogrammer à distance par accès VNC une carte Arduino connectée avec le mini-PC.
Encore une fois, L'utilisation d'une carte Arduino avec un mini-pc pourra sembler étonnante, mais en fait, elle permet de couvrir les 20 % de situations où le minipc ne fera pas bien, voire ne fera pas, des choses faciles à faire avec Arduino (servomoteurs, capteurs spécifiques, etc...). Cette technique permet aussi d'ajouter
facilement des broches analogiques et E/S au mini-PC. Il suffit alors d'utiliser Arduino pour faire ces tâches et d'utiliser la communication série au sein d'un code
Pyduino pour récupérer les informations utiles pour le mini-pc. Un autre intérêt de cette façon de procéder est de dissocier le code Arduino de bas niveau, robuste,
autonome du code de « haut » niveau exécuté côté mini-pc.
Installation
La procédure est classique à tout système Ubuntu / Debian :
sudo apt-get install arduino
Soyez patient, çà peut prendre un petit moment... 120 Mo d'un coup à installer...
Ensuite, il faut faire en sorte que le port série Arduino soit bien détecté ce qui se fait de la façon suivante sous Ubuntu 12.04 LTS (connecter la carte Arduino
avant) :
sudo usermod -a -G dialout $USER
sudo chmod a+rw /dev/ttyACM0
Voilà, cette procédure a installé l'IDE Arduino et toutes ses dépendances en zone « système »... noté que le logiciel Arduino se trouve en /usr/share/arduino et qu'il
faudra être sudo pour installer des librairies complémentaires.
Fignolages
Dernière chose : si l'IDE Arduino est trop grand au lancement, il est possible de le réduire en éditant le fichier caché suivant :
geany /home/ubuntu/.arduino/preferences.txt
Modifier les lignes :
editor.window.height.default=500
editor.window.height.min=500
Mini-PC : Pyduino : UART, IDE Arduino and co sur le pcduino - Par X. HINAULT – Novembre 2014 – www.mon-club-elec.fr – p. 3 / 11
Résultat
En lançant l'IDE on obtient :
Voilà, vous êtes parés pour programmer la carte Arduino de façon distante : c'est suffisamment fluide sur le pcduino v3 pour faire du co-développement Arduino /
Pyduino sur le mini-pc par accès VNC.
Mini-PC : Pyduino : UART, IDE Arduino and co sur le pcduino - Par X. HINAULT – Novembre 2014 – www.mon-club-elec.fr – p. 4 / 11
Communiquer avec Arduino sur le port série depuis un code Pyduino
Ce que l'on va faire ici
A présent nous sommes en mesure de faire communiquer Pyduino et Arduino ensemble via le port série, ce qui ouvre la possibilité d'utiliser le meilleur des 2
mondes ensemble... Et c'est aussi la certitude de ne JAMAIS ETRE BLOQUE sur un projet : ce que le mini-PC ne saura pas faire, Arduino le fera et inversement !!
En un mot, vous obtenez ici en quelque sorte le « système embarqué universel »... sans vous ruiner en plus ! C'est bien mieux que les cartes Galileo et compagnie
par exemple...
Code côté Arduino (sur le mini-PC)
On va commencer par faire un code Arduino très simple qui va être un « miroir série » :
// --- Déclaration des variables globales --int octetReception=0; // variable de stockage des valeurs reçues sur le port Série
long nombreReception=0; // variable de stockage du nombre reçu sur le port Série
long nombreReception0=0; // variable de stockage du dernier nombre reçu sur le port Série
String chaineReception=""; // déclare un objet String vide pour reception chaine
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme
void setup()
{ // debut de la fonction setup()
Serial.begin(115200); // initialise connexion série à 115200 bauds
// IMPORTANT : régler le terminal côté PC avec la même valeur de transmission
} // fin de la fonction setup()
// ********************************************************************************
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension
void loop(){ // debut de la fonction loop()
//---- code type réception chaine sur le port série --while (Serial.available()>0) { // tant qu'un octet en réception
octetReception=Serial.read(); // Lit le 1er octet reçu et le met dans la variable
if (octetReception==10) { // si Octet reçu est le saut de ligne
Serial.println (chaineReception); // affiche la chaine recue
chaineReception=""; //RAZ le String de réception
break; // sort de la boucle while
}
else { // si le caractère reçu n'est pas un saut de ligne
chaineReception=chaineReception+char(octetReception); // ajoute le caratère au String
//Serial.print(char(octetReception)); // affiche la chaine recue
}
} // fin tant que
octet réception
//----- une fois que le saut de ligne est reçu, on sort du While et on se positionne ici
} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
Mini-PC : Pyduino : UART, IDE Arduino and co sur le pcduino - Par X. HINAULT – Novembre 2014 – www.mon-club-elec.fr – p. 5 / 11
Test du code Arduino (sur le mini-PC)
A présent, copier/coller ce code dans l'IDE Arduino sur le mini-PC, et programmer la carte Arduino.
Ensuite, ouvrir le terminal série Arduino, bien vérifier l'on l'option « Newline » est sélectionnée et que le débit est sur 115200.
Ensuite, saisir une chaine dans le champ d'envoi du terminal série : la chaine doit s'afficher dans le Terminal.
Bien, si on se résume, on a :
• copié/collé un code vers le mini-PC par accès VNC
•
•
puis programmé la carte Arduino de façon distante
et enfin vérifié que le code Arduino fonctionne bien, le tout de façon distante...
Bluffant quoi... la carte Arduino pourrait être au grenier, ou n'importe où... et par le réseau vous la contrôlez TOTALEMENT... Vous pouvez même en avoir le
retour visuel par VNC si une webcam est connectée... Et tout çà pour ~50€ de matos... ! Allez, on continue..
Mini-PC : Pyduino : UART, IDE Arduino and co sur le pcduino - Par X. HINAULT – Novembre 2014 – www.mon-club-elec.fr – p. 6 / 11
Code côté Pyduino (sur le mini-PC)
Maintenant que nous avons une carte Arduino qui communique sur le port série, nous allons pouvoir la faire communiquer avec un code Pyduino, ce qui va donc
permettre de « connecter les 2 mondes » au besoin.
Important : pour la suite, fermer et quitter complètement l'IDE Arduino sur le mini-pc pour éviter les conflits sur le port série.
Le code Pyduino est également simple :
#--- setup --def setup():
#Uart.begin(115200)
Uart.begin(115200,5, "/dev/ttyACM0") # debit, timeout, port
# -- fin setup -# -- loop -def loop():
chaineSaisie=raw_input("Saisir chaine a envoyer vers uart : ")
# saisie chaine
#print chaineSaisie
Uart.println(chaineSaisie) # envoie la chaine saisie vers Uart avec saut de ligne
while not Uart.available(): # attend caracteres entrant = attend reponse
pass # ne fait rien
delay(10)
# laisse le temps aux caracteres d'arriver...
while Uart.available(): # pour lire tout ce qui entre
chaine=Uart.waitingAll() # lit chaine en reception jusqu'a plus rien...
if not Uart.available(): delay(10)
# attend caracteres entrant si plus rien
print "chaine recue = "+ chaine
Mini-PC : Pyduino : UART, IDE Arduino and co sur le pcduino - Par X. HINAULT – Novembre 2014 – www.mon-club-elec.fr – p. 7 / 11
Test de la communication Pyduino / Arduino (sur le mini-PC)
A présent, lancer l'exécution du code Arduino : saisir une chaîne à l'invitation et valider. On voit très clairement que Arduino a bien recu la chaine et la renvoit :
Mission accomplie : Arduino communique avec Pyduino via le port série !
Merci qui... ? Pyduino bien sûr !
Mini-PC : Pyduino : UART, IDE Arduino and co sur le pcduino - Par X. HINAULT – Novembre 2014 – www.mon-club-elec.fr – p. 8 / 11
Quelques trucs techniques de mise en oeuvre
Connexion directe hardware UART Arduino <=> UART mini-PC
La bonne nouvelle, si on lit la documentation de l'ATMega 328 qui sert de base à l'Arduino : la tension Vih (c'est à dire la tension considérée comme un
niveau HAUT) vaut : 0,6 x Vcc soit en 5V ... 0.6 x 5V = 3V ! Donc, un niveau 3.3V envoyé par le mini-PC sera considéré comme HAUT par Arduino !!
• Dans l'autre sens, Arduino appliquera 5V sur la broche du mini-PC qui sera donc considéré comme du 3.3V et donc un niveau HAUT...
• Ainsi, on pourra très simplement :
• connecter Arduino sur l'alim 5V du pcduino ou sa propre alim
• connecter directement Rx (0) pcduino => Tx(1) Arduino
• connecter directement Tx(1) => Rx(0) Arduino
• connecter GND et GND de Arduino et pcduino ++++
• Les "puristes" pourront peut-être "crier au loup"... mais çà fonctionne très bien, même en 115200 !
•
Utiliser une carte Arduino « minimale » pré-programmée avec le mini-PC
Pour réduire les couûts, il est assez facile, une fois le code Arduino opérationnel et au point, d'utiliser une carte Arduino minimale et de la connecter en connexion
directe sur le mini-pc.
L'arduino minimale pourra se résumer à un ATmega328 préprogrammé + les 3 composants indispensables (quartz 16 Mhz, résistance). Coût de l'opération = 5€ !
Par contre de cette façon, le développement sera plus compliqué... car on pert la communication USB nécessaire pour l'IDE Arduino.
Mini-PC : Pyduino : UART, IDE Arduino and co sur le pcduino - Par X. HINAULT – Novembre 2014 – www.mon-club-elec.fr – p. 9 / 11
Conclusion
Les applications potentielles sont assez « énormes » en ce sens que l'on peut utiliser tout le potentiel d'Arduino (par exemple contrôler un bras robotisé à 5 degrés
de liberté) avec tout le potentiel du mini-PC (par exemple, créer une interface Web graphique de contrôle) en réalisant l'interaction entre les 2 par une
communication série adaptée... le tout contrôlable, programmable, testable, modifiable par VNC à distance !
d'après le film « Treize Jours ».
Mini-PC : Pyduino : UART, IDE Arduino and co sur le pcduino - Par X. HINAULT – Novembre 2014 – www.mon-club-elec.fr – p. 10 / 11
Mini-PC : Pyduino : UART, IDE Arduino and co sur le pcduino - Par X. HINAULT – Novembre 2014 – www.mon-club-elec.fr – p. 11 / 11
Téléchargement