web-dev-qa-db-fra.com

écriture sur le port série depuis la ligne de commande linux

À partir de Windows, je peux communiquer avec un périphérique à port série à l'aide des commandes suivantes:

mode com1: baud=9600 data=8 parity=n stop=1
copy con com1
alt+18alt+2ctrl+z

L'appareil lance l'opération demandée.

Lorsque j'essaie de faire la même opération depuis une boîte Debian autonome ou depuis une instance de boîte virtuelle Debian de la même machine Windows, je n'ai pas eu de chance jusqu'à présent.

Voici les commandes linux équivalentes (du moins je le pense)

stty -F /dev/ttyS0 speed 9600 cs8 -cstopb -parenb
echo '\x12\x02' > /dev/ttyS0

Rien ne se passe.

Quelqu'un peut-il me diriger s'il vous plaît dans la bonne direction?

42
erin c
echo '\x12\x02'

ne sera pas interprété et écrira littéralement la chaîne \x12\x02 (et ajoutez une nouvelle ligne) au port série spécifié. Utilisez plutôt

echo -n ^R^B

que vous pouvez construire sur la ligne de commande en tapant CtrlVCtrlR et CtrlVCtrlB. Ou il est plus facile d'utiliser un éditeur pour taper dans un fichier de script.

La commande stty devrait fonctionner, sauf si un autre programme interfère. Un coupable commun est gpsd qui recherche les périphériques GPS branchés.

17
wallyk

ECRAN:

[~ # ~] note [~ # ~]: L’écran n’est pas en mesure d’envoyer du contenu hexadécimal, pour autant que je sache. Pour ce faire, utilisez echo ou printf

J'utilisais les suggestions de ce post pour écrire sur un port série, puis en utilisant les informations d'un autre post pour lire à partir du port, avec des résultats mitigés. J'ai trouvé que l'utilisation d'écran est une solution "plus facile", car elle ouvre une session de terminal directement avec ce port. (Je mets plus facile entre guillemets, parce que l'écran a une interface vraiment bizarre, IMO, et prend quelques lectures supplémentaires pour le comprendre.)

Vous pouvez émettre cette commande pour ouvrir une session d’écran. Tout ce que vous tapez sera envoyé au port, plus les valeurs de retour seront imprimées en dessous:

screen /dev/ttyS0 19200,cs8

(Modifiez les options ci-dessus pour répondre à vos besoins en termes de vitesse, de parité, de bits d'arrêt, etc.). Je réalise que l'écran n'est pas la "ligne de commande linux" comme le demande expressément le message, mais je pense que c'est dans le même esprit. De plus, vous n'avez pas à taper écho et citations à chaque fois.

ECHO:

Suivez la réponse du prétorien droïde. CEPENDANT, cela n’a pas fonctionné avant que j’utilise également la commande cat (cat < /dev/ttyS0) while J'envoyais la commande echo.

PRINTF:

J'ai trouvé que l'on peut aussi utiliser la commande '% x' de printf:

c="\x"$(printf '%x' 0x12)
printf $c >> $SERIAL_COMM_PORT

Encore une fois, pour printf, démarrez cat < /dev/ttyS0 _ avant d’envoyer la commande.

7
MrUser