阿里云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配置”章節。