gpt4 book ai didi

linux - 用于从串行通信写入和读取数据的 Shell 脚本

转载 作者:太空狗 更新时间:2023-10-29 11:08:35 25 4
gpt4 key购买 nike

我正在制作一个简单的 shell 脚本来向串行设备写入和读取数据。我在终端使用这些命令,它们响应正确:

我正在使用:

echo -en '\xAA\x04\xC2' > /dev/ttyUSB0

要阅读,我正在使用阅读:

cat -v < /dev/ttyUSB0

但是当我将其包含在 shell 脚本中时,它没有响应。我需要这方面的帮助。另外我想知道当我发送写命令时,它应该给我十六进制格式的输出但它给我这种格式的输出 M--*^NM-^H也需要这方面的帮助。

最佳答案

我希望您的 cat 语句阻塞等待文件结束。它可能将您的输入 tty 视为标准终端设备,在这种情况下,它将需要一个文件结束字符来终止输入(例如,Control-D),并且它可以对输入和输出应用其他处理。您最好熟悉 stty 命令及其选项(参见 stty man page )。尝试执行 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 不起作用,将标准输入重定向到设备。

对于您的输出问题,我认为它可以正常工作,但您看到的字符显示为字符而不是十六进制代码。要查看十六进制代码(仅用于验证测试 - 我认为您不想将十六进制代码发送到终端),请尝试:

echo -en '\xAA\x04\xC2' | od -tx1

您可能还希望在输出时设置原始模式以避免驱动程序更改输出字符。

关于linux - 用于从串行通信写入和读取数据的 Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28763863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com