LinkKit SDK 接入阿里云物联网平台(2)| 学习笔记

简介: 快速学习 LinkKit SDK 接入阿里云物联网平台(2)

开发者学堂课程【基于STM32的端到端物联网全栈开发LinkKit SDK 接入阿里云物联网平台(2)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/574/detail/7942


LinkKit SDK 接入阿里云物联网平台(2)


Linkkit SDK 的介绍

1、Linkkit C-SDK

2、Linkkit C-SDK 如何配置到 STM32平台

3、Linkkit C-SDK 的使用


阿里云 loT 提供给设备厂商用于快速将设备接入阿里云 loT 平台的功能代码集,它是一套代码,由多种语言实现的版本。

例如:嵌入式设备中嵌入式 C 语言版本(适用于 C 语言开发业务处理逻辑的设备,由于速度快、需要运行内存少目前大多数 IOT 设备运用 C 语言开发);运行在 node.js 下的 JavaScript 语言版本;运行在安卓环境下的 java 语言版本。

image.png

Linkkit SDK 的主要功能:

基础功能@阿里云 loT 平台设备管理.基础版

1.设备连云:支持多种协议连接阿里云 loT 平台:MQTTCoAPHTTP/SHTTP2(做文件上传,)
2.
设备认证:多种身份认证方式:一机一密(指在设备稍写该设备的方元组),一型一密(额外引入了产品密钥)

3.数据通信:SDK 提供上行、下行数据接口,数据加密功能

高级功能@阿里云 loT 平台设备管理.高级版

1.物模型:处理属性上报、设置;服务调用、事件上报

2.设备 OTA:设备厂商通过阿里云loT平台推送固件给设备,设备 SDK 负责接收固件并调用设备升级函数实现固件的烧写(用户可以实现节点上设备的固件下载)

3.时间同步:SDK 可从云端获取实时时间,用于设备的定时任务

4.Wifi 配网:SDK 提供多种配网方式:一键配网、手机热点配网、零配、路由器配网

Linkkit C-SDK 架构框图:(可以比较细节的展示各个组成模块)

最底层是 OS 层,兼容 RTOS 和非 RTOS,也可裸跑

橙色部分是连接协议,包括 MOTT,CoAPHTTP,HTTP2.0

最上层是基于各种连接协议和服务的历程

image.png

Linkkit SDK 源文件组织:

build-rules:编译构建系统,基于 GNU Make bash 脚本

project.mk:编译系统配置,指定 SDK 的目录排布等

LICENSE:软件许可证,C-SDK 使用的是 Apache-2.0版本软件许可证。

READIE.txt:简要说明,列出了 c-SDK 的功能模块和模块内容等

makefile:基于 GNU Make 编译 SDK 的顶层 Makefile

CMakeLists.txt:基于 cmake 编译 SDK 的顶层 CMakeLists.txt

make .settings:功能裁剪配置,可编辑该文件来裁剪 SDK 的内容

examples:例程目录,演示 SDK 的使用

coap:演示如何使用通信模块 CoAP API

device-shadow:演示如何使用服务模块 DeviceShadow API

http:演示如何使用通信模块 HTTP API

http2:演示如何使用通信模块 HTTP2的 API

linkkit:演示如何使用服务模块 linkkit API

mqtt:演示如何使用通信模块 MQTT API

ota:演示如何使用服务模块 ota API

include:头文件目录,列出 SDK 以来的 HAL 接口和向用户体提供的 API 接口

iot_export.h:列出所有 API 层函数的声明,是 sDK 所提供的接口

iot_import.h:列出所有 HAL 层函数的声明,SDK 所依赖的接口

exports:列出各功能点提供的 API 层接口

imports:列出各功能点依赖的 HAL 层接口

board:跨平台适配目录,一个目标平台对应一个 config.xxx.yyy 文件

config.rhino.make:适配到 AliOs Things 系统的编译配置文件

config.ubuntu.x86:适配到 ubuntu 系统的编译配置文件

config.win7.mingw32:适配到 win7/win10系统的编译配置文件

infra:SDK 核心获取中的基础模块目录

log:实现运行时 SDK 的日志

system:实现全局信息保存,如官方根证书,设备标识I

utils:实现工具函数,如连接鉴权时的 SHA1摘要计算等

protocol:SDK 核心实现中华的通信模块目录

alcs:实现设备和手机 app 之间的本地加密通信

coap:实现设备和阿里云之间的 coAP 协议通信

http:实现设备和阿里云之间的 HTTP 协议通信

http2:实现设备和阿里云之间的 HTTP2协议通信实现设备和阿里云之间的 QTT 协议通信

mqtt:实现设备和阿里云之间的 MQTT 协议通信

services:SDK 核心实现中的服务模块目录

awss:实现设备和手机 app 之间的 wiFi 配网服务

linkkit:实现设备和阿里云之间的物模型管理服务实现

ota:设备和阿里云之间的固件升级服务

