使用pyserial的AT + CIMI命令导致空字符串

时间:2019-07-11 11:24:13

标签: python pyserial at-command

通过Putty连接到Android Phone并发送at + cimi命令会显示我的IMSI号码。 (XX [..] XX是数字值)

  

at + cimi   
XXXXXXXXXXXXXXX

     

使用以下python代码(在命令g + cgpaddr上):

def open_serial(com_port):
    my_serial = serial.Serial(com_port, baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=1, xonxoff=1, rtscts=0)
    return my_serial

s = open_serial('COM35')
s.write(b'at+cgpaddr\r')
temp = s.readlines()
print(temp)

输出为:

[b'at+cgpaddr\r\r\n', b'+CGPADDR: 1,"XXX.XXXX.XXX.XXX"\r\n', b'\r\n', b'OK\r\n']

如果我仅将at + cgpaddr更改为at + cimi:

s = open_serial('COM35')
s.write(b'at+cimi\r')
temp = s.readlines()
print(temp)

输出为空字符串:

[]

有没有解决该问题的方法?

3 个答案:

答案 0 :(得分:0)

尝试在s.readlines()之前添加超时

ser.timeout=1.0

实际上,我不明白为什么它与cgpaddr一起工作。没有超时,readlines永远不会回到我这边。

这是pyserial文档中的评论,

  

使用readline()时要小心。在打开串行端口时,请务必指定一个超时时间,否则如果没有收到换行符,它将永远阻塞。另请注意,readlines()仅适用于超时。 readlines()取决于是否存在超时,并将其解释为EOF(文件末尾)。如果未正确打开端口,则会引发异常。

答案 1 :(得分:0)

只是一个想法:您确定需要激活软件流控制吗?如果使用XON-XOFF,则有一些特定的字节值用于控制通信。如果您不够幸运,那可能会干扰您的交流。

再想一想:有些AT命令花费的时间超过1秒,为确保您在得到答案之前不会放弃,最好将超时时间增加到5-10秒。

答案 2 :(得分:0)

如果有人遇到这个问题,我可以通过在“ at”和“ cimi”之间添加空格来解决。

之前: s.write(b'at+cimi\r')

之后: s.write(b'at + cimi\r')

我不知道为什么,但是可以。在另一部手机上检查时,PC可以同时在两个版本上使用。