如何在bash中将一系列AT命令发送到串口?

时间:2013-02-14 15:50:09

标签: linux bash serial-port at-command

在Linux中,我需要将一系列AT命令发送到例如串口上。 /dev/ttyS0,必须在发送下一个命令之前等待OK答案。我可以想象做像

这样的事情
echo 'AT' > /dev/ttyS0
echo 'ATS0=0' > dev/ttyS0
...

但这不会评估该端口上设备的答案。

在bash脚本中是否有非常简单的自动化方式,可能借助于socat和/或microcom < strong>但没有在最简单的Linux系统上找不到的工具。

5 个答案:

答案 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)

您有错误:

cat 'AT'

表示显示AT文件我猜不存在。

相反,请尝试:

cat<<EOF>/dev/ttyS0
AT
ATS0=0

EOF

使用 here-doc

答案 4 :(得分:0)

  1. 进入终端
  2. 输入“sudo minicom -s”
  3. 进入“串口设置”并设置串口设置
  4. 输入“随设置更改?”
  5. 输入“将设置另存为 dfl”。 dfl 表示默认
  6. 输入“退出”
  7. 在新打开的 minicom 终端上写入任何 at 命令。