sdk-impl: API 实现目录,iot_export.h 中的 API 在此实现(是 sdk 对外实现的 api

ref-impl:参考实现目录,包括加解密库和 HAL 接口的参考实现(是 hal 层安全模块,需要用户根据自己的意见平台和采用的安全框架来做适配)

hal:SDK 所依赖的 HAL 接口的参考实现

tls:加解密库的参考实现,由开源软件 mbedtls 裁剪而成

tools:用于辅助 build-rules 编译系统的编译脚本文件

image.png

橙色方框是核心实现以及对上层应用的接口

蓝色需要客户自己适配部分

设备端 C-SDK 的分层:

C-SDK Example(填入设备信息,便可在 linux 主机下运行)

C-SDK 接口层(APIe.g,LOT_xxx_yyysdk 跨平台完成之后,调用它编写逻辑和阿里云平台通信)

C-SDK 核心实现层(用户无需关心)(它完成了通道的功能封装)

硬件抽象层 HAL_xxx_yyy(这里是抽象不同的切用式目标板对 sdk 的支撑函数)

调用 API

1.基础

2.MQTT

3.CoAP

4.HTTP

5.设备影子

6.OTA

7.Alink

适配 HAL:

1.基础功能

2.多线程

3.MQTT

4.CoAP

5.OTA

6.WIFI配网

7.设备信息

设备信息,相关 HAL:

HAL_GetChiplD:获取芯片 ID

HAL_GetDeviceID:获取设备 ID(2.3.1及以后版本中不需要实现)

HAL_GetFirmwareVesion:获取固件版本号,必须实现

HAL_GetModuleID:获取模组 ID,用于紧密合作伙伴,一般客户只需要在此可实现为空函数

//前三个获取各种 id 用于 sdk 运行的时候向阿里云平台报告信息,发送到该系统主题

HAL_GetPartnerID:获取合作伙伴 ID,用于紧密合作伙伴,一般客户只需要在此可实现为空函数

HAL_GetDeviceName:获取 DeviceName,三元组获取函数之一,必须实现

HAL_GetDeviceSecret:获取 DeviceSecret,三元组获取函数之一,必须实现

HAL_GetProductKey:获取 ProductKey,三元组获取函数之一,必须实现

HAL_GetProductSecret:获取 ProductSecret,三元组获取函数之一,必须实现

HAL_SetDeviceName:设置 DeviceName,三元组配置函数之一,必须实现

HAL_SetDeviceSecret:设置 DeviceSecret,三元组配置函数之一,必须实现

HAL_SetProductKey:设置 ProductKey,三元组配置函数之一,必须实现

HAL_SetProductSecret:设置 ProductSecret,三元组配置函数之一,必须实现

相关 HAL 的实现:

用于 ITLS 安全方案时的网络连接;上报设备端信息;

HAL_GetPartnerIDexample.demo.ST

HAL_GetModulelDexample.demo.emw3080

HAL_GetFirmwareVersionapp-1.0.0-20190101.1000

HAL_GetProductKey:从_product_key 读出

HAL_GetDeviceName:从_device_name 读出

HAL_GetDeviceSecret:从_device_secret 读出

HAL_GetProductSecret:从_product_secret 读出

HAL_GetDevicelD:由_product_key._device_name 拼成

HAL_GetNetiflnfo:保留参考实现

flash 固定位置读出配置写到运行环境的全局变量中:

HAL_SetProductKey:写_product_key

HAL_SetDeviceName:写_device_name

HAL_SetDeviceSecret:写_device_secret

HAL_SetProductSecret:写_product_secret

中定义的全局数组变量

基础功能,相关 HAL:(包括对内存的分配、释放管理、延时操作、打印函数、KV操作等)

HAL_Malloc:申请一片堆上内存

HAL_Free:释放一片堆上内存

HAL_SleepMs:睡眠函数,使当前执行线程睡眠指定的毫秒数

HAL_Snprintf:打印函数,向内存缓冲区格式化构建一个字符串,参考c99标准库函] snprintf

HAL_Printf:打印函数。用于向串口或其它标准输出打印日志或调试信息

HAL_Vsnprintf:字符串打印函数, va_list 类型的变量,打印到指定目标字符串

HAL_UptimeMs:时钟函数,获取本设备从加电以来到目前时间点已过去的毫秒数

HAL_Ku_Set:写入指定数据

HAL_K_Get:读取指定Kv数据

HAL_Ku_Del:删除指定Kv数据

HAL_Ku_Erase_All:擦除所有的 Kv 数据

多线程功能,相关 HAL 的实现:

MQTT client初始化(iotx_mc_init)

HAL_MutexCreate

HAL_MutexDestroy

HAL_MutexLock

HAL_MutexUnlock

空函数,直接返回

未被本项目例程所需要 SDK 的子模块调用:

HAL_SemaphoreCreate

HAL_SemaphoreDestroy

HAL_SemaphorePost

HAL_SemaphoreWait

HAL_ThreadCreate

HAL_ThreadDetach

HAL_ThreadDelete

未实现

