Utiliser un terminal Linux avec Arduino

Introduction
Sur les systèmes Linux, il est assez facile de se connecter avec un terminal sur un périphérique, même s'il s'agit d'un périphérique USB.
Ainsi donc, il est possible d'afficher à l'écran toute information envoyée sur le périphérique série d'Arduino.

Programme d'exemple
En guise de programme d'exemple, vous pouvez utiliser le code et le montage publiés dans l'article "Débugger à l'aide du port série (via USB)"... ou bien encore utiliser le petit bout de code ci-dessous.

source: SerialPing.pde
/*
 *  Send a Ping message on the Serial port every second.
 *  and blink the onboard led (pin 13) each sending 
 *
 */
int pinPingLed = 13; // utiliser la led sur le board
int counter = 0; 

void setup(){
  pinMode( pinPingLed, OUTPUT );
  Serial.begin( 9600 );
}

void loop(){
  digitalWrite( pinPingLed, HIGH );
  Serial.print( "Ping # " );
  Serial.print( counter );
  Serial.print( "\r\n" );
  delay( 200 ); // wait 100ms
  digitalWrite( pinPingLed, LOW );
  delay( 800 );  
  counter++;
}

Utiliser Screen
Etape 1: Identifier le device USB
Avant toutes choses, il faut identifier le périphérique USB sur lequel le board Arduino est branché.
La méthode d'identification est décrite dans l'article "identification du port USB Linux sur lequel Arduino est connecté".
Dans mon cas il s'agit de /dev/ttyACM0, pour d'autre, il pourrait s'agir de /dev/ttyUSB0

Etape 2: Il faut tout d'abord configurer correctement le périphérique tty.
stty -F /dev/ttyACM0 cs8 9600 ignbrk -brkint -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts

ttyACM0 est le périphérique USB attaché au board Arduino.
Attention, l'exécution de cette commande envoi un signal reset (et donc redémarrage du programme).

Cette version là semble incorrecte: stty -F /dev/ttyACM0 cs8 115200 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts 

Etape 3: Démarré une session interactive
screen /dev/ttyACM0 9600
Attention:
  1. Démarrer une session interactive aura pour effet d'envoyer un signal reset (et donc redémarrage du programme).
  2. Pour quitter la session screen, taper "ctrl-a + c".
    Cela quitte temporairement la session mais ne clôture pas la communication!
    Le port reste en cours d'utilisation!, il suffit de taper la commande exit pour revenir dans la session screen.
    Pour libérer la session, il faut utiliser la commande kill pour terminer le(s) processus "screen" (je n'ai rien trouvé de mieux pour le moment :-/ ).
  3. Quelques raccourcis clavier pour screen sont disponibles ici.
Utiliser Tail et Echo
Il est possible d'utiliser séparément la commande tail et echo pour respectivement lire et écrire sur le périphérique USB.

Comme pour l'utilisation de screen, il faut correctement initialiser le périphérique usb à l'aide de la commande stty (voir ci-dessus)

Pour lire ce qui est envoyé par Arduino, il faut utiliser la commande suivante:
tail -f /dev/ttyACM0
Note: Je ne suis pas arrivé à faire fonctionner cette instruction sur Ubuntu. C'est visiblement un problème déjà rencontré. Il semble que cela fonctionne avec Fedora, Slackware (voir cet article dans le forum Arduino). Par contre, "screen" fonctionne très bien.

Pour écrire sur le périphérique, il faut utiliser la commande
echo "mon texte" > /dev/ttyACM0

S'il y a des problèmes de buffering, il est aussi possible d'envoyer le texte sans carriage/return.
echo "mon texte" > /dev/ttyACM0

Ressources:

Aucun commentaire