打印
[uCOS/RTOS]

rtthread+AT32F403A通过ESP8266对接腾讯云物联网开发平台实现交互

[复制链接]
1235|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 cszzlsw 于 2020-6-1 20:52 编辑

上一集我们说到:rtthread+AT32F403A通过ESP8266登录腾讯云物联网开发平台:https://bbs.21ic.com/icview-2966620-1-1.html有同学就要问了:怎么又来一集.楼主你这不对啊,你怎么一篇帖子发两遍,骗小礼物也不是这么玩的呀?
看清楚了,上一篇是登录,这一篇是对接并且实现数据交互
我可没骗人哟.哈哈哈(别打).
那首先给大家道个歉,上一篇说了看回复的人数来决定是否更不更,结果
我食言了,
因为这帖子放了一天,啥回复都没有,心塞啊
但是这也挡不住我要分享的一颗赤子之心,心塞X2
好了,闲言少叙,咱们进入正题.
上一篇就讲到我们确实登录上腾讯云IoT平台了,但是并没有实现数据交互,而且我说了因为程序里面用的是影子设备,
那什么是影子设备呢?请看链接:https://cloud.tencent.com/document/product/634/11918
总之就是影子设备跟真实设备是分开的, 我们用影子设备上传的数据不会解析到正式设备上去,就这么简单
那如何连接正式设备呢?
首先,我们上一集还说了,rtt官方的腾讯库是老的,
那问题来了,既然官方库老了,那新库呢?
别急呀,我们现在就是腾讯云官方文档去逛逛:https://cloud.tencent.com/document/product/1081/39313
这里给了最新库的下载地址:

下载之后,我们放到之前的packages包里去:

接下来就好办了,我们把之前老的文件替换掉就行了
至于这步说起来就一匹布那么长了,
我们把原来的库(qcloud-iot-sdk-embedded-c)叫做老库,新下载的库(qcloud-iot-explorer-sdk-embedded-c-3.1.2)叫做新库
咱们长话短说:
1.把所有老库里有的文件都用新库去替换
2.有一个东西新库里没有,这个在packages目录里面,注意是跟tencent-iot-sdk-latest这个文件夹平等的位置,有一个mbedtls-v2.7.10
这里面有一个port文件夹,这个port文件夹里的东西,新库里面是没有的,所以我们在移植mbedtls的时候,需要把这几个文件包含进去:

其他就是一些小问题了,编译的时候会报的,
3.比如在新库里面的的HAL_TLS_mbedtls_rtthread.c文件里,有个地方编译会报错:

报错是因为做程序的时候那个人比较粗心,322行这一行的数据要挪到那个条件编译里面去
眼尖的同学可能发现了,上一集也有个地方讲到了这个地方,不记得的要回去看一看
4.还有一个地方,是qcloud_iot_import.h里面有个函数原型要改一下:

这两个地方都是编译会报错的,
5.还有一个地方,是什么什么enable的,忘记了编译会不会报错,如果报错了就把他注释掉就行
然后就等待编译成功吧,如果还有问题,自己想办法改一改吧,我也不太记得了

如果做完上面这些恭喜你可以进入下一阶段了:
还记得上面说的影子设备不,这一步我们要把影子设备改回来,那具体怎么改呢,我呢是参考这一个文件的:

把官方的文档那里跟shadow有关的函数,跟这个全部换掉,比如:
 ShadowInitParams init_params = DEFAULT_SHAWDOW_INIT_PARAMS;
    rc = _setup_connect_init_params(&init_params);
    if (rc != QCLOUD_ERR_SUCCESS) {
                Log_e("init params err,rc=%d", rc);
                return ;
        }

    void *client = IOT_Shadow_Construct(&init_params);
    if (client != NULL) {
        Log_i("Cloud Device Construct Success");
    } else {
        Log_e("Cloud Device Construct Failed");
        return;
    }
修改为:
 TemplateInitParams init_params = DEFAULT_TEMPLATE_INIT_PARAMS;
    rc = _setup_connect_init_params(&init_params);
    if (rc != QCLOUD_RET_SUCCESS) {
                Log_e("init params err,rc=%d", rc);
                return ;
        }

    void *client = IOT_Template_Construct(&init_params, NULL);
    if (client != NULL) {
        Log_i("Cloud Device Construct Success");
    } else {
        Log_e("Cloud Device Construct Failed");
        return;
    }
还有接口函数整个变了的,比如:
getEventFlag()变成了IOT_Event_getFlag(client)这样子,总体来说是变好了.
大家可以改一点就编译一下,免得一起编译到处报错,直接炸毛
这一步其实没啥技术含量,考验的就是细心.

这一步完事了,那我就恭喜你了,你可以把程序下载到板子上,然后执行
tc_data_template_light_example start
指令来运行线程了

下一步:看数据交互
这时候你还是看不到设备上传的数据,需要在config.h里面把上报使能打开:


然后在template.c里面把这个参数赋个值:

意思就是每次上报都上报所有属性,如果不改的话他始终都是0,不执行上报.
具体的逻辑自己去看代码了.
重新编译,运行,就可以在控制台看到数据的上报了:



测试,调试界面点击"在线调试":


可以执行下发命令这些.

好了,终于搞完了,那最后的最后再说下小程序吧,腾讯官方有一个"腾讯连连"小程序,
微信上面搜索小程序,登录进去,添加设备,扫描设备二维码:

添加到设备里去,可以看到设备的那些属性,可以下发指令测试,具体的逻辑就自己写了:

腾讯还有个小程序demo,这个暂时先不扯了,有想弄的,私信发我了.
时间不多,就这样了,希望能帮到大家上云.

使用特权

评论回复

相关帖子

沙发
21ic小喇叭| | 2020-6-5 11:36 | 只看该作者
大大,我看您写的非常专业,您如果完成了作品,千万别忘记按比赛要求,做成文档,上传到论坛

文档模板在咱们参赛群里有,如果没找到,联系大掌柜单独发给您

提交作品以后,大掌柜给您寄礼品

使用特权

评论回复
板凳
xinmeng_wit| | 2020-6-11 21:15 | 只看该作者
楼主还是蛮厉害的,能否加个微信聊聊,我也在做这个

使用特权

评论回复
地板
cszzlsw|  楼主 | 2020-6-12 10:02 | 只看该作者
xinmeng_wit 发表于 2020-6-11 21:15
楼主还是蛮厉害的,能否加个微信聊聊,我也在做这个

没问题,论坛其实不经常登的, 微信号也是cszzlsw,互相学习

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

66

帖子

1

粉丝