OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5864|回复: 4

在F103上移植MQTT的问题

[复制链接]

17

主题

46

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
金钱
262
注册时间
2016-9-9
在线时间
94 小时
发表于 2019-5-9 20:25:03 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 xmlhttp 于 2019-5-9 21:07 编辑

直接拿的LWIP扩展例程的网络实验8 NETCONN_TCP客户端这个修改的,连接服务器代码如下:
[mw_shl_code=applescript,true]
u8 mqtt_connect(void)
{
    MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
    unsigned char buf[200];
    int buflen = sizeof(buf);
    int len = 0;
    memset(buf,'\0',buflen);
    data.clientID.cstring = "STM32F103_TEST";
    data.keepAliveInterval = 20;     
    data.cleansession =0;
    data.username.cstring = "m1";
    data.password.cstring = "admin";
    data.MQTTVersion = 4;
    len = MQTTSerialize_connect(buf, buflen, &data);
    transport_sendPacketBuffer((char*)buf,len);
    delay_ms(100);
    if (MQTTPacket_read(buf, buflen, transport_getdata) == CONNACK)
    {
        unsigned char sessionPresent, connack_rc;
       if ( MQTTDeserialize_connack(&sessionPresent, &connack_rc, buf, buflen)!= 1 || connack_rc != 0)
        {
            printf("Unable to connect, return code %d\r\n", connack_rc);
            return 0;
        }
        else
        {
            printf("MQTT CONNECT!\r\n");
        }
    }
    else
        printf("No connack\r\n");
        return 0;
}
[/mw_shl_code]
在服务端有这样的日志输出:
1557404053: New client connected from x.x.x.x as STM32F103_TEST (p2, c0, k20, u'm1').
1557404053: No will message specified.
1557404053: Sending CONNACK to STM32F103_TEST (1, 0)

运行到MQTTDeserialize_connack(&sessionPresent, &connack_rc, buf, buflen)等于1,connack_rc=2
串口中打印 Unable to connect, return code 2,请问要怎么修改?


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

17

主题

46

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
金钱
262
注册时间
2016-9-9
在线时间
94 小时
 楼主| 发表于 2019-5-9 20:49:25 | 显示全部楼层
运行 len = MQTTSerialize_connect(buf, buflen, &data);后buf的数据是:
10 25 00 04 4D 51 54 54 04 C0 00 14 00 0E 53 54 4D 33 32 46 31 30 33 5F 54 45 53 54 00 02 6D 31 00 05 61 64 6D 69 6E
运行if (MQTTPacket_read(buf, len, transport_getdata) == CONNACK)后的buf数据是:
20 20 20 02 01 00 54 54 04 C0 00 14 00 0E 53 54 4D 33 32 46 31 30 33 5F 54 45 53 54 00 02 6D 31 00 05 61 64 6D 69 6E
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10569
金钱
10569
注册时间
2017-2-18
在线时间
1913 小时
发表于 2019-5-10 12:04:15 | 显示全部楼层
帮顶~~
回复

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2018-9-19
在线时间
26 小时
发表于 2019-5-11 14:20:17 | 显示全部楼层
改写成这个试试看 data.cleansession =1;
回复

使用道具 举报

6

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2017-6-28
在线时间
44 小时
发表于 2021-7-30 09:04:03 | 显示全部楼层
这个会不会和你的transport里面的接口函数有关?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 15:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表