蓝牙设备端开发指南

更新时间:2019-06-12 16:35:39

背景介绍

阿里云IoT针对蓝牙设备,提供了一套Breeze方案,可以实现APP-设备-云的完整链路。
本文主要介绍在设备端上,如何让硬件具备蓝牙BLE能力,并与手机蓝牙连接后通过一套SDK建立安全通道,将数据推送给云端。手机端客户端和云端开发请参阅【蓝牙连接开发指南】。
链路图如下:
AliOS Things实现了一套基于蓝牙链路的轻量级安全通路的Breeze SDK,结构框图如下:

设备端Breeze SDK代码结构

Breeze设备端作为AliOS Things的组件完全开源,AliOS Things最新版本请从github获取,使用请参阅AliOS Things相关wiki。在AliOS Things的根目录下,代码位于$(AliOS Things Src)/network/bluetooth/breeze,如下:

.
├── Config.in
├── README.md
├── aos.mk
├── api
├── core
├── include
└── ref-impl

其中:

  • Config.in //配合meunconfig组件配置

  • README.md //readme文档

  • aos.mk //makefile文档

  • api //目录,暴露给应用的接口:breeze_export. 是Breeze SDK提供的接口; breeze_awss_export.是蓝牙辅助配网的接口。用户可以依照应用场景选择其中之一使用。

  • core //目录,源码核心实现,包含安全,通道以及扩展指令等的实现。

  • include //Breeze SDK移植的头文件。

  • ref-impl //参考移植实现,使用AliOS Things OS, BLE协议栈,以及内部mebdtls和SH256的安全部分参考。

使用开发指南

开发者可以使用默认配置,在已经支持的硬件平台上(如nordic的pca10040/pca10056)直接测试并修改例程,也可以通过SDK提供的HAL接口,对接需要的接口来实现。

使用AliOS Things配置

  • 使用默认配置编译,获取默认配置固件:
$aos make breezeapp@pca10040 -c config
$aos make
  • 如果想要修改配置,可通过menuconfig来修改并编译
$aos make menuconfig
$aos make

menuconfig具体重要配置点:

  • Application Configuration 界面勾选"Builtin Examples" -> "breezeapp", 根据需要勾选"Enable OTA with Breeze Link"

  • BSP Configuration,选择需要的硬件平台,如pca10040

  • Network Configuration,选择"Breeze SDK",在子菜单选项分别对应:

  • 连续安全广播:用以特定安全广播,需配合云端一起使用。

  • 设备入网加密方式选择: 一型一密和一机一密设备认证选择。

  • 辅助配网功能:用来使能辅助配网相关的配置。

  • 链路认证:Breeze链路安全认证。

  • 使用默认对接配置:OS使用AliOS Things,Security算法使用内部加密算法,蓝牙使用Blestack。

移植SDK到第三方平台

参见源代码目录下的ref-impl,将第三方的实现替换此文件夹下的HAL实现:1)OS; 2)BLE协议栈; 3)Security,定义在$(AliOS Things Src)/network/bluetooth/breeze/include下,其余部分代码和应用维持不变。

  • breeze_hal_ble:对接BLE蓝牙协议栈部分接口,包含蓝牙广播,注册Breeze蓝牙服务等。

  • breeze_hal_sec:对接安全部分,包含AES128 CBC加解密算法,SHA256接口。

  • breeze_hal_os:对接不同OS的接口,包含OS timer的资源, KV(存储和读取接口)操作等。

API接口列表

详细定义和说明见【蓝牙设备端SDK用户编程说明】。

HAL接口列表

详细定义和说明见【蓝牙设备端SDK移植接口说明】。

调试入云信息和环境搭建

设备信息申请

由于设备最终要通过云端认证,所以需要申请在云端申请对应的产品认证信息

  1. 创建项目,登录阿里云IoT生活物联网平台,点击"创建项目"

  2. 新建产品,在产品界面,点击"新建产品",注意选择节点类型为"设备",是否接入"是",并接入网关协议为"BLE"。

  3. 在产品定义界面右边可以看到产品的三个信息:Product Key, Product Secret和Product ID,这对于一型一密设备来说已经足够,但一机一密还需要继续点击"设备调试"。

  4. 在设备调试界面,点击"新增测试设备",继续生成对应同一类型产品的多个设备,根据"DeviceName"进行区分,Device Secret,至此一机一密需要的五个元素信息都已经获得。

调试环境搭建

测试用例主要使用Breezeapp并配合手机客户端demo进行测试。

  1. 编译breezeapp应用。在app/example/bluetooth/breezeapp/breezeapp.c中,将设备信息修改为上一步申请到的元组信息,参考前面编译部分。

  2. 烧录固件至设备,并连接串口终端会有如下类似信息(Breeze信息,蓝牙MAC地址,AOS版本等)打印:

  3. 手机客户端测试(以IOS为例)

  4. 登录账号,注意环境需要与设备端五元组信息匹配。

  5. 打开主界面并扫描蓝牙设备。

  6. 点击并连接,界面会有连接成功和安全通道建立提示。

  7. 通过手机端发送数据,设备端回传数据,手机界面会有提示和hex数据显示。

