Saída do comando Echo / Pipe para a linha Serial

0

Eu tenho um dispositivo serial rodando em 115200 bauds em / dev / ttyUSB0. Eu preciso Pipe a saída de um comando para isso. Eu preciso de algo como:

command-that-gives-stdout | command-that-puts-stdin-to-serial --baud 115200 /dev/ttyUSB0

Obrigado pela sua ajuda!

Informações adicionais:
Eu tenho uma Sheild grunhida saindo de um arduino. Ele controla uma máquina CNC. Eu posso enviar o GCode para o arduino através da conexão serial (/ dev / ttyUSB0 rodando em 115200 bauds). Eu normalmente envio gcode através do monitor serial do arduino ide. Eu tenho vários arquivos python para gerar gcode e eles saem para o stdout. Eu poderia simplesmente copiar e colar o gcode, mas muitas pessoas que o usarão podem ficar confusas com isso.

    
por Kaiden Prince 26.11.2014 / 15:38

2 respostas

2

Acho que o seguinte comando deve funcionar:

( stty raw speed 115200 >&2; echo -ne 'output-string' ) >/dev/ttyUSB0 <&1

Nota:

  • isso inicia um shell com entrada e saída redirecionada para seu dispositivo de saída;
  • entrada precisa de redirecionamento porque stty funciona no dispositivo de entrada padrão, enquanto sua saída de diagnóstico ainda deve ser direcionada para o terminal de inicialização;
  • stty raw impede que caracteres estranhos sejam adicionados à saída;
  • echo -n pára a nova linha implícita no final da string, enquanto echo -e permite que sequências de escape com redução de barra produzam caracteres não imprimíveis se o seu dispositivo exigir isso;
  • e um subshell é necessário para que /dev/ttyUSB0 não seja fechado e reaberto, o que pode redefinir suas configurações.

Não redirecionar erro padrão: você não quer mensagens de erro enviadas para o dispositivo!

Eu testei isso em /dev/tty1 e parece funcionar, mas não tenho um dispositivo serial para verificá-lo completamente. Eu precisava estar em um shell de root para o comando funcionar, mas suas permissões podem permitir isso a partir de um shell de usuário.

    
por 28.11.2014 / 22:34
0

Você tentou simplesmente direcionar o stdout para o / dev / ttyUSB0 (comando-que-dá-stdout > / dev / ttyUSB0)? Eu acho que o sistema operacional lidaria com qualquer conversão de buffer e taxa de transmissão para você.

    
por 26.11.2014 / 19:43