首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

请问python怎么读取串口AT命令的返回值

2013-09-17 
请教python如何读取串口AT命令的返回值在使用python发送AT命令,读取返回值的时候遇到如下问题: ser s

请教python如何读取串口AT命令的返回值
在使用python发送AT命令,读取返回值的时候遇到如下问题:
>>> ser = serial.Serial('COM4', timeout=5)
>>> ser.write('at+creg=?\r')
10L
>>> ser.readline()
'\r\n'
>>> ser.readline()
'+CREG: (0-3)\r\n'
>>> ser.readline()
'\r\n'
>>> ser.read()
'O'
>>> ser.readlines() <----这里会用满timeout的5s才返回下面的列表
['\r\n', '+CREG: (0-3)\r\n', '\r\n', 'OK\r\n']
而正常用软件的话应该返回:

+CREG: (0-3)

OK

求教该使用什么命令可以完整读取ser的返回值?
[解决办法]

line = []

while True:
    for c in ser.read():
        line.append(c)
        if c == '\n':
            print("Line: " + line)
            line = []
            break

[解决办法]
1. 第一个想法是先试试read(0)(应该没用,理由是2)

2. 这儿的问题是ser(作为可读文件)的内容是随着时间改变的,所以要求read()“把ser的内容一下子读出来”,这个要求不明确,它不知道什么时候ser的内容才完整了,可以停下来。API提供的停止read()的办法有两个:字符数量和timeout,前者的问题是你不知道确切的返回字符的个数,timeout的问题是timeout的值可能太大(浪费时间)或太小(读不完整)。

另外一个办法是你自己判断何时停下来:对每一格输入,持续读取输出,直到读到一行非空的文本(这个规则只是个例子,具体规则取决于你的应用)。可以用二楼的办法自己写或者用readline(如果它会block的话)。

3. 普通的文件,也是read()返回字符串,readlines返回列表。

热点排行