-
Notifications
You must be signed in to change notification settings - Fork 1.1k
蓝牙Breeze使用指南
阿里云IoT针对蓝牙设备,提供了一套Breeze方案,可以实现APP-设备-云的完整链路。 本文主要介绍在设备端上,如何让硬件具备蓝牙BLE能力,并与手机蓝牙连接后通过一套SDK建立安全通道,将数据推送给云端。手机端客户端和云端开发请参阅【蓝牙链接开发指南】。 链路图如下:
AliOS Things实现了一套基于蓝牙链路的轻量级安全通路的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接口,对接需要的接口来实现。
- 使用默认配置编译,获取默认配置固件:
$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。
参见源代码目录下的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(存储和读取接口)操作等。
详细定义和说明见【蓝牙设备端Breeze用户编程说明】。
详细定义和说明见【蓝牙设备端Breeze移植接口说明】。
由于设备最终要通过云端认证,所以需要申请在云端申请对应的产品认证信息
- 创建项目,登录阿里云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开发。Android手机SDK开发,请参考【Android配网开发说明】,iOS手机SDK开发,请参考【iOS配网开发说明】
-
设备端蓝牙配网调试,使用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/,二维码格式如下: {"pk":"xxxxx","dn":"xxxxxx","type":"5","pi":"xxxxx","pwd":"xxxxx"}
-
在XlinkSdkDemo底部菜单,"配网"->"统一配网"->"扫码方式配网"
-
进入二维码扫描界面,扫描上一步生成的包含设备和路由器信息的二维码。
-
主界面会有相应的设备配网结果提示。
Android DemoAPP详细请参考【Android配网Demo使用】,iOS DemoAPP详细请参考【iOS配网Demo使用说明】。
在SDK使能OTA情况下,手机Breeze SDK拉取云端的将要升级的固件,通过建立的Breeze通道将设备固件分包传输至设备端,设备端按照OTA的交互对写入对应FLASH分区,完成之后重启设备结束整个OTA流程。
可以参考breezeapp事例,默认已经使能OTA功能。如果使用meunconfig的话需要打开: 使能"Breezeapp"->"Enable OTA With Breeze Link"。
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内部逻辑的实现。
具体对接函数请参阅【蓝牙设备端Breeze OTA接口说明】
截止到AliOS Things 2.1版本,支持Breeze SDK以及高级特性的硬件平台汇总如下:
硬件 | Breeze SDK | 蓝牙配网 | OTA |
---|---|---|---|
pca10040 | Y | N | Y |
pca10056 | Y | N | Y |
esp32 | Y | Y | N |
| Home | Tutorial | Hardware | Porting Guide | Utilities | API Reference | Technical Docs | Certification |
Crafted with ❤️ by AliOS Things Team.