设备端高级应用场景开发指南

在SDK基础建立安全通道基础上,主要有以下两应用场景:1)蓝牙辅助Wifi配网 2)设备OTA。

蓝牙辅助配网

使用场景

WiFi设备需要连接WiFi热点(WiFi AP)之后才能与其它设备进行IP通信,对于没有键盘、没有触摸屏、没有Web Server的WiFi IoT设备而言,如何获取WiFi热点的SSID/密码是实现设备远程管理的第一个关键步骤。
我们将WiFi设备获取到WiFi热点的SSID/密码的步骤称为WiFi配网,蓝牙辅助WiFi配网方案适用于同时支持蓝牙BLE以及WiFi的设备,该方案通过蓝牙BLE通道将WiFi热点的SSID/密码发送给WiFi设备,从而让WiFi设备可以连接到WiFi AP(通常为WiFi无线路由器)。蓝牙辅助WiFi配网的工作原理示意图如下:

可以很容易得出蓝牙辅助Wifi配网构成:

  • 设备端SDK:设备端硬件支持Wifi/BLE combo芯片,并运行基于Breeze SDK的蓝牙配网例程。

  • 配网手机端SDK:手机集成配套的蓝牙配网SDK或者蓝牙配网Demo演示例程。

开发流程

如果您是一个WiFi的模组商或者设备商,您的模组/设备支持蓝牙BLE以及WiFi并且希望集成阿里云IoT提供的蓝牙辅助WiFi配网功能,那么可以按照下面的过程进行模组/设备开发:

  • 产品注册。此部分请参考前面章节【调试入云信息和环境搭建】。

  • 设备移植。此部分请参考前面章节【移植SDK到第三方平台】。

  • 使用SDK/DemoSDK开发。详细指南可参阅【蓝牙连接开发指南

  • 设备端蓝牙配网调试,使用aos menuconfig来配置:

  1. 修改linkkitapp,使能蓝牙配网: 应用目录位于app/example/linkkitapp下,默认linkkitapp的蓝牙配网功能是关闭的,需要使能蓝牙配网,选中"Enable Breeze AWSS"。

  2. 使能Breeze模块对应的AWSS功能,menuconfig主界面"Network" ->"Breeze SDK"->"Enable AWSS"。

  3. 配置meunconfig其他选项。

  4. 修改对应的设备信息,在app/example/linkkitapp/combo/combo_devinfo.h修改。

  5. 编译固件: aos make

  6. 烧录固件到设备中,连接串口。

  • 手机SDK端(以Android平台XlinkSDKDemo为例)
  1. 注册并登录账号。

  2. 手机连接路由器,确保路由器可以连接阿里云。

  3. 根据配网信息生成二维码,可以在第三方二维码生成网站,如https://cli.im/,二维码格式如下:

  4. 在XlinkSdkDemo底部菜单,"配网"->"统一配网"->"扫码方式配网"

  5. 进入二维码扫描界面,扫描上一步生成的包含设备和路由器信息的二维码。

  6. 主界面会有相应的设备配网结果提示。


Breeze设备OTA

在SDK使能OTA情况下,手机Breeze SDK拉取云端的将要升级的固件,通过建立的Breeze通道将设备固件分包传输至设备端,设备端按照OTA的交互对写入对应FLASH分区,完成之后重启设备结束整个OTA流程。

OTA编译配置

可以参考breezeapp事例,默认已经使能OTA功能。如果使用meunconfig的话需要打开:
使能"Breezeapp"->"Enable OTA With Breeze Link"。


OTA对接移植

OTA模块代码实现在middleware/uagent/ota/ota_ble下,包含:

.
├── Config.in
├── README.md
├── aos.mk
├── inc
│   ├── ota_breeze.h
│   ├── ota_breeze_export.h
│   ├── ota_breeze_plat.h
│   └── ota_breeze_transport.h
└── src
    ├── ota_breeze.c
    ├── ota_breeze_plat.c
    ├── ota_breeze_service.c
    └── ota_breeze_transport.c

其中:

  • inc:包含了对外的接口和对接API。

  • src:OTA内部逻辑的实现。

具体对接函数请参阅【蓝牙设备端SDK OTA接口说明】

OTA调试和使用

OTA的具体用法请参见【蓝牙连接开发指南】中“运营中OTA配置”章节;

支持硬件列表

截止到AliOS Things 2.1版本,支持Breeze SDK以及高级特性的硬件平台汇总如下:

硬件 Breeze SDK 蓝牙配网 OTA
pca10040 Y N Y
pca10056 Y N Y
esp32 Y Y N

results matching ""

    No results matching ""