【问题标题】:Python and AT CommandsPython 和 AT 命令
【发布时间】:2020-11-30 19:20:29
【问题描述】:

我需要通过以太网向设备发送 AT 命令来配置它。这是我现在拥有的:

import socket
import sys
import time

host = "192.168.0.99"
port = 8080

msg = 'at\n'

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
s.send(msg.encode())

data = s.recv(1024).decode()
print (data)
s.close()

我可以对它进行腻子,打开一个原始连接并且它可以工作。

putty

我输入“at”,控制器回显“at”,然后是“ok”以确认。

当我运行上面的脚本时,我得到了“at”。它是打印回显而不是下一行(ok 行)还是只是打印出我发出的命令?如何让它读取收到的所有数据?

【问题讨论】:

  • 只要设备提供 any 数据,.recv() 就会返回 - 1024 是它将返回的最大数量,而不是它会等待。如果回声和命令响应之间存在微小的延迟,那么您很可能在第一次调用时只得到回声 - 事实上,不能保证您甚至会得到整个回声。您需要循环调用.recv()
  • 有道理。所以现在我有了这个:
  • 尝试用\r\n终止你的AT命令
  • 添加 \r\n 成功了!什么是\r?
  • \r - 运营商退货,\n - 换行

标签: python at-command


【解决方案1】:

如何让它读取收到的所有数据?

一般来说,在程序向调制解调器发送 AT 命令行之后,除了读取和解析从调制解调器发回的响应之外,它绝对不应该做任何事情,直到它收到 最终结果代码。最终结果代码表明调制解调器已完成对 AT 命令行的处理,现在可以接收新的命令行了。

您用于接收数据的代码,

data = s.recv(1024).decode()

只是picking up one single, arbitrary chunk of data sent over the network(可能以多种不同的方式拆分)。作为jasonharper already has commented,这必须在循环中完成,特别是loop that checks for and wait till it receives a final result code

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 2017-12-20
    • 1970-01-01
    • 2013-03-25
    相关资源
    最近更新 更多