一、背景
Link SDK(原名为 Link Kit SDK)是阿里云物联网平台提供的设施端软件开发工具包,可应用尽量少的硬件资源,简化开发过程,实现设施疾速接入阿里云物联网平台。目前 LinkSDK 曾经笼罩的开发语言 c、node.js、java、python、以及 android、ios 操作系统。(Link SDK 相干内容请点击文末浏览原文理解详情)
C LinkSDK 4.x 于 2020 年 5 月初版上线,作为 C LinkSDK 的主版本与物联网平台性能同步更新,目前曾经迭代近两年。在 4.x 推出之前,C LinkSDK 曾经迭代了三个大版本 1.x、2.x、3.x,这三版本有肯定的继承关系,可实现局部接口兼容。4.x 则是齐全的新版本,在接口上和之前的版本不再兼容。
为什么要推出新版本 4.x 呢?从性能及稳定性角度上看,3.x 都能够满足应用需要,推出 4.x 最次要的起因是改善资源开销及易用性问题。IoT 设施不同于互联网设施,碎片化问题很重大,为了 LinkSDK 利用范围广,在 3.x 提供了多种场景的接入办法及相干性能,从而导致接入硬件资源耗费大,进步了设施门槛;为了给 3.x 瘦身,咱们提供了配置项、代码抽取工具帮忙用户裁剪;最初后果就是,3.x 倒退胜利能丰盛、配置项多的一个大型 IoT 工具库,易用性反而降落了,进步了开发者应用门槛。因而,咱们决定研发 LinkSDK 4.x,以 低消耗、易移植、易使用 作为设计指标,帮忙设施疾速轻便的上云。
二、挑战
问题是客观存在的,IoT 设施的碎片化,局部设施资源无限,利用场景差别大。LinkSDK 4.x 设计,既要满足多场景疾速适配,又要用尽量少的硬件资源,还要满足能力定制化的需要。
- IoT 设施碎片化
IoT 设施品类多,跨度大,有小型的智能开关、中型的音响、大型的机器人;软件操作系统有 RTOS、linux、windows,有些低端设施都没有操作系统;硬件平台架构和主频跨度都很大; 跨平台运行能力 是一大挑战。 - IoT 设施资源受限
资源是设施的老本,有些 IoT 设施为节约老本,只有几十 K 的 rom,顾此失彼。在 IoT 畛域,大部分设施上应用的是 mqtt 协定,风行 mqtt 开源协定栈资源开销根本已大于 100K。如何让 资源受限设施上云,也是一大挑战。 - 实现接口易用
很多时候,开发成本也是设施老本的一个大头,做到接口易用也能够升高开发成本。但对于 SDK 来说,丰盛的利用场景,要求 SDK 肯定具备定制能力,可配置能力,如何解决 易用且反对定制,也是一大挑战。
三、设计及实现
3.1 碎片化问题解决
- 性能聚焦
LinkSDK 通过多年的倒退,咱们也明确了少即是多的情理,保留次要的性能能力带给大部分用户好的接入体验。所以 4.x 在功能设计上聚焦设施与物联网平台交互性能,云端一体的能力建设。不再解决与具体环境或具体业务相干内容,如本地通信,本地存储,业务利用。 - 缩小依赖
4.x 设计只保留必要的零碎及网络接口,升高设施应用门槛。
互斥锁(可选):保障接口的线程平安,无 OS 或只会单线程调用 LinkSDK 能够不实现。
时钟:用于计算心跳发送距离及重发逻辑
内存:用于动态内存申请,能够节俭内存(RAM) 应用
随机数:用于建连,减少随机数进步传输平安
TCP:用于连云时的网络操作
3.2 资源受限问题解决
- 能力原子化,反对裁剪
LinkSDK 除外围模块,其它性能封装成独立的组件,组件反对裁剪。在下载是基于可视化裁剪工具,零门槛实现裁剪。裁剪后,若只保留外围模块,可降至 30K 左右的 rom 耗费; - 自建简节尺寸小的根底库
自研实现 mqtt 协定栈、http 协定栈、json 解析库,实现资源开销方面业内当先。 - 内存遵循应用时申请准则
SDK 实现根本不应用动态变量及全局变量,保障模块独立同时防止不要的内存耗费; - 提供 mcu+ 模组上云计划
对于一些极其资源受限的设施,提供协定栈跑在模组上的计划,进一步升高连云对 mcu 资源需要。
3.3 易用性问题解决
3.3.1 下载阶段(定制化):
提供可视化 SDK 定制下载,用户下载 LinkSDK 时,能够通过简介疾速理解组件性能,仅抉择本人须要的性能,防止不必要的资源耗费;
3.3.2 移植阶段:
缩小移植接口 :
移植形象目前接口已缩减至 15 个(4 个可选实现),移植难度大幅升高;
罕用零碎免移植 :
提供 posix、linux、freertos 等罕用环境移植实现,用户可间接应用,免移植;
免 mbedtls 移植 :
已基于移植形象接口实现 mbedtls 开源库适配,用户不用关怀 mbedtls 移植;
提供 AT 驱动框架 :
对于 MCU+ 通信模组接入形式,基于 AT 驱动框架能够疾速开发模组驱动,用户只须要定义好 AT 指令格局,AT 驱动框架会实现指令协定栈实现,以及实现模组驱动与 LinkSDK 移植形象接口的适配工作。
提供移植验证工具 :
用户移植后,应用移植验证工具验证是否移植胜利。
3.3.3 开发阶段:
晋升 api 易用性:
- 清晰的软件框架,只有外围模块和高级组件两层架构,易了解。
- 保持一致的观感和应用体验, 包含文件布局, API 格调, 编码格调等
- 欠缺的配套阐明,官网文档介绍应用流程,API 具体应用(https://gaic.alicdn.com/ztms/…)
提供可视化低代码开发工具 :
用户应用物模型进行业务开发时,LinkSDK 只提供了根底的属性上报、属性设置、事件上报、服务调用接口。然而具体是什么样的属性、事件、服务解决,须要用户本人解决。可视化低代码开发工具,能够依据不同的产品物模型,主动生成对应物模型的具体代码。
工具入口:控制台 –> 抉择产品 –> 性能定义 –> 生成设施端代码。
3.4 LinkSDK 4.x 软件主体架构
- 外围组件: 最重要的连云局部, 其内容是固定和精简的(因而不存在如何增删), 其接口也是充沛丰盛和细粒度的
- 下层组件: 所有外围之外的能力, 都原子化拆分, 造成互相独立, 互相拆散的平级下层组件
- 内部工具: 第三方软件库, 不是 SDK 的内容, 目前仅有 mbedtls
四、应用示例
连贯物联网平台须要具备公网连贯的能力,依据网络连接的类型,大抵能够分为四种接入形式。
直连设施:直连设施本人具备公网 IP,间接集成 LinkSDK 即可实现接入。
子设施与网关设施:子设施无公网 IP,通过局域网与网关通信,由网关代理上云,网关需集成集成 LinkSDK。
MCU+ 通用模组设施:对于无公网 IP 的 MCU,通过模组的 TCP/TLS 能力上云。
MCU+ 云模组设施:云模组已集成 LinkSDK,MCU 可通过简略的 AT 指令实现接入。
上面以 ubuntu 作为虚构直连设施为例,介绍 LinkSDK 的应用过程。
- 定制化下载 SDK 后,解压,进入 SDK 根目录
- 抉择一个 demo,此处以 mqtt 的根底性能 demo 为例,演示 demo 应用。
关上 demo 源码(./demos/mqtt_basic_demo.c),批改设施的认证信息及接入点信息,保留。 - 编译 make,完结后查看输入文件 output/
- 运行 demo,./output/mqtt-basic-demo,demo 会主动实现建连及音讯收发,流程如下。
- 摸索体验更多功能,能够先查看性能列表,再从 demos 都能找到对应的 demo 体验。
五、性能列表
5.1 外围模块
5.2 高级组件
六、结束语
LinkSDK 4.x 设计准则遵循低消耗、易移植、易使用,反对细粒度的性能裁剪,次要满足中小型的嵌入式设施的应用需要。对于一些中大型的设施,如 IPC、机器人、网关等,它们对资源不那么敏感,大多也应用 linux 零碎,不须要移植。往往对性能丰富性、易用性、性能有要求。对此,咱们也在研发针对中大型设施应用的 LinkSDK 5.x,进一步提高接口的易用性,性能的丰富性,以及更高的性能,或将于下半年公布,纵情期待。
物联网平台产品介绍详情:https://www.aliyun.com/produc…
阿里云物联网平台客户交换群