【问题标题】:I have a empty response of AT command sending by pyserial. How can I get "OK" response?我对 pyserial 发送的 AT 命令有一个空响应。如何获得“OK”响应?
【发布时间】:2021-04-20 17:22:10
【问题描述】:

print(msg) 的响应是 b' ',我期待“OK”响应。

import serial

ser = serial.Serial(port='COM57')
if not ser.isOpen():
    ser.open()
print('COM57 is open', ser.isOpen())
at_cmd = 'AT'
ser.write(at_cmd.encode())
msg = ser.read(2)
print(msg)
print(type(msg))
ser.close()

【问题讨论】:

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

标签: python pyserial at-command


【解决方案1】:

您需要在此处更改几项内容。正如在 cmets 中已经提到的,仅发送 "AT" 将无济于事。您需要填补您在 AT 命令知识方面的空白,并区分 AT 命令AT 命令行。最好的起点是阅读标准V.250 中的所有第 5 章,这是 AT 命令处理的基本标准。如果有一些你没有完全理解的东西,不要惊慌,但要确保你真的理解了语法部分(前缀 + 正文 + 终止)。

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

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

thesetwo答案中有更多细节。

【讨论】:

    猜你喜欢
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多