网络接口文件的适配:
(蓝色部分完全来自 st

utils_net.c

iot_HAL_TCP_stm32.c

iot_HAL_TLs_mbedtls.c

mbedtls_net.c

wifi.c

emw3080.c

emw3080_io.c

image.png

MQTT,相关 API

IOT_MQTT_CheckStateNormal:获取当前 MQTT 的连接状态

IOT_MQTT_Publish:向指定 topic 推送消息

IOT_MQTT_Publish_Simple

IOT_MQTT_Subscribe:向云端订阅指定的 MQTT Topic

IOT_MQTT_Subscribe_Sync

IOT_MQTT_Unsubscribe:向云端取消订阅指定的 topic

IOT_MQTT_Yield:接收网络报文消息并分发到用户的回调函数中

IOT_MQTT_Destroy:销毁指定 MQTT 连接并释放资源

1.设备认证

2.初始化 MQTT 参数

3.根据参数构建 MQTT 客户端实例

4.订阅业务关心的消息主题

5.发布业务关心的消息主题

6.等待消息的到来并处理

image.png

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
23天前
|
程序员 开发工具 Android开发
Android|使用阿里云推流 SDK 实现双路推流不同画面
本文记录了一种使用没有原生支持多路推流的阿里云推流 Android SDK,实现同时推送两路不同画面的流的方法。
43 7
|
1月前
|
存储 边缘计算 物联网
阿里云物联网平台:推动万物互联的智能化解决方案
随着物联网技术的快速发展,阿里云物联网平台为企业提供了一体化的解决方案,包括设备接入、数据管理和智能应用等核心功能。平台支持海量设备接入、实时数据采集与存储、边缘计算,并具备大规模设备管理、高安全性和开放生态等优势。广泛应用于智能制造、智慧城市和智能家居等领域,助力企业实现数字化转型。
156 5
|
3月前
|
Java 开发工具
通过Java SDK调用阿里云模型服务
在阿里云平台上,可以通过创建应用并使用模型服务完成特定任务,如生成文章内容。本示例展示了一段简化的Java代码,演示了如何调用阿里云模型服务生成关于“春秋战国经济与文化”的简短文章。示例代码通过设置系统角色为历史学家,并提出文章生成需求,最终处理并输出生成的文章内容。在实际部署前,请确保正确配置环境变量中的密钥和ID,并根据需要调整SDK导入语句及类名。更多详情和示例,请参考相关链接。
|
4月前
|
消息中间件 分布式计算 DataWorks
DataWorks产品使用合集之如何使用Python和阿里云SDK读取OSS中的文件
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
4月前
|
存储 运维 监控
阿里云物联网平台的优势
【7月更文挑战第19天】阿里云物联网平台的优势
75 1
|
5月前
|
网络协议 安全 调度
阿里云公共DNS发布支持鸿蒙系统版的SDK
阿里云公共DNS发布支持鸿蒙系统版SDK,赋能鸿蒙开发者快速接入阿里云公共DNS服务。公共DNS将帮助接入的鸿蒙应用免除LocalDNS劫持困扰、解析加速、精准调度。
|
5月前
|
算法 小程序 开发工具
视觉智能开放平台操作报错合集之同样的图片路径(上海阿里云),sdk报错code.400,是什么原因
在使用视觉智能开放平台时,可能会遇到各种错误和问题。虽然具体的错误代码和消息会因平台而异,但以下是一些常见错误类型及其可能的原因和解决策略的概述,包括但不限于:1. 认证错误、2. 请求参数错误、3. 资源超限、4. 图像质量问题、5. 服务不可用、6. 模型不支持的场景、7. 网络连接问题,这有助于快速定位和解决问题。
|
6月前
|
Cloud Native 安全 物联网
【阿里云云原生专栏】云边端一体化:阿里云如何利用云原生技术赋能物联网
【5月更文挑战第22天】阿里云借助云原生技术赋能物联网,实现云边端一体化,提升系统弹性与敏捷性。通过容器化部署,保证高可用性与可靠性。在智能交通等领域,阿里云提供高效解决方案,实现实时数据分析与决策。代码示例展示如何使用阿里云服务处理物联网数据。同时,阿里云重视数据安全,采用加密和访问控制保障数据隐私。丰富的工具和服务支持开发者构建物联网应用,推动技术广泛应用与发展。
371 1
|
6月前
|
消息中间件 存储 JavaScript
阿里云IOC物联网异步处理基础概念
该内容介绍了异步处理基础和消息队列的相关概念。首先,同步处理指任务完成后才能执行其他操作,而异步则允许任务并行执行,不阻塞程序。异步能提高系统并发性和响应性,但也增加复杂性和资源消耗。接着,提到了消息队列,包括生产者、消费者、队列、broker和topic等概念,并指出在IoT中,设备作为生产者发送消息到特定topic,消费者从队列获取数据。最后,简要介绍了AMQP协议,它是用于应用程序间消息传递的开放标准,常用于分布式系统和物联网,如RabbitMQ和Apache Qpid。课程将以Apache Qpid为例接收IoT数据。
225 6
阿里云IOC物联网异步处理基础概念
|
6月前
|
弹性计算 运维 Serverless
Serverless 应用引擎产品使用之在阿里函数计算中,使用阿里云API或SDK从函数计算调用ECS实例的服务如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
116 4

相关产品

  • 物联网平台