使用 python 可靠地写入和读取串口
Reliably write and read to serial using python
我正在与来自 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 语句,它们根据接收到的输入发送不同的 at 命令。
这有点管用,但非常不可靠。有时我会收到完整的消息。其他时候我什么也得不到。下次再发双信息,以此类推
我想创建一种向 Fona 模块发出命令然后读取完整响应并 returns 的方法。
有什么建议吗?
如果 'modem' 还没有对您的 at 命令做出任何响应,您的循环将退出。您应该继续读取串行输入,直到换行或直到某个时间过去,例如1秒左右。
好的。事实证明这是非常微不足道的。
由于在成功查询后 at 命令总是 return OK,因此只需阅读这些行,直到其中一个包含 'OK\r\n'。
像这样:
def readUntilOK():
reply=''
while True:
x = con.readline()
reply += x
if x == 'OK\r\n':
return reply
这没有超时,并且除了 OK 响应之外不检查任何其他内容。这使得它非常有限。添加错误处理取决于 reader。 if x == 'ERROR\r\n' 之类的东西将是一个好的开始。
干杯!
我正在与来自 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 语句,它们根据接收到的输入发送不同的 at 命令。
这有点管用,但非常不可靠。有时我会收到完整的消息。其他时候我什么也得不到。下次再发双信息,以此类推
我想创建一种向 Fona 模块发出命令然后读取完整响应并 returns 的方法。
有什么建议吗?
如果 'modem' 还没有对您的 at 命令做出任何响应,您的循环将退出。您应该继续读取串行输入,直到换行或直到某个时间过去,例如1秒左右。
好的。事实证明这是非常微不足道的。 由于在成功查询后 at 命令总是 return OK,因此只需阅读这些行,直到其中一个包含 'OK\r\n'。 像这样:
def readUntilOK():
reply=''
while True:
x = con.readline()
reply += x
if x == 'OK\r\n':
return reply
这没有超时,并且除了 OK 响应之外不检查任何其他内容。这使得它非常有限。添加错误处理取决于 reader。 if x == 'ERROR\r\n' 之类的东西将是一个好的开始。
干杯!