7

在 Linux 中,我需要向 eg 上的串行端口发送一系列 AT 命令/dev/ttyS0,它必须在发送下一个命令之前等待OK答案。我可以想象做类似的事情

echo 'AT' > /dev/ttyS0
echo 'ATS0=0' > dev/ttyS0
...

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

是否有一种非常简单的方法可以在 bash 脚本中自动执行此操作,可能借助socat和/或microcom 在最简单的 linux 系统上找不到的工具

4

5 回答 5

12

如果您安装了 PPP 软件包,您可以使用chat它附带的程序。或者你可以使用kermit. 或者cuuucp自带的程序。但是用纯 shell 来做这件事比较棘手。您也许可以使用 read 和 printf 函数,并将 stdio 重定向到端口。

一些片段:

stty -F /dev/ttyS0 38400 raw
chat -f script.txt < /dev/ttyS0 > /dev/ttyS0

应该让你开始。

于 2013-02-14T15:57:44.747 回答
3

这是在 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 命令。

于 2015-06-15T22:04:22.717 回答
1

要显示来自的消息:

echo -e "ATHO\r" > /dev/ttyACM0

或任何其他调制解调器命令类型who以查找终端号,然后运行:

cat /dev/ttyACM0 >& /dev/pts/8 &

然后来自 AT 命令的消息将显示在您的终端上。

于 2016-11-12T03:08:52.927 回答
0

你有一个错误:

cat 'AT'

意味着我猜想显示不存在的 AT 文件。

相反,尝试这样做:

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

EOF

使用 here-doc

于 2013-02-14T15:52:32.047 回答
0
  1. 去终端
  2. 输入“sudo minicom -s”
  3. 转到“串行端口设置”​​并设置串行端口设置
  4. 输入“更改设置?”
  5. 输入“将设置另存为 dfl”。dfl 表示默认
  6. 输入“退出”
  7. 在新打开的 minicom 终端上写入任何 at 命令。
于 2021-01-14T10:52:27.457 回答