使用 pyserial 的 AT+CIMI 命令导致空字符串
AT+CIMI command using pyserial results in empty string
通过 Putty 连接到 Android Phone 并发送 at+cimi 命令显示我的 IMSI 号码。 (XX[..]XX 为数值)
at+cimi
XXXXXXXXXXXXXXX
OK
使用以下 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)
输出为空字符串:
[]
这个问题有解决方案吗?
尝试在s.readlines()
之前添加超时
ser.timeout=1.0
事实上,我不明白为什么它与您这边的cgpaddr 一起工作。没有超时,readlines 永远不会 returns 在我这边。
这是来自 pyserial 文档的评论,
Be careful when using readline(). Do specify a timeout when opening the serial port otherwise it could block forever if no newline character is received. Also note that readlines() only works with a timeout. readlines() depends on having a timeout and interprets that as EOF (end of file). It raises an exception if the port is not opened correctly.
想一想:您确定需要激活软件流量控制吗?如果您使用 XON-XOFF,则有一些特定的字节值用于控制通信。如果你运气不好,这可能会干扰你的交流。
再想想:一些 AT 命令需要超过 1 秒的时间,为了确保您在得到答案之前不会放弃,最好将超时增加到 5-10 秒。
如果有人遇到这个问题,我通过在 "at" 和 "cimi" 之间添加空格来解决它。
之前:
s.write(b'at+cimi\r')
之后:
s.write(b'at + cimi\r')
我不知道为什么,但它有效。在另一台 phone 上检查过,它适用于两个版本的 PC。
通过 Putty 连接到 Android Phone 并发送 at+cimi 命令显示我的 IMSI 号码。 (XX[..]XX 为数值)
at+cimi
XXXXXXXXXXXXXXXOK
使用以下 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)
输出为空字符串:
[]
这个问题有解决方案吗?
尝试在s.readlines()
之前添加超时ser.timeout=1.0
事实上,我不明白为什么它与您这边的cgpaddr 一起工作。没有超时,readlines 永远不会 returns 在我这边。
这是来自 pyserial 文档的评论,
Be careful when using readline(). Do specify a timeout when opening the serial port otherwise it could block forever if no newline character is received. Also note that readlines() only works with a timeout. readlines() depends on having a timeout and interprets that as EOF (end of file). It raises an exception if the port is not opened correctly.
想一想:您确定需要激活软件流量控制吗?如果您使用 XON-XOFF,则有一些特定的字节值用于控制通信。如果你运气不好,这可能会干扰你的交流。
再想想:一些 AT 命令需要超过 1 秒的时间,为了确保您在得到答案之前不会放弃,最好将超时增加到 5-10 秒。
如果有人遇到这个问题,我通过在 "at" 和 "cimi" 之间添加空格来解决它。
之前:
s.write(b'at+cimi\r')
之后:
s.write(b'at + cimi\r')
我不知道为什么,但它有效。在另一台 phone 上检查过,它适用于两个版本的 PC。