具有价值的网站建设,母婴行业网站建设,网站建设与实践高自考,欣宝儿在什么网站做直播1.前面的话
在上次连夜肝出了华为云平台的帖子:https://aijishu.com/a/1060000000287434 之后,论坛里的反响平平,好评没有,点赞更无,抱着已完成任务成功白嫖一块板子的心态,把板子收在了盒子里,第二天,助手小姐姐跟我说为何不把腾讯云的做了,对于这个要求我其实是拒绝的,但是小…1.前面的话
在上次连夜肝出了华为云平台的帖子:https://aijishu.com/a/1060000000287434 之后,论坛里的反响平平,好评没有,点赞更无,抱着已完成任务成功白嫖一块板子的心态,把板子收在了盒子里,第二天,助手小姐姐跟我说为何不把腾讯云的做了,对于这个要求我其实是拒绝的,但是小助手姐姐说写的好的话,会有奖励,当时我就笑了,把我当什么人了,我缺你的奖励吗,我现在就想问一句:什么时候能发货?
之所以要对接腾讯云其实是觉得腾讯云真的蛮好的(这句话不要写,包括括号),虽然本人跟腾讯没有一毛钱的关系,甚至曾找大佬内推简历后面换来一句已经招到了的回答,但是依然不能因此就否定它,他那清晰的文档,优雅的sdk代码,使我不能抗拒. 好了,说一点小笑话,调节一下气氛,进入正题
2.好戏开场了
按照上一篇对接华为云的套路,我们首先来找官方sdk,茫茫文档中给我看到了那熟悉的身影: 文档地址在这,拿走不谢: https://cloud.tencent.com/document/product/1081/48356 把sdk下载之后,熟练的放进thirdparty文件夹,这个时候依然要看文档,因为有些函数需要自己实现,具体是哪些呢,在这里: https://cloud.tencent.com/document/product/1081/48389 这篇文档写了,我们要实现里面的这些接口,此处列举一二: 仔细一看,霍,好家伙还不少呢,但是不怕,都是打工人,谁怕谁啊,二话不说我就写,结果就给我给写出来了: ,写出来这些后就可以准备编译了吗? nonono,我们还没做BUILD.gn文件呢,话不多说,直接教你写:
# Copyright (c) 2020 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the License);
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an AS IS BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.import(//build/lite/config/component/lite_component.gni)
import(//build/lite/ndk/ndk.gni)config(qcloud_sdk_config) {include_dirs [sdk_src/internal_inc,sdk_src/library,include,include/exports,//kernel/liteos_m/kernel/include,# //third_party/cmsis,//third_party/mbedtls/include,//third_party/mbedtls/include/mbedtls,]}cflags [ -Wno-unused-variable ]cflags [ -Wno-unused-but-set-variable ]cflags [ -Wno-unused-parameter ]cflags [ -Wno-sign-compare ]cflags [ -Wno-unused-function ]cflags [ -Wno-return-type ]qcloud_sdk_sources [sdk_src/network/socket/network_socket.c,sdk_src/network/tls/network_tls.c,sdk_src/network/network_interface.c,sdk_src/utils/utils_list.c,sdk_src/utils/utils_base64.c,sdk_src/utils/qcloud_iot_ca.c,sdk_src/utils/utils_aes.c,sdk_src/utils/utils_getopt.c,sdk_src/utils/utils_hmac.c,sdk_src/utils/utils_md5.c,sdk_src/utils/utils_sha1.c,sdk_src/utils/json_parser.c,sdk_src/utils/json_token.c,sdk_src/utils/string_utils.c,sdk_src/utils/utils_ringbuff.c,sdk_src/utils/qcloud_iot_log.c,sdk_src/utils/qcloud_iot_device.c,sdk_src/utils/utils_timer.c,sdk_src/protocol/mqtt/mqtt_client_common.c,sdk_src/protocol/mqtt/mqtt_client_connect.c,sdk_src/protocol/mqtt/mqtt_client_net.c,sdk_src/protocol/mqtt/mqtt_client_publish.c,sdk_src/protocol/mqtt/mqtt_client_subscribe.c,sdk_src/protocol/mqtt/mqtt_client_unsubscribe.c,sdk_src/protocol/mqtt/mqtt_client_yield.c,sdk_src/protocol/mqtt/mqtt_client.c,sdk_src/services/data_template/data_template_action.c,sdk_src/services/data_template/data_template_client.c,sdk_src/services/data_template/data_template_client_common.c,sdk_src/services/data_template/data_template_client_json.c,sdk_src/services/data_template/data_template_client_manager.c,sdk_src/services/data_template/data_template_event.c,platform/os/liteos_m/HAL_Device_liteos_m.c,platform/os/liteos_m/HAL_OS_liteos_m.c,platform/os/liteos_m/HAL_TCP_liteos_m.c,platform/os/liteos_m/HAL_Timer_liteos_m.c,# ./os/liteos_m/HAL_TLS_mbedtls_liteos_m.c,# ./tls/mbedtls/HAL_DTLS_mbedtls.c,platform/tls/mbedtls/HAL_TLS_mbedtls.c,]lite_library(qcloud_sdk_static) {target_type static_librarysources qcloud_sdk_sourcespublic_configs [ :qcloud_sdk_config ]
}lite_library(qcloud_sdk_shared) {target_type shared_librarysources qcloud_sdk_sourcespublic_configs [ :qcloud_sdk_config ]
}ndk_lib(qcloud_ndk) {if (board_name ! hi3861v100) {lib_extension .sodeps [:qcloud_sdk_shared]} else {deps [:qcloud_sdk_static]}head_files [//third_party/iot_link/network/mqtt/paho_mqtt/paho]
}整完之后就可以尝试一下有没有错误了.
3.在main里面写逻辑,处理事情
我们把官方sdk里面的点灯demo拿过来,直接新建一个demo文件夹,把文件放进去: 自己写好BUILD.gn,跟之前华为云对接一个套路噻,大家这么聪明,不用我多说了 然后在sample里面的sdk把这个文件夹开启编译: 这样就完成了代码的编写了,是不是很快乐呀
4.开始编译(血与泪的旅程)
4.1首先出场的是UTILS_LIST
这个utils_list.h不能被系统识别的问题还真是头疼,经过两小时的奋战,被我发现系统也有一个utils_list.h错误(忘了截图了),这就有点不讲武德了,竟然与代码的友好协商,我这样改: 终于把这个小家伙赶走了
4.2 紧跟着MBEDTILS当然不让,是迎头痛击
编译出来有个mbedtls的错误(依然忘了截图),后面分析出来是某些编译宏没搞对吧,然后我一番查找,就把qcloud里面带的mbedtls里面的config.h拷贝出去,放到系统自带的mbedtls里面: 结果,当然是没用了,这我就纳闷了,难道系统的mbedtls库是提前编好的,不能更改了,带着这个疑问,我就翻遍了系统自带的文件,结果被我找到一个东西: 在device/xradio/xr806/xr_skylark/src/net/mbedtls-2.16.8这里有一个mbedtls的源码,这下我就坐不住了,赶紧看看这个源码有没有参与编译,结果终于被我发现端倪, 这里指定了一个变量叫做MBEDTLS_CONFIG_FILE,我就说我怎么老看到mbedtls有这种代码: yes, 就说他了,说明他把config文件定向到了一个叫做config-xr-mini-cliserv.h这个文件了, 那可就方便了,我改吧device/xradio/xr806/xr_skylark/include/net/mbedtls-2.16.8/mbedtls/configs/config-xr-mini-cliserv.h 终于是把mbedtls的错误给整好了,花了我又是2h,我只想问人的一生有几个2h不说了,继续编译,这里需要注意的是,因为我们改的是系统的lib,所以需要在device/xradio/xr806/xr_skylark$,目录执行 make lib -j,让系统重新生成库
4.3 内存不足让我心如死灰
终于是把两个大的拦路虎给搞定了,真开心,虽然时间已经晚上10点多了我可一点都不困哟,想着马上就可以大功告成赢取助手小姐姐 咳咳,呃,亲手发送的礼品了,迫不及待得编译,运行,结果刚上来就是闷头一棍, 执行wifi扫描都内存不: , 虽然我知道这mbedtls费内存但也不至于到这步田地吧,连wifi扫描都不让那板子不废了嘛,苦于对芯片不熟,内存方面的资料是一点没有,于是我当机立断在论坛里面发帖控诉为什么只有这么一点内存: https://bbs.aw-ol.com/topic/854/wifi扫描提示内存不足-288kb可用的有多少?_1640440348789 想着第二天应该有人解答吧,结果等今天下午一看,没人理我,想了一下,小姐姐这么热情的邀请我把腾讯云对接出来,我得兑现我的承诺呀,继续磕吧. 突然我想到了我这个工程是官方的一个叫wlan_ble的proect上面弄个,会不会是ble蓝牙占了内存呀,因为是sram运行,会把code也给拷过来嘛 想到这里,我的毛孔全部都舒张起来了,一股头皮发麻的感觉涌上脚心,这就弄.于是我不慌不忙的就把ble给禁了,在device/xradio/xr806/xr_skylark$目录执行make menuconfig: 小子还想阴我老人家,昨天是我大意了,没有闪,这招就送你下去. 弄起来一跑,爽歪歪
5.就这样,腾讯云就对接成功了
就这样,一小时之前我终于成功把demo跑了起来: 看个动图一睹为快吧: 这是网页调试的效果,其实如果就这些还不足以我说腾讯云多好,还有一个东西就是腾讯连连,这个东西很有用,大家可以了解一下
6.总结
对接云平台其实说起来一点不复杂,难的在于各种细节,跟系统,编译器,sdk斗智斗勇,其乐无穷. 其实说起结果来,那是很开心了,但是过程那是相当曲折,其实我本人已经对接过很多次腾讯云了,这次之所以能在短时间内把腾讯云这个整明白也得益于以前的经验,所以积累很重要.