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