Python 我有一个由pyserial发送的AT命令的空响应。我怎样才能得到;“好的”;回应?

Python 我有一个由pyserial发送的AT命令的空响应。我怎样才能得到;“好的”;回应?,python,pyserial,at-command,Python,Pyserial,At Command,print(msg)的响应是b',我希望得到“OK”响应 导入序列号 ser=serial.serial(端口='COM57') 如果不是ser.isOpen(): 爵士公开赛() 打印('COM57已打开',序列号isOpen()) at_cmd='at' ser.write(at_cmd.encode()) msg=ser.read(2) 打印(msg) 打印(类型(msg)) 塞尔克洛斯() 这里有几件事需要更改。正如在注释中已经提到的,只在“处发送”将不会起任何作用。您需要填补AT命令知

print(msg)的响应是
b'
,我希望得到“OK”响应

导入序列号
ser=serial.serial(端口='COM57')
如果不是ser.isOpen():
爵士公开赛()
打印('COM57已打开',序列号isOpen())
at_cmd='at'
ser.write(at_cmd.encode())
msg=ser.read(2)
打印(msg)
打印(类型(msg))
塞尔克洛斯()

这里有几件事需要更改。正如在注释中已经提到的,只在“处发送
”将不会起任何作用。您需要填补AT命令知识的空白,并区分AT命令和AT命令行。最好从阅读标准第5章开始,这是AT命令处理的基本标准。如果您没有完全理解某些内容,请不要惊慌,但请确保您真正理解了语法部分(前缀+正文+终止)

请注意,尽管注释中有建议,AT命令行命令行应仅由
\r
终止,而非
\r\n
(“终止字符可由用户选项选择(参数S3),默认为CR(IA5 0/13)。”,并且S3绝对不应该从其默认值13更改,因此在实践中,您永远不必处理该寄存器)

关于阅读和解析,您需要输入适当的算法。您需要逐个读取字符并将这些字符组合成响应行,然后再考虑解释这些字符的含义(在数据协议中称为“帧”)。接下来,您需要检测是否收到最终结果代码(以及可能处理的中间结果代码/信息文本)


答案中还有一些细节。

愚蠢的问题,但另一端真的有Hayes兼容的调制解调器吗?您也可以使用
at_cmd=b'at'
跳过下一行中的
.encode()
。另外,我看不到您在
at
之后发送新行(正如@hobbs在我下面的评论中更详细地描述的那样)。(也就是说,
read(2)
完全返回数据,而不是无限期地阻塞;如果在开始之前缓冲区中有内容,您可能希望确保这些内容已被占用;然而,如果行配置错误,这会在本应传输的字节位置产生噪音,则这是另一个需要单独解决的问题ed)@Arusekk,谢谢你的建议。