tcp - 在 PIC 微 Controller 中实现 MQTT

标签 tcp pic at-command mqtt gprs

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

  1. AT+CPIN?
  2. AT+CREG?
  3. AT+CGATT?
  4. AT+CIPSHUT
  5. AT+CIP状态
  6. AT+CIPMUX=0
  7. AT+CSTT=\"互联网\",\"\",\"\"
  8. AT+CIICR
  9. AT+CIFSR
  10. AT+CIPSTART=\"TCP\",\"117.218.81.15\",\"1883\"

    根据 MQtt 协议(protocol)的文档,我编写了连接数据包函数。 建立 tcp 连接后,我尝试发送 connect_packet() 函数,我没有从经纪人那里得到任何确认。请帮助我解决这个问题 我已经用 wireshark 网络分析器工具检查过我的数据到达 1883 tcp 端口,但我不知道为什么我没有得到任何确认? connect_packet 代码是 unsigned char topiclen = 0,time_out1=0,time_out2=0; unsigned char connectdatalen,packetlen; memset(buffer,0,sizeof(buffer)); time_out1 = (time_out >>8) & 0XFF; time_out2 = (time_out & 0XFF); topiclen = strlen(sacketid); connectdatalen = 2 + 6 + 1 + 1 + 2 + 2 + topiclen;<br/> packetlen = 2 + connectdatalen;<br/> buffer[0] = 0X10; buffer[1] = connectdatalen; buffer[2] = 0x00; buffer[3] = 0X06; buffer[4] = 'M'; buffer[5] = 'Q'; buffer[6] = 'I'; buffer[7] = 's'; buffer[8] = 'd'; buffer[9] = 'p'; buffer[10] = 0x03; buffer[11] = 0x02; buffer[12] = time_out1; buffer[13] = time_out2; buffer[14] = (topiclen >> 8); buffer[15] = topiclen & 0XFF; for(i=0;i<packetlen;i++) { buffer[(i+16)] = sacketid[i]; } uart_puts(buffer); uart_puts("\x1A"); 在 void main 函数中,代码是 uart_init(9600,16); DelayMs(100); gprs_init(); gprs_tcpconnect(); DelayMs(200); connect_packet("MQTT",180); memset(buffer,0,sizeof(buffer));

最佳答案

希望您已经找到解决方案,因为它是一个旧帖子。

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

Blockquote The Protocol Name is a UTF-8 encoded string that represents the protocol name “MQTT”, capitalized as shown. The string, its offset and length will not be changed by future versions of the MQTT specification.

如果您的协议(protocol)名称与规范不匹配,代理将默默地丢弃您的数据包。 此外,您还必须更新缓冲区数组,因为 MQTT 在 MQTT 协议(protocol)的可变 header 中占用 2+4 个字节。

谢谢

关于tcp - 在 PIC 微 Controller 中实现 MQTT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29027112/

相关文章:

android - 在 root 的 Xperia Z android 设备上发送 AT 命令

Java tcp端口与eclipse连接

为 pic 微 Controller 编译 C 程序 - 错误消息

Android TCP 发送文件。 Android 客户端将图像发送到 Java 服务器。无法发送图像。该怎么办?

embedded - PIC 中的计算方程

microcontroller - 关于CAN总线

error-handling - 蓝牙 HC-05 发送错误 1F 仅适用于 INQ 命令

windows - 能够打开 TCP 端口但不能监听

tcp - 什么是计算机网络中的 brvread 服务/协议(protocol)?