【XR806开发板试用】全网首发,对接腾讯云平台的血泪史

1.前面的话

在上次连夜肝出了华为云平台的帖子:https://aijishu.com/a/1060000000287434
之后,论坛里的反响平平,好评没有,点赞更无,抱着已完成任务成功白嫖一块板子的心态,把板子收在了盒子里,第二天,助手小姐姐跟我说为何不把腾讯云的做了,对于这个要求我其实是拒绝的,但是小助手姐姐说写的好的话,会有奖励,当时我就笑了,把我当什么人了,我缺你的奖励吗,我现在就想问一句:什么时候能发货?

之所以要对接腾讯云其实是觉得腾讯云真的蛮好的(这句话不要写,包括括号),虽然本人跟腾讯没有一毛钱的关系,甚至曾找大佬内推简历后面换来一句已经招到了的回答,但是依然不能因此就否定它,他那清晰的文档,优雅的sdk代码,使我不能抗拒.
好了,说一点小笑话,调节一下气氛,进入正题

2.好戏开场了

按照上一篇对接华为云的套路,我们首先来找官方sdk,茫茫文档中给我看到了那熟悉的身影:
7855bce1-bbdc-48ab-906a-255bfae5a361-image.png
文档地址在这,拿走不谢:
https://cloud.tencent.com/document/product/1081/48356
把sdk下载之后,熟练的放进thirdparty文件夹,这个时候依然要看文档,因为有些函数需要自己实现,具体是哪些呢,在这里:
https://cloud.tencent.com/document/product/1081/48389
这篇文档写了,我们要实现里面的这些接口,此处列举一二:
5b560673-4c25-4f3a-8bc3-ed84c53d9e0c-image.png
1675985a-cdb1-4135-aa34-15def710b44f-image.png
仔细一看,霍,好家伙还不少呢,但是不怕,都是打工人,谁怕谁啊,二话不说我就写,结果就给我给写出来了:
c01105d8-7cda-4bae-9879-28d40a7d73fd-image.png
,写出来这些后就可以准备编译了吗?
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_library"sources = qcloud_sdk_sourcespublic_configs = [ ":qcloud_sdk_config" ]
}lite_library("qcloud_sdk_shared") {target_type = "shared_library"sources = qcloud_sdk_sourcespublic_configs = [ ":qcloud_sdk_config" ]
}ndk_lib("qcloud_ndk") {if (board_name != "hi3861v100") {lib_extension = ".so"deps = [":qcloud_sdk_shared"]} else {deps = [":qcloud_sdk_static"]}head_files = ["//third_party/iot_link/network/mqtt/paho_mqtt/paho"]
}

整完之后就可以尝试一下有没有错误了.

3.在main里面写逻辑,处理事情

我们把官方sdk里面的点灯demo拿过来,直接新建一个demo文件夹,把文件放进去:
b0f9937d-178d-4280-adb9-2953e36dcb34-image.png
自己写好BUILD.gn,跟之前华为云对接一个套路噻,大家这么聪明,不用我多说了
然后在sample里面的sdk把这个文件夹开启编译:
c6dbed4c-947e-4205-8733-aa30733e4033-image.png
这样就完成了代码的编写了,是不是很快乐呀

4.开始编译(血与泪的旅程)

4.1首先出场的是UTILS_LIST

这个utils_list.h不能被系统识别的问题还真是头疼,经过两小时+的奋战,被我发现系统也有一个utils_list.h错误(忘了截图了),这就有点不讲武德了,竟然与代码的友好协商,我这样改:
ee10077f-034c-476e-992e-287f5088c9c1-image.png
终于把这个小家伙赶走了

4.2 紧跟着MBEDTILS当然不让,是迎头痛击

