阿里云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,其结构框图如下所示。

设备端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移植接口

在生活物联网平台定义产品

由于设备最终要通过生活物联网平台认证,所以需要在生活物联网平台申请对应的产品认证信息。

  1. 创建项目。
    参见创建项目
  2. 新建产品。

    参见创建产品,并按照以下要求配置。

    • 选择节点类型设备
    • 选择是否接入网关
    • 选择接入网关协议BLE
    新建产品
  3. 定义产品功能。
    参见功能概述来定义产品的功能。
  4. (可选)在产品-设备调试界面,单击新增测试设备

    在产品定义界面右边可以看到产品的三个信息: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配置”章节。