Echo/Pipe 命令输出至串行线

Echo/Pipe 命令输出至串行线

我有一个在 /dev/ttyUSB0 上运行 115200 波特的串行设备。我需要将命令的输出通过管道传输给它。我需要类似的东西:

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

在此先谢谢您的帮助!

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

答案1

我认为以下命令应该有效:

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

笔记:

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

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

我已经测试过了/dev/tty1,它似乎可以工作,但我没有串行设备来完全验证它。我需要在 root shell 中才能使命令工作,但您的权限可能允许从用户 shell 执行该命令。

答案2

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

相关内容