如何确定发送到 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”),但最终您需要对每个相似之处进行显式处理。