阿里云IoT生活物联网平台对低功耗蓝牙通信类型(BLE)的设备,提供了Breeze协议接入方案,可以便捷实现App-设备-云的完整链路。
背景介绍
本文主要介绍在具备低功耗蓝牙(BLE)能力的设备端上,如何集成Breeze协议,并与手机端App建立连接、对BLE设备的身份进行认证、建立BLE设备与手机之间的安全通信通道,以及将BLE设备端数据通过手机App通道推送至云端等。手机端客户端和云端开发请参见蓝牙连接开发指南。
Breeze协议类似于BLE协议栈中的Profile(配置文件),需要适配并运行于BLE协议栈之上。
设备端Breeze SDK
Breeze协议规定了接入阿里云IoT生活物联网平台的BLE设备与移动端App之间的通信协议,为了方便用户实现更快速的接入,生活物联网设备端SDK提供了Breeze协议的代码实现:Breeze SDK,其结构框图如下所示。
HAL层:Breeze SDK需要适配BLE Stack,HAL层就是用来适配BLE Stack之用,不同的BLE Stack需要适当修改进行移植和适配。 核心组件层:实现了设备端-移动端-云端的认证、通道等逻辑的源码,用户一般不用做修改即可使用。 应用层:Breeze提供了设备OTA通道、辅助Wi-Fi配网通道等,用户需要根据实际场景进行使用。设备端Breeze SDK代码结构
设备端Breeze SDK随生活物联网设备端SDK对外开源,最新版本请获取最近发布的获取SDK含AliOS Things版本。
代码位于$(SDK Src)/framework/bluetooth/breeze,目录如下。
. ├── Config.in //配合meunconfig组件配置 ├── breeze.mk //makefile文档 ├── README.md //readme文档 ├── api //目录,展示给应用的接口为breeze_export.*是Breeze SDK提供的接口; breeze_awss_export.*是蓝牙辅助配网的接口。依照应用场景选择其一使用 ├── core //目录,源码核心实现,包含安全,通道以及扩展指令等的实现 ├── hal //参考移植实现,使用AliOS Things OS, BLE协议栈,以及内部mebdtls和安全部分参考 ├── include //Breeze SDK的头文件
使用开发指南
开发者可以通过SDK提供的HAL接口进行对接,在自己的运行了BLE协议栈的设备上支持Breeze协议。
移植SDK到第三方平台
breeze_hal_sec对接安全部分,包含AES128 CBC加解密算法和SHA256接口。其余部分代码和应用维持不变。参见源代码目录下的hal,将第三方的实现替换此文件夹下的HAL实现:OS、BLE协议栈、Security,定义在$(SDK Src)/framework/bluetooth/breeze/hal下,其余部分代码和应用维持不变。
breeze_hal_ble:对接BLE蓝牙协议栈部分接口,包含蓝牙广播,注册Breeze蓝牙服务等 breeze_hal_sec:对接安全部分,包含AES128 CBC加解密算法 breeze_hal_os:对接不同OS的接口,包含OS timer的资源,KV(存储和读取接口)操作等API接口列表
详细定义和说明参见蓝牙设备端SDK用户编程接口。
HAL接口列表
详细定义和说明参见蓝牙设备端SDK移植接口。
在生活物联网平台定义产品
由于设备最终要通过生活物联网平台认证,所以需要在生活物联网平台申请对应的产品认证信息。
创建项目。 新建产品。参见创建产品,并按照以下要求配置。
选择节点类型为设备 选择是否接入网关为是 选择接入网关协议为BLE 定义产品功能。 (可选)在产品-设备调试界面,单击新增测试设备。在产品定义界面右边可以看到产品的三个信息:Product Key、Product Secret和Product ID。这对于一型一密设备来说已经足够,但一机一密还需要在产品-设备调试中生成对应同一类型产品的多个设备,根据DeviceName进行区分Device Secret。此时,一机一密需要的五个元素信息都已经获得。
设备端高级应用场景开发
在SDK基础建立安全通道基础上,主要有以下两应用场景:低功耗蓝牙辅助Wi-Fi配网和低功耗蓝牙设备OTA。
蓝牙辅助配网
使用场景Wi-Fi设备需要连接Wi-Fi热点(Wi-Fi AP)之后才能与其它设备进行IP通信。对于没有键盘、没有触摸屏、没有Web Server的Wi-Fi IoT设备而言,如何获取Wi-Fi热点的SSID、密码是实现设备远程管理的第一个关键步骤。
我们将Wi-Fi设备获取到Wi-Fi热点的SSID、密码的步骤称为Wi-Fi配网,蓝牙辅助Wi-Fi配网方案适用于同时支持蓝牙BLE以及Wi-Fi的设备,该方案通过蓝牙BLE通道将Wi-Fi热点的SSID/密码发送给Wi-Fi设备,从而让Wi-Fi设备可以连接到Wi-Fi AP(通常为Wi-Fi无线路由器)。蓝牙辅助Wi-Fi配网的工作原理示意图如下。
可以很容易得出蓝牙辅助Wi-Fi配网构成。
设备端SDK:设备端硬件支持Combo芯片(同时支持Wi-Fi和BLE),并运行基于Breeze SDK的蓝牙配网例程。 配网手机端SDK:手机集成配套的蓝牙配网SDK或者“云智能”App。 开发流程如果您是一个Wi-Fi的模组商或者设备商,您的模组/设备支持蓝牙BLE以及Wi-Fi并且希望集成阿里云IoT生活物联网平台提供的蓝牙辅助Wi-Fi配网功能,可以按照下面的过程进行模组/设备开发。
产品注册,参见设备开发流程,并在产品的产品-人机交互的配网引导中增加蓝牙辅助配网的配网方式。 使用“云智能”App与设备端的comboapp开发。如果集成移动端SDK开发自有App的方式,可参见蓝牙连接开发指南。 设备端comboapp开发在完成设备移植Breeze SDK步骤后,可参考example/comboapp实现低功耗蓝牙辅助Wi-Fi配网的功能,并将“产品注册”阶段的设备信息设置到comboapp中。
Breeze设备OTA
OTA编译配置可以参考breezeapp示例,默认已经使能OTA功能。
OTA对接移植OTA模块代码实现在framework/uOTA/src/device/ble下,包含以下目录。
. ├── README.md ├── ble.mk ├── inc //包含了对外的接口和对接API │ ├── ais_ota.h │ ├── ota_breeze.h │ ├── ota_breeze_export.h │ ├── ota_breeze_plat.h │ └── ota_breeze_transport.h └── src // OTA内部逻辑的实现 ├── ota_breeze.c ├── ota_breeze_plat.c ├── ota_breeze_service.c └── ota_breeze_transport.c
具体对接函数请参见蓝牙设备端SDK OTA接口。
OTA调试和使用OTA的具体用法请参见蓝牙连接开发指南中“运营中OTA配置”章节。