如何确定发送到 GSM 模块的 AT 命令的结尾是什么?
由于发现何时收到整个响应,我需要一些字符或字符串来表示每种情况下 AT 命令的结束。
我猜它有一些带有“\r\n”序列的东西,但是,这个序列可能在 AT 命令响应的开头?
如何确定发送到 GSM 模块的 AT 命令的结尾是什么?
由于发现何时收到整个响应,我需要一些字符或字符串来表示每种情况下 AT 命令的结束。
我猜它有一些带有“\r\n”序列的东西,但是,这个序列可能在 AT 命令响应的开头?
就像你想象的那样\r\n
。
这定义了一行的结尾。
只有处理完整的生产线才有意义。
有些命令只响应 ,有些命令响应OK\r\n
一些数据。
因此,您应该首先构建一个解析器,它可以检测完整的行,以便可以使用处理响应的函数来处理它们。
有时您甚至可以获得您不要求net login
的响应,例如更改事件或 sim status #QSS: 2\r\n
。
所以你需要知道你期望什么答案,然后等到你得到这个
这是我在 Python 中使用的。有用。可能还有其他更好的解决方案。
ser = serial.Serial(com, baudrate, timeout=5)
while True:
# a simple AT return result parser
new_char = ser.read(1)
byte_flow += new_char
if len(byte_flow) >=4 and byte_flow[-4:] == b'\r\nOK':
break
elif len(byte_flow) >= 7 and byte_flow[-7:] == b'\r\nERROR':
break
byte_flow += ser.read(2) # the final '\r\n'
elif
如果有任何其他模式,您可以添加更多。
<CR>
回车符,是命令行和结果代码终止符,其值在 0 到 255 之间的十进制 ASCII 中,在参数 S3 中指定。默认值为 13。
所以应该可以设置任何字符来指示响应的结束(以及发送到调制解调器的任何命令的结束)。
无论如何<CR>
,许多调制解调器的响应不仅将 s 作为最后一个字符返回。
因此,写入不同的字符值S3
是否只会更改调制解调器响应结束时发送的最后一个字符,或者这是否会将<CR>
调制解调器响应期间发送的任何字符更改为存储在S3
.
响应格式是特定于命令的。虽然有某些相似之处(“OK\r\n”),但最终您需要对每个相似之处进行显式处理。