蓝牙设备端开发指南
更新时间: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移植接口说明】。
调试入云信息和环境搭建
设备信息申请
由于设备最终要通过云端认证,所以需要申请在云端申请对应的产品认证信息
创建项目,登录阿里云IoT生活物联网平台,点击"创建项目"
新建产品,在产品界面,点击"新建产品",注意选择节点类型为"设备",是否接入"是",并接入网关协议为"BLE"。
在产品定义界面右边可以看到产品的三个信息:Product Key, Product Secret和Product ID,这对于一型一密设备来说已经足够,但一机一密还需要继续点击"设备调试"。
在设备调试界面,点击"新增测试设备",继续生成对应同一类型产品的多个设备,根据"DeviceName"进行区分,Device Secret,至此一机一密需要的五个元素信息都已经获得。
调试环境搭建
测试用例主要使用Breezeapp并配合手机客户端demo进行测试。
编译breezeapp应用。在
app/example/bluetooth/breezeapp/breezeapp.c
中,将设备信息修改为上一步申请到的元组信息,参考前面编译部分。烧录固件至设备,并连接串口终端会有如下类似信息(Breeze信息,蓝牙MAC地址,AOS版本等)打印:
手机客户端测试(以IOS为例)
登录账号,注意环境需要与设备端五元组信息匹配。
打开主界面并扫描蓝牙设备。
点击并连接,界面会有连接成功和安全通道建立提示。
通过手机端发送数据,设备端回传数据,手机界面会有提示和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来配置:
修改linkkitapp,使能蓝牙配网: 应用目录位于
app/example/linkkitapp
下,默认linkkitapp的蓝牙配网功能是关闭的,需要使能蓝牙配网,选中"Enable Breeze AWSS"。使能Breeze模块对应的AWSS功能,menuconfig主界面"Network" ->"Breeze SDK"->"Enable AWSS"。
配置meunconfig其他选项。
修改对应的设备信息,在
app/example/linkkitapp/combo/combo_devinfo.h
修改。编译固件:
aos make
烧录固件到设备中,连接串口。
- 手机SDK端(以Android平台XlinkSDKDemo为例)
注册并登录账号。
手机连接路由器,确保路由器可以连接阿里云。
根据配网信息生成二维码,可以在第三方二维码生成网站,如https://cli.im/,二维码格式如下:
在XlinkSdkDemo底部菜单,"配网"->"统一配网"->"扫码方式配网"
进入二维码扫描界面,扫描上一步生成的包含设备和路由器信息的二维码。
主界面会有相应的设备配网结果提示。
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 |