编译出来有个mbedtls的错误(依然忘了截图),后面分析出来是某些编译宏没搞对吧,然后我一番查找,就把qcloud里面带的mbedtls里面的config.h拷贝出去,放到系统自带的mbedtls里面:
937f8f71-a57a-4a91-9804-05dc2bf39d39-image.png
结果,当然是没用了,这我就纳闷了,难道系统的mbedtls库是提前编好的,不能更改了,带着这个疑问,我就翻遍了系统自带的文件,结果被我找到一个东西:
e4237a11-eb20-459f-9891-913f9a1dfd04-image.png
device/xradio/xr806/xr_skylark/src/net/mbedtls-2.16.8这里有一个mbedtls的源码,这下我就坐不住了,赶紧看看这个源码有没有参与编译,结果终于被我发现端倪,
9a456d13-44d6-4a2b-953b-5dd3f430d2d6-image.png
这里指定了一个变量叫做MBEDTLS_CONFIG_FILE,我就说我怎么老看到mbedtls有这种代码:
74e08fc1-e2df-4177-83b4-25fb33f7a000-image.png
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扫描都内存不:
,28880051-4d07-416b-97fb-b14e086b73c3-image.png 虽然我知道这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:
2b7d7660-4f5d-4a8e-9389-15d0efe1f57e-image.png
小子还想阴我老人家,昨天是我大意了,没有闪,这招就送你下去.
弄起来一跑,爽歪歪

5.就这样,腾讯云就对接成功了

就这样,一小时之前我终于成功把demo跑了起来:
看个动图一睹为快吧:
对接腾讯云-00_00_02-2021_12_25_22_49_50.gif
这是网页调试的效果,其实如果就这些还不足以我说腾讯云多好,还有一个东西就是腾讯连连,这个东西很有用,大家可以了解一下

6.总结

对接云平台其实说起来一点不复杂,难的在于各种细节,跟系统,编译器,sdk斗智斗勇,其乐无穷.
其实说起结果来,那是很开心了,但是过程那是相当曲折,其实我本人已经对接过很多次腾讯云了,这次之所以能在短时间内把腾讯云这个整明白也得益于以前的经验,所以积累很重要.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/711239.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Three.js-04轨道控制器

1.导入 说明&#xff1a;相机围绕目标进行轨道运动。也就是可以通过鼠标拖拽进行移动视角。 import { OrbitControls } from three/addons/controls/OrbitControls.js; 2.使用 说明&#xff1a;构造controls对象&#xff0c;再调用update方法&#xff1b;为了使效果更为明显…

十二、Qt自定义Widget组件、静态库与动态库

一、自定义Widget组件 1、自定义Widget组件 使用步骤采用提升法&#xff08;promotion&#xff09;重新定义paintEvent事件 2、实现程序 &#xff08;1&#xff09;创建项目&#xff0c;基于QWidget &#xff08;2&#xff09;添加类&#xff0c;为Widget组件提升类 #inclu…

Vue3 在SCSS中使用v-bind

template 先创建一个通用的页面结构 <template><div class"v-bubble-bg"></div> </template>js 在JS中先对需要用的数据进行定义&#xff1a; 可以是参数&#xff0c;也可以是data <script setup>const props defineProps({bgCol…

gpt批量原创文章生成器,不限制内容的生成器

在当今的数字化时代&#xff0c;内容创作是网站持续发展的重要组成部分。然而&#xff0c;对于拥有大量内容需求的网站来说&#xff0c;手动创作文章可能会耗费大量时间和精力。为了解决这一问题&#xff0c;许多GPT&#xff08;生成式预训练模型&#xff09;文章生成软件应运而…

【重温设计模式】外观模式及其Java示例

设计模式及外观模式介绍 在编程世界中&#xff0c;设计模式就如同自然界的法则&#xff0c;是一种反复出现在各种情况下的通用解决方案。设计模式可以分为创建型、结构型和行为型三大类&#xff0c;每一类都有其独特的应用场景和解决问题的方式。今天&#xff0c;我们要重点解…

【HbuilderX】 uniapp实现 android申请权限 和 退出app返回桌面

目录 android申请权限&#xff1a; 监听用户是否开启权限或关闭权限&#xff1a; 退出app返回桌面&#xff1a; android申请权限&#xff1a; 首先在 manifest.json 内添加你所需要用到权限 添加权限插件 permission.js 一次就好1/权限插件 - Gitee.comhttps://gitee.co…

数据库分库分表中间件选择

目前分库分表的中间件有三种设计思路&#xff0c;分别是&#xff1a; 采用分散式架构&#xff0c;适用于用Java开发的高性能轻量级OLTP应用程序&#xff0c;以Sharding-JDBC为代表。采用中间层Proxy架构&#xff0c;提供了静态输入和所有语言支持&#xff0c;适用于OLAP应用程…

MATLAB环境下基于小波和滤波器组的音频信号处理

