回声/管道命令输出到串行线


0

我有一个在/ dev / ttyUSB0上以115200波特运行的串行设备。我需要将命令的输出传递给它。我需要这样的东西:

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

提前感谢您的帮助!

附加信息:
我有一个从arduino跑出来的grbl Sheild。它控制一台数控机床。我可以通过串行连接(在115200波特上运行的/ dev / ttyUSB0)将GCode发送到arduino。我通常通过arduino ide的串行监视器发送gcode。我有几个用于生成gcode的python文件,它们输出到stdout。我可以复制并粘贴gcode,但是很多将要使用它的人可能对此感到困惑。

Answers:


3

我认为以下命令应该起作用:

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

注意:

  • 这将启动将输入和输出重定向到您的输出设备的外壳;
  • 输入需要重定向,因为它stty可以在标准输入设备上工作,而其诊断输出仍应定向到启动终端;
  • stty raw 停止将多余的字符添加到输出中;
  • echo -n在字符串末尾停止隐式换行符,而echo -e如果设备需要,则允许使用斜线转义的转义序列产生不可打印的字符;
  • 并且需要一个子外壳,以便/dev/ttyUSB0不会关闭并重新打开它,这可能会重置其设置。

不要重定向标准错误:您不希望将错误消息发送到设备!

我已经对此进行了测试,/dev/tty1并且似乎可以正常工作,但是我没有串行设备可以完全验证它。我需要在root shell中才能运行该命令,但是您的权限可能允许用户shell使用它。


这项工作会从另一个程序进行吗?这看起来非常类似于我目前悬赏的问题。superuser.com/questions/1300782/…–
Tim_Stewart,

在另一个程序中,您的意思是某些东西会生成输出字符串而不是echo(尽管我不知道管道的位置)吗?如果是这样,当然可以。没有测试,我现在不容易做,我不确定是否可以阅读答复,这不是问题的必要条件。您需要尝试一下。
AFH

我想到的程序是在kali linux中处理的。例如,您可以在其中使用“ crunch 4 4 abcd | aircrack-ng * .cap”将其通过管道传输到其他程序。而不是通过管道将其传递给通过串行连接发送输出的程序。我愿意接受任何建议。我相信您也可以将其输出到文件中,如果这样做更容易?
Tim_Stewart '18

您可以使用sub-subshel​​l或命令分组{ ...; },但是将echo命令替换为函数或脚本名称可能更容易,并且可以在其中进行所需的操作。
AFH

非常感谢您的建议。如果有效,我会向您发送消息以要求奖励我的问题!
Tim_Stewart '18

0

您是否尝试过简单地将stdout定向到/ dev / ttyUSB0(command-that-gives-stdout> / dev / ttyUSB0)?我认为操作系统将为您处理任何缓冲和波特率转换。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.