使用 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' 之类的东西将是一个好的开始。

干杯!