本帖最后由 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,这个暂时先不扯了,有想弄的,私信发我了.
时间不多,就这样了,希望能帮到大家上云.
|