esp8266 NONOS_SDK3.05 mqtt使用注意事项

使用安可信的集成开发环境,先基本的环境配置,编译后没问题进行阿里云的平台开发;

1、因为是直接在官方给的例程基础上开发的,遇到很多问题,首先是mqtt_config.h中的修改注意事项:
除了基本的联网和mqtt等物联网平台连接信息配置,包括一些topic,还需要注意CFG_HOLDER这个宏定义在每次修改mqtt_config.h配置信息后一定要修改值,可以把默认值进行加一减一,总之如果要想刚才配置的参数生效并且写入到flah中一定要修改,否则CFG_Load();中有个判断语句,会导致略过参数更新过程,当然如果是调试不想这么麻烦可以修改CFG_Load()把判断语句去掉;

2、其次是CFG_Load(),这个函数是把配置信息放到数组中
直接在mqtt_config.h写入的信息,可能在后续会造成数组越界的问题。需要在config.h文件中修改数组长度;

3、然后是关于clent_id,从CFG_Load()中可以看到这个例程默认使用的是读取设备号来作为客户端ID,但每个平台的接入标准不一样,阿里有自己的一套客户端ID接入标准。我没有进行格式拼接,直接定义了整串的clientID,于是仿照其他信息改成:os_strncpy(sysCfg.device_id, MQTT_CLIENT_ID, sizeof(sysCfg.device_id) - 1);

4、最后是域名解析问题:
出现:DNS: Found, but got no ip, try to reconnect
起初我以为是我的平台参数配置有问题,但事实上是域名解析问题;
这个域名解析问题是在解析阿里云物联网平台的域名时出的,我怀疑是SDK本身有问题;为了这个问题,还把mqtt的sdk仔细看了一遍,最后没法解决就直接使用了ip地址连接,最后连接订阅发布成功。
问题的分析过程:
初始化客户端时:

  • MQTT_InitClient(…)函数中创建了一个MQTT_Task()的任务,
    任务使用状态来进行切换,在进入连接状态MQTT_Connect(…)函数后,会判断ip地址能不能解析成功UTILS_StrToIP(mqttClient->host,
    &mqttClient->pCon->proto.tcp->remote_ip);
  • 如果不成功就进入域名解析espconn_gethostbyname(mqttClient->pCon, mqttClient->host, &mqttClient->ip, mqtt_dns_found)函数;
  • 这个函数会将解析完的数据放到mqtt_dns_found中判断有没有解析成功;
  • 很显然解析失败了,ipaddr==NULL,mqtt_dns_found(const char *name, ip_addr_t *ipaddr, void *arg)中这个回调函数返回INFO(“DNS: Found,but got no ip, try to reconnect\r\n”);

我拿espconn_gethostbyname()这个域名解析函数的例程测试了一下,当正常传参和回调的时候,能够正确解析ip地址,也是拿这个解析出来的IP地址直接连了物联网;
所以不是这个解析函数的问题,很有可能是在MQTT_Connect()中调用的时候传的参数出现问题了;
这个域名解析是在连接过程中进行,改起来有点麻烦,如果有大佬知道解决方法,请一定帮忙解惑;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值