У меня есть последовательное устройство, работающее на 115200 бод в /dev /ttyUSB0. Мне нужно передать вывод команды к нему. Мне нужно что-то вроде:

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

Впереди спасибо за помощь!

Дополнительная информация:
У меня есть гриль Шилд, убегающий от ардуино. Управляет станком с ЧПУ. Я могу отправить GCode на Arduino через последовательное соединение (/dev/ttyUSB0, работающий на скорости 115200 бод). Обычно я посылаю код через последовательный монитор arduino ide. У меня есть несколько файлов Python для генерации gcode, и они выводят на стандартный вывод. Я мог бы просто скопировать и вставить gcode, но многие люди, которые будут его использовать, могут запутаться из-за этого.

2 ответа2

3

Я думаю, что следующая команда должна работать:

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

Замечания:

  • это запускает оболочку с вводом и выводом, перенаправленным на ваше устройство вывода;
  • ввод требует перенаправления, потому что stty работает на стандартном устройстве ввода, в то время как его диагностический вывод все еще должен быть направлен на запускающий терминал;
  • stty raw останавливает добавление посторонних символов к выводу;
  • echo -n останавливает неявную новую строку в конце строки, в то время как echo -e позволяет escape-последовательностям с косой чертой создавать непечатаемые символы, если ваше устройство этого требует;
  • и необходим подоболочек, чтобы /dev/ttyUSB0 не закрывался и не открывался снова, что может сбрасывать его настройки.

Не перенаправлять стандартную ошибку: вы не хотите, чтобы сообщения об ошибках отправлялись на устройство!

Я проверил это на /dev/tty1 и, похоже, оно работает, но у меня нет последовательного устройства для полной проверки. Мне нужно было находиться в корневой оболочке, чтобы команда работала, но ваши разрешения могут разрешить это из пользовательской оболочки.

0

Вы пробовали просто направить стандартный вывод в /dev /ttyUSB0 (команда-что-дает-стандартный вывод> /dev /ttyUSB0)? Я бы подумал, что ОС справится с любой буферизацией и преобразованием скорости передачи для вас.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .