通过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)
输出为空字符串:
[]
有没有解决该问题的方法?
答案 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可以同时在两个版本上使用。