SIM7600CE-T的AT+CMQTTSUB命令为何需指定req_length参数?
SIM7600CE-T AT+CMQTTSUB命令<req_length>参数疑问
我使用SIM7600CE-T(TEL0124)连接MQTT服务器,已成功通过AT+CMQTTSUB命令读取服务器消息,但不理解该命令为何需要输入<req_length>参数。根据SIM7500/SIM7600系列AT命令手册第360页说明,<req_length>是输入主题数据的长度,主题需为UTF编码字符串,范围1-1024字节。
实际操作中,执行AT+CMQTTSUB=0,3,0\r后需发送3字符数据才可完成订阅,操作流程如下:
// 订阅主题并接收消息(无需轮询): AT+CMQTTSUBTOPIC=0,6,0\r 返回并等待输入:> 发送6字符主题名:newtop 返回:OK // 订阅消息服务器,定义输入主题数据长度 AT+CMQTTSUB=0,3,0\r 返回并等待输入:> 发送3字符数据:hia // 完成订阅
请问该随机输入数据的作用是什么?
解答
你输入的随机数据hia没有实际作用,问题出在你误用了SIM7600的MQTT订阅命令流程:
SIM7600提供两种MQTT订阅方式:
- 单步订阅:直接使用
AT+CMQTTSUB=<client_idx>,<req_length>,<qos>,此时<req_length>对应后续要输入的主题字符串长度,输入后模块会以该主题完成订阅。 - 两步订阅:先通过
AT+CMQTTSUBTOPIC=<client_idx>,<topic_length>,<qos>预定义好要订阅的主题(比如你操作中的newtop),之后只需执行AT+CMQTTSUB=<client_idx>,0,<qos>即可触发订阅,此时<req_length>设为0,无需输入任何额外数据。
你的操作中已经用AT+CMQTTSUBTOPIC指定了有效订阅主题,但后续调用AT+CMQTTSUB时错误地将<req_length>设为3,模块会严格按照参数要求等待输入对应长度的数据,才会执行订阅动作。但此时模块已经通过AT+CMQTTSUBTOPIC获取了正确主题,你输入的hia会被直接忽略,只是满足了模块的输入长度校验而已。
正确的两步订阅流程应为:
AT+CMQTTSUBTOPIC=0,6,0\r > newtop OK AT+CMQTTSUB=0,0,0\r OK
内容的提问来源于stack exchange,提问作者Christianidis Vasileios
相关产品推荐
相关产品推荐

