/ / Shell para escrever e ler dados da comunicação serial - linux, shell

Script shell para escrever e ler dados de comunicação serial - linux, shell

Estou criando um script de shell simples para gravar e ler dados no dispositivo serial. Estou usando esses comandos no terminal e eles estão respondendo corretamente:

Para escrever, estou usando:

echo -en "xAAx04xC2" > /dev/ttyUSB0

Para ler, estou usando read:

cat -v < /dev/ttyUSB0

mas quando incluo isso em um script de shell,não está respondendo. Preciso de ajuda sobre isso. Também quero saber que, quando eu enviar o comando write, ele deve me dar saída em formato hexadecimal, mas está me dando saída neste formato M - * ^ NM- ^ H Também preciso de ajuda nisso.

Respostas:

2 para resposta № 1

Eu esperaria que o seu cat A instrução está bloqueando a espera do final do arquivo. Ele pode tratar sua entrada tty como um dispositivo de terminal padrão; nesse caso, será necessário um caractere de final de arquivo para finalizar a entrada (por exemplo, Control-D) e pode aplicar outro processamento à entrada e à saída. É melhor você se familiarizar com o stty comando e suas opções (consulte página de manual stty) Tente fazer stty -F /dev/ttyUSB0 para ver quais opções estão definidas.

A maneira mais fácil de ler a entrada pode ser:leia um único caractere de cada vez. Você pode tentar com o seguinte script. Isso lerá um único caractere de cada vez da entrada até que um "q" seja inserido.

stty -F /dev/ttyUSB0 raw
stty -F /dev/ttyUSB0 -echo
while read -rs -n 1 c && [[ $c != "q" ]]
do
echo "read <$c>" # Replace this with code to handle the characters read
done < /dev/ttyUSB0

Se -F não funcionar, redirecione o stdin para o dispositivo.

Para o seu problema de saída, acho que está funcionandomas você está vendo os caracteres exibidos como caracteres e não os códigos hexadecimais. Para ver os códigos hexadecimais (apenas para testes de verificação - acho que você não deseja enviar os códigos hexadecimais para o terminal), tente:

echo -en "xAAx04xC2" | od -tx1

Você também pode querer definir o modo bruto ao emitir para evitar que o driver altere os caracteres de saída.