我正在制作一个简单的 shell 脚本来向串行设备写入和读取数据。
我在终端使用这些命令,它们响应正确:
为了写我正在使用:
echo -en '\xAA\x04\xC2' > /dev/ttyUSB0
要阅读,我正在使用 read:
cat -v < /dev/ttyUSB0
但是当我将其包含在 shell 脚本中时,它没有响应。我需要这方面的帮助。
我还想知道,当我发送写入命令时,它应该以十六进制格式提供输出,但它以这种格式提供输出 M--*^NM-^H
也需要这方面的帮助。
我希望你的cat
语句正在阻塞等待文件结尾。它可能将您的输入 tty 视为标准终端设备,在这种情况下,它将需要文件结束符来终止输入(例如 Control-D),并且它可以对输入和输出应用其他处理。你最好熟悉一下stty
命令及其选项(参见stty 手册页)。尝试做stty -F /dev/ttyUSB0
查看设置了哪些选项。
读取输入的最简单方法可能是一次读取一个字符。您可以尝试使用以下脚本。这将从输入中一次读取一个字符,直到输入“q”为止。
stty -F /dev/ttyUSB0 raw
stty -F /dev/ttyUSB0 -echo
while read -rs -n 1 c && [[ $c != 'q' ]]
do
echo "read <$c>" # Replace this with code to handle the characters read
done < /dev/ttyUSB0
如果 -F 不起作用,则将 stdin 重定向到设备。
对于您的输出问题,我认为它有效,但您看到的字符显示为字符而不是十六进制代码。要查看十六进制代码(仅用于验证测试 - 我认为您不想将十六进制代码发送到终端),请尝试:
echo -en '\xAA\x04\xC2' | od -tx1
您可能还希望在输出时设置原始模式,以避免驱动程序更改输出字符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)