gpt4 book ai didi

tcp - 在 PIC 微 Controller 中实现 MQTT

转载 作者:可可西里 更新时间:2023-11-01 02:54:23 24 4
gpt4 key购买 nike

我正在尝试使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com