J'essaie de parler à un appareil à l'aide d'un convertisseur USB à série sur Linux. Les pilotes fonctionnent, l'appareil existe à/dev/ttyusb0.
Il y a un problème étrange (coché avec un câble NULL-MODEM à un autre ordinateur): quel que soit le programme que j'utilise pour vous connecter au périphérique (mastic, minicom, écran), ils envoient tous un CR (\ r) en entrée. I (et mon appareil) attendez-vous à un LF (\ n) en entrée.
Lorsque j'utilise la console pour envoyer une commande - il envoie un lf:
# echo Hello World > /dev/ttyUSB0
Résultats dans "Hello World\N". J'ai également écrit le programme World Classic C Hello (Printf ("Bonjour, World!\N");) et redirigèrent la sortie à/dev/ttyusb0 - me donne également un "bonjour mondial\n" à l'autre bout de la ligne .
Mais tous les autres programmes de terminal envoient un\R en entrée.
Que se passe t-il ici?
Veuillez vous assurer que vous avez défini le port TTYUSBX en mode RAW. Sinon, il peut y avoir des remplaçants de caractères par exemple.\r avec\n et vice versa sur le côté récepteur.
Si vous utilisez picocom
, il s'agit de mapper la sortie série de CR à CR + LF.
Exemple: picocom /dev/ttyS0 --baud 19200 --omap crcrlf --echo
En fait capable d'envoyer des commandes à l'appareil maintenant!
Tu devrais utiliser:
echo -e "Hello World\n" > /dev/ttyUSBx
où x = {0,1, ... n}
Le "-E" est utilisé pour envoyer (interprétation de) caractères spéciaux
Vérifiez l'aide sur Ubuntu 18.04 Terminal:
~$ help echo
eCHO: ECHO [-NEE] [arg ...] Écrivez des arguments sur la sortie standard.
Display the ARGs, separated by a single space character and followed by a
newline, on the standard output.
Options:
-n do not append a newline
-e enable interpretation of the following backslash escapes
-E explicitly suppress interpretation of backslash escapes
(...)