Utilisation des utilitaires standards
Sous Linux, les ports série sont représentés par des fichiers. Ainsi, les utilitaires standard comme echo et cat permettent d’interagir avec eux, tandis que stty sert à modifier les paramètres du port.
Avec stty, il est possible de définir la vitesse de transmission (baud rate), le nombre de bits de données, la parité, le type de handshake (contrôle de flux) et d’autres paramètres. Ces réglages doivent souvent correspondre à ceux du périphérique ou de l’application pour que la communication fonctionne.
Pour afficher les paramètres actuels d’un port :
sudo stty -a -F <votre port>
Et voici un exemple de commande qui définit la vitesse de transmission (baud rate) du port ttyS0 à 9600, fixe le nombre de bits de données à 8 et active le handshaking RTS/CTS :
sudo stty -F /dev/ttyS0 9600 cs8 crtscts
Avec ces paramètres correctement configurés, nous pouvons envoyer des données au périphérique à l’aide de echo. Il est possible d’envoyer du texte brut vers un port série avec la commande suivante :
echo ‘TEXTE’ > /dev/ttyS0
Cependant, pour effectuer cette opération, il faut se connecter en tant que superutilisateur. Cela peut être fait avec la commande su -.
Dans notre cas, des symboles ASCII spéciaux, tels que ESC et Retour chariot (Carriage Return), sont nécessaires pour exploiter pleinement l’imprimante connectée. Une méthode simple consiste à utiliser l’argument -e de echo et les séquences d’échappement. Une séquence d’échappement ASCII commence par \x, suivie d’un nombre hexadécimal correspondant au caractère.
Par exemple, voici comment imprimer le mot “TEXTE” à l’aide de séquences d’échappement :
echo -e '\x54\x45\x58\x54'
Nous allons envoyer les messages suivants :
1B 40 | (ESC @, Initialiser) |
1B 6D | (ESC m, Coupe complète) |
4C 49 4E 45 20 31 | ("LIGNE 1") |
1B 21 80 | (Activer le soulignement) |
4C 49 4E 45 20 32 | ("LIGNE 2") |
0D 0A | (CR FF, Nouvelle ligne) |
1B 40 | (Coupe complète) |
L’argument -e est indispensable pour permettre l’utilisation des séquences d’échappement hexadécimales “\x”. Voici à quoi cela ressemble dans le terminal, ainsi que sur le résultat imprimé :
Alors que echo peut être utilisé pour envoyer des données via une connexion série, cat permet de les recevoir.
Dans notre exemple, l’imprimante répondra à des requêtes ESC/POS standard pour indiquer son état et son identifiant. Nous devons donc intercepter ces réponses.
Commencez par lancer cat, en écoutant le périphérique ttyS0 et en redirigeant la sortie vers un fichier texte :
cat /dev/ttyS0 > examplefile
L’application doit rester active pour recevoir les données, il faut donc ouvrir une nouvelle fenêtre ou un nouvel onglet du Terminal pour envoyer des commandes à l’imprimante. Nous utiliserons echo pour transmettre les requêtes suivantes :
1D 49 31 | (Demande d’identifiant de modèle) |
1D 49 32 | (Demande d’identifiant de type) |
Les réponses étant renvoyées au format hexadécimal, le fichier “examplefile” obtenu avec cat ne sera pas lisible directement. Pour les interpréter, passez le fichier dans hexdump :
Utilisation de gtkterm
Linux met également à disposition des terminaux série tels que minicom et gtkterm, qui permettent d’interagir plus facilement avec les ports série, en gérant à la fois l’entrée et la sortie, tout en offrant davantage d’options de formatage et de suivi.
Prenons gtkterm comme exemple.
Tout comme stty, il doit être lancé avec des arguments en ligne de commande pour définir les paramètres de connexion, si les valeurs par défaut ne conviennent pas.
Parmi les options utiles, citons l’écho local (pour visualiser les données envoyées), l’enregistrement des sessions (logging), l’affichage en hexadécimal, et l’envoi direct de données hexadécimales.
Observez également les indicateurs en bas à droite : ils affichent l’état des lignes de signaux DTR, RTS, CD, DSR et RI.
C’est un excellent moyen de vérifier que le périphérique est bien connecté et prêt à recevoir les données.