音频分类研究的重点&#xff0c;一方面在于音频特征的提取和选择&#xff0c;通常来说数据集和特征集在分类系统中有着极为重要的作用&#xff0c;离开了对数据集的处理、对特征集中特征的提取和选择&#xff0c;分类结果必将产生巨大误差。对于提高音频分类系统的分类准确度和…

vulnhub-----Hackademic靶机

文章目录 1.C段扫描2.端口扫描3.服务扫描4.web分析5.sql注入6.目录扫描7.写马php反弹shell木马 8.反弹shell9.内核提权 1.C段扫描 kali:192.168.9.27 靶机&#xff1a;192.168.9.25 ┌──(root㉿kali)-[~] └─# arp-scan -l Interface: eth0,…

Docker容器(3)单容器管理

一、单容器 1.1概念简介 Docker三个重要概念: 仓库(Repository); 镜像(Image); 容器(Container). *Docker的三个重要概念是仓库(Repository)、镜像(Image)和容器(Container)**。具体如下&#xff1a; **镜像(Image)**&#xff1a;Docker镜像是创建容器的基础&#xff0c;它类似…

Maven面试题

以下是一些关于Maven的经典面试题以及它们的答案&#xff1a; 1、什么是Maven&#xff1f; Maven是一个项目管理工具&#xff0c;用于构建、管理、发布Java项目。 2、为什么要使用Maven而不是手动管理项目依赖&#xff1f; Maven提供了依赖管理、统一的构建、打包、文档生…

Google索引脚本:快速索引你的网站

公众号&#xff1a;【可乐前端】&#xff0c;每天3分钟学习一个优秀的开源项目&#xff0c;分享web面试与实战知识。 每天3分钟开源 hi&#xff0c;这里是每天3分钟开源&#xff0c;很高兴又跟大家见面了&#xff0c;今天介绍的开源项目简介如下&#xff1a; 仓库名&#xff1…

园区停车管理系统的设计与实现

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一 、设计说明 1.1 选题…

【前端素材】推荐优质在线通用果蔬商城电商网页eStore平台模板(附源码)

一、需求分析 1、系统定义 通用果蔬网站是指专门提供各类果蔬产品展示和销售的在线平台。它将不同种类的新鲜水果、蔬菜、干果、坚果等聚集在一起&#xff0c;为消费者提供方便、快捷的购物渠道。 2、功能需求 通用果蔬网站是指专门提供各类果蔬产品展示和销售的在线平台。…

面试数据库篇(mysql)- 08事务

原理 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 ACID是什么?可以详细说一下吗? 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全…

Redis之一: 简介及环境安装搭建

什么是NoSQL? NoSQL&#xff0c;指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写&#xff0c;是对不同于传统的关系型数据库的数据库管理系统的统称。 NoSQL用于超大规模数据的存储。&#xff08;例如谷歌或Facebook每天为他们的用户收集万亿比特的数据&#xf…

USB - OTG

USB OTG (On-The-Go) Definition&#xff08;定义&#xff09;: * USB OTG 可让平板电脑或智能手机等设备充当主机&#xff0c;允许其他 USB 设备&#xff08;如 USB 闪存驱动器、数码相机、鼠标或键盘&#xff09;连接到它们。 * 它允许设备在主机和外设之间切换角色。例如&am…

基于SSM SpringBoot vue服装物流管理系统

基于SSM SpringBoot vue服装物流管理系统 系统功能 首页 图片轮播 人个中心 登录注册 后台管理: 登录注册 个人中心 货物信息管理 货物入库管理 订单信息管理 商品出库管理 快递追踪管理 用户管理 供应商信息管理 盘点信息管理 管理员管理 开发环境和技术 开发语言&#xf…

github-actions

文章目录 workflow触发器action市场contextsecrets 默认环境变量 workflow name: {{workflow name}} run-name: {{workflow runs name}}on: {{触发器}} #[push]env:{{定义workflow变量}}: valuejobs:{{job name}}:runs-on: {{运行机器}} #ubuntu-latestenv:{{定义job变量}}: v…

小程序开发能力

小程序开发能力 1. 获取用户头像 当小程序需要让用户完善个人资料时&#xff0c;我们可以通过微信提供的头像、昵称填写能力快速完善。如图&#xff1a; 想使用微信提供的头像填写能力&#xff0c;需要两步&#xff1a; 将 button 组件 open-type 的值设置为 chooseAvatar当…