Eu tenho um dispositivo serial (leitor de termopar Omega RDXL4SD, detalhes de comunicação p 22 aqui ) conectado a uma porta USB no meu Raspberry Pi executando Raspbian por meio de um cabo FTDI. Ele aparece em /dev/ttyUSB0 e a saída parece perfeita se eu exibi-la chamando
pi@raspberrypi:~ $ screen /dev/ttyUSB0 9600
A saída são alguns números. Cada vez que ele cospe uma linha, o cursor retorna ao início da linha e a sobrescreve, de modo que haja apenas uma linha de números na tela por vez.
Agora, quero usar cat
, não screen
para obter o mesmo efeito, mas quando o faço, recebo caixas com pontos de interrogação:
pi@raspberrypi:~ $ cat /dev/ttyUSB0
4401010000
Presumo que seja algum tipo de problema de codificação. Você pode explicar o que pode ser diferente sobre como esses caracteres estão sendo interpretados em screen
versus cat
ou sugerir outras etapas de solução de problemas?
Caso ajude:
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.9.41-v7+ #1023 SMP Tue Aug 8 16:00:15 BST 2017 armv7l
GNU/Linux
pi@raspberrypi:~ $ stty -F /dev/ttyUSB0
speed 9600 baud; line = 0;
min = 100; time = 2;
-icrnl -imaxbel
-opost -onlcr
-isig -icanon -echo
Editar: @meuh sugeriu adicionar -vet para exibir caracteres especiais. Agora que conheço essas bandeiras, meu problema específico está efetivamente resolvido! Eu ainda não me importaria com uma explicação de exatamente o que está acontecendo aqui.
pi@raspberrypi:~ $ cat -vet /dev/ttyUSB0
^M^B4201010000^X^X^X^X^M^B4301010000^X^X^X^X^M^B4401010000^X^X^X^X^M^B41010100000245^M^B4201010000^X^X^X^X^M^B4301010000^X^X^X^X^M^B4401010000^X^X^X^X^M^B41010100000245^M^B4201010000^X^X^X^X^M^B4301010000^X^X^X^X^M^B4401010000^X^X^X^X^M^B41010100000245^M^B4201010000
Acontece que os caracteres ^X, que são bytes de 0x18, são uma espécie de NaN não documentado neste protocolo. Existem várias portas de termopar e, se você conectar apenas um termopar, obterá uma linha com um valor de temperatura e várias linhas terminando em ^ X.
Por algum motivo, cat no meu terminal exibe esses caracteres como caixas, mas a tela não os exibe.