我正在与Raspberry Pi的Fona 808模块通信,我可以发出AT命令,是的!
现在我想创建一个python程序,我可以使用" b"等快捷命令可靠地发出AT命令。获得电池电量等等。
这是我到目前为止所做的:
import serial
con = serial.Serial('/dev/ttyAMA0',timeout=0.2,baudraute=115200)
def sendAtCommand(command):
if command == 'b':
con.write("at+cbc\n".encode())
reply = ''
while con.inWaiting():
reply = reply + con.read(1)
return reply
while True:
x = raw_input("At command: ")
if x.strip() == 'q':
break
reply = sendAtCommand(x)
print(reply)
con.close()
在sendAtCommand中,我将有一堆if语句根据它接收的输入发送不同的命令。
这有点奏效,但非常不可靠。有时我得到完整的信息。其他时候我一无所获。然后下一次双重消息,依此类推。
我想创建一个向Fona模块发出命令的方法,然后读取完整的响应并返回它。
有什么建议吗?
答案 0 :(得分:1)
如果“调制解调器”尚未对您的命令做出任何响应,则您的循环退出。您应该继续阅读串行输入,直到您获得换行或直到某个时间过去,例如1秒左右。
答案 1 :(得分:1)
好。事实证明这是非常微不足道的。 由于at命令总是在成功查询后返回OK,因此只需要读取这些行,直到最终其中一行将包含“OK”\ r \ n'。 像这样:
def readUntilOK():
reply=''
while True:
x = con.readline()
reply += x
if x == 'OK\r\n':
return reply
这没有超时,除了OK响应之外没有检查任何其他内容。这使它非常有限。添加错误处理取决于读者。像x ==' ERROR \ r \ n'将是一个良好的开端。
干杯!