在 Linux 中,我需要向 eg 上的串行端口发送一系列 AT 命令/dev/ttyS0,它必须在发送下一个命令之前等待OK答案。我可以想象做类似的事情
echo 'AT' > /dev/ttyS0
echo 'ATS0=0' > dev/ttyS0
...
但这不会评估该端口上设备的答案。
是否有一种非常简单的方法可以在 bash 脚本中自动执行此操作,可能借助socat和/或microcom 在最简单的 linux 系统上找不到的工具。
在 Linux 中,我需要向 eg 上的串行端口发送一系列 AT 命令/dev/ttyS0,它必须在发送下一个命令之前等待OK答案。我可以想象做类似的事情
echo 'AT' > /dev/ttyS0
echo 'ATS0=0' > dev/ttyS0
...
但这不会评估该端口上设备的答案。
是否有一种非常简单的方法可以在 bash 脚本中自动执行此操作,可能借助socat和/或microcom 在最简单的 linux 系统上找不到的工具。
如果您安装了 PPP 软件包,您可以使用chat它附带的程序。或者你可以使用kermit. 或者cuuucp自带的程序。但是用纯 shell 来做这件事比较棘手。您也许可以使用 read 和 printf 函数,并将 stdio 重定向到端口。
一些片段:
stty -F /dev/ttyS0 38400 raw
chat -f script.txt < /dev/ttyS0 > /dev/ttyS0
应该让你开始。
这是在 bash 脚本中自动执行此操作的一种非常简单的方法:
$ (echo AT; echo ATS0=0) | atinout - /dev/ttyS0 -
AT
OK
ATS0=0
OK
$
通过使用专门为此功能编写的atinout程序作为其唯一目的。上面的输出是假设ATE1;没有 echo 来自调制解调器的响应将是"\r\n\r\nOK\r\n\r\nOK\r\n"。
在上面的示例中,atinout 将发送第一个命令AT(用 正确终止命令行\r),等到它收到最终结果代码(例如OK),然后首先继续处理下一个命令。
您可以通过指定文件而不是第一个来提供来自文件的输入-,如果要捕获输出,请提供文件名而不是最后一个-。如果你愿意,你可以在这里使用 doc 而不是分组的 echo 命令。
要显示来自的消息:
echo -e "ATHO\r" > /dev/ttyACM0
或任何其他调制解调器命令类型who以查找终端号,然后运行:
cat /dev/ttyACM0 >& /dev/pts/8 &
然后来自 AT 命令的消息将显示在您的终端上。