提问者:小点点

在PIC微控制器中实现MQTT


我正在尝试使用sim 900 gprs调制解调器在pic微控制器中实现MQTT协议,我已经阅读了mqtt留档版本3.1。成功地,我可以使用以下命令从gprs调制解调器连接到myserver ip(117.218.81.15)…

>

  • AT
  • 在CPIN?
  • 在CREG?
  • 在CGATT?
  • 在CIPSHUT
  • 在CIPSTATUS
  • AT CIPMUX=0
  • AT CSTT=\"互联网\",\"\",\"\"
  • 在CIICR
  • 在CIFSR
  • AT CIPSTART=\"TCP\" , \"117.218.81.15\",\"1883\"

    根据MQtt协议的留档,我写了连接包函数。建立tcp连接后,我试图发送connect_packet()函数,我没有从经纪人那里得到任何确认。.请帮助我解决这个问题,我已经用wireshark网络分析工具检查了我的数据到达1883 tcp端口,但我不知道为什么我没有得到任何确认?connect_packet代码是无符号字符topiclen=0,time_out1=0,time_out2=0;无符号字符连接数据,打包;memset(buffer,0, sizeof(buffer));time_out1=(time_out


  • 共1个答案

    匿名用户

    希望你已经找到了解决方案,因为这是一篇旧文章。

    您应该检查协议名称“MQIsdp”,如果您遵循MQTT-3.1.1规范,我认为它必须是“MQTT”。MQTT规范说

    协议名称是一个UTF-8编码的字符串,表示协议名称“MQTT”,如图所示大写。该字符串、其偏移量和长度不会被MQTT规范的未来版本更改。

    如果您的协议名称与规范不匹配,代理将静默丢弃您的数据包。您还必须更新缓冲区数组,因为MQTT在MQTT协议的变量标头中占用2 4个字节。

    谢啦