在 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
. 或者cu
uucp自带的程序。但是用纯 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 命令的消息将显示在您的终端上。