解决方案

解决方案

我正在尝试编写一个能够解释来自串行设备的数据的 bash 脚本。我以原始方式配置端口,然后我可以对 /dev/ttyUSB0 进行简单的 cat 操作并查看数据。我的问题是如何获取设备在 bash 变量中发送的单行数据,以便我可以自由地操作它。

我想在使用 Python 之前先在 bash 中使用它,这样我总是有一个我知道它可以在每台 Linux 机器上运行的脚本。

我收到的数据具有以下格式:STX<26 x 4Bit-Nibbles coded as ASCII Payload>ETX

理想情况下,每次获得新的数据字符串时,我都可以将新的有效负载(因此没有 STX 和 ETX)存储在 Bash 变量中。

解决方案

在@icarus回答的帮助下,我制作了一些像魅力一样的东西。首先,我配置串口以生成具有 STX 值的中断:

stty /dev/ttyUSB0 115200 intr 0x02

然后为了获取我想要的信息,我使用这个循环:

ETX=$'\003'
同时读取 -d "$ETX" 行;回显 $line;完成 < /dev/ttyUSB0

再次感谢您的帮助,在这个网站的第一次体验真的很棒。干杯

答案1

未经测试!

 #!/bin/bash
 ETX=$'\003'
 STX=$'\002'
 # Open /dev/ttyUSB0 open on FD9
 exec 9< /dev/ttyUSB0
 # do any stty stuff needed on fd9
 # e.g.
 # stty 9600 < /proc/self/fd/9 > /proc/self/fd/9
 # now loop, reading from the device,
 while IFS= read -rd "$ERX" -u 9 wibble
 do
    wibble=${wibble#"$STX"}
    printf 'Got %q\n' "$wibble"
    # Do something
 done

对于bash,如果数据包含 NUL 字节,则该方法将不起作用。zsh如果是这种情况,您需要使用它。

相关内容