ble_host
概述
AliOS Things 3.3提供支持符合藍(lán)牙4.0/4.2/5.0核心協(xié)議規(guī)范的BLE Host軟件協(xié)議棧組件,方便用戶使用藍(lán)牙BLE功能。ble_host組件功能框圖如下圖紅色部分:
功能支持
ble_host組件主要支持如下功能:
Generic Access Profile(GAP)角色支持
Peripheral&Central
Observer&Broadcaster
Generic Attribute Profile(GATT)連接支持
GATT client
GATT server
Security Manager(SM)支持
Legacy Pairing
多安全等級(jí)設(shè)定Security Level 1, 2, 3, 4
安全連接Security Connection
LE Privacy(RPA地址生成)
HCI接口支持
標(biāo)準(zhǔn)HCI接口,支持host-only,host通過HCI硬件接口(以UART為主)和controller對(duì)接
虛擬HCI接口,支持host+controller,適合SoC的硬件平臺(tái)
版權(quán)說明
Apache license v2.0
目錄結(jié)構(gòu)
|-- ble_profiles #BLE服務(wù)
|-- bt_crypto #BLE安全
|-- bt_defconfig #BLE配置項(xiàng)
|-- bt_host #BLE Host核心代碼
|-- bt_preconfig #BLE預(yù)配置項(xiàng)
|-- bt_shell #BLE控制臺(tái)命令
|-- include #頭文件
|-- package.yaml #makefile
|-- README.md #README文檔
|-- SConscript
|-- script
依賴組件
osal_aos
常用配置
無。
配置列表
配置在組件的package.yaml中定義,均已默認(rèn)打開,用戶可根據(jù)需求裁剪。
CONFIG_BT_CENTRAL | BLE Central角色功能開關(guān) |
CONFIG_BT_PERIPHERAL | BLE 外設(shè)角色功能開關(guān) |
CONFIG_BT_SMP | BLE SMP功能開關(guān) |
CONFIG_BT_GATT_CLIENT | BLE GATT Client功能開關(guān) |
CONFIG_BT_OBSERVER | BLE 廣播掃描功能開關(guān) |
API說明
API列表
ble_stack_init | BLE協(xié)議棧初始化 |
ble_stack_event_register | 注冊(cè)BLE事件處理函數(shù) |
ble_stack_adv_start | BLE 廣播開始 |
ble_stack_adv_stop | BLE 廣播停止 |
ble_stack_scan_start | BLE 掃描開始 |
ble_stack_scan_stop | BLE 掃描停止 |
ble_stack_gatt_mtu_get | GATT,獲取當(dāng)前連接MTU大小 |
ble_stack_gatt_registe_service | GATT server,服務(wù)注冊(cè) |
ble_stack_gatt_notificate | GATT server,屬性notificate方式上報(bào) |
ble_stack_gatt_indicate | GATT server,屬性indicate方式上報(bào) |
ble_stack_gatt_mtu_exchange | GATT client,協(xié)商MTU大小 |
ble_stack_gatt_discovery | GATT client,發(fā)現(xiàn)對(duì)端GATT服務(wù) |
ble_stack_gatt_read | GATT client,讀取對(duì)端GATT server屬性 |
ble_stack_gatt_read_multiple | GATT client,讀取對(duì)端GATT server多個(gè)屬性 |
ble_stack_gatt_write | GATT client,寫入對(duì)端GATT server屬性 |
ble_stack_connect | 開始BLE連接 |
ble_stack_disconnect | 斷開BLE連接 |
ble_stack_connect_param_update | BLE連接參數(shù)協(xié)商 |
ble_stack_security | BLE連接安全等級(jí)設(shè)置 |
ble_stack_iocapability_set | BLE SMP IO能力配置 |
ble_stack_smp_cancel | BLE SMP配對(duì)請(qǐng)求取消 |
ble_stack_smp_passkey_entry | BLE SMP passkey輸入 |
ble_stack_smp_passkey_confirm | BLE SMP passkey確認(rèn) |
ble_stack_dev_unpair | PIN SMP配對(duì)解綁 |
API詳情
ble_stack_init
BLE模塊初始化。函數(shù)原型
int ble_stack_init(init_param_t *param)
輸入?yún)?shù)
args | description |
param.dev_name | 設(shè)備名,string類型,不超過28字符 |
param.dev_addr | 設(shè)備mac地址,僅設(shè)置為random類型時(shí)生效 |
param.conn_num_max | 最大連接數(shù) |
返回參數(shù)0:
成功, 其他值
:失敗。
ble_stack_event_register
注冊(cè)BLE協(xié)議棧事件回調(diào)函數(shù)。注意:入?yún)⒉荒苁且粋€(gè)局部變量。函數(shù)原型
int ble_stack_event_register(ble_event_cb_t *callback)
輸入?yún)?shù)
args | description |
callback.callback | 回調(diào)函數(shù) |
callback.next | 無需填寫,由API函數(shù)處理 |
返回參數(shù)0:
成功, 其他值
:失敗。
ble_stack_adv_start
打開BLE廣播功能。函數(shù)原型
int ble_stack_adv_start(adv_param_t *param)
輸入?yún)?shù)
args | description |
param.type | 廣播類型,定義如下 0x00 普通廣播 0x01 直連廣播 0x02 可連接可掃描廣播 0x03 不可連接廣播, 0x04 低占空直連廣播 |
param.ad | ADV廣播內(nèi)容數(shù)組 |
param.sd | Scan Response廣播內(nèi)容數(shù)組 |
param.ad_num | ADV廣播內(nèi)容數(shù)組大小 |
param.sd_num | Scan Response廣播內(nèi)容數(shù)組大小 |
param.interval_min | 廣播發(fā)送間隔最小值 |
param.interval_max | 廣播發(fā)送間隔最大值 |
param.filter_policy | 廣播過濾開關(guān),定義如下 0x00 接受所有連接與掃描請(qǐng)求 0x01 接受所有連接請(qǐng)求,接受白名單設(shè)備的掃描請(qǐng)求 0x02 接受白名單的連接請(qǐng)求,接受所有掃描請(qǐng)求 0x03 僅接受白名單內(nèi)的掃描與連接請(qǐng)求 |
param.channel_map | 廣播信道設(shè)置, bit0: 37信道 bit1: 38信道 bit2: 39信道 |
param.direct_peer_addr | 直連廣播設(shè)備地址,僅在廣播類型為直連類型時(shí)才生效 |
返回參數(shù)0:
成功, 其他值
:失敗。
ble_stack_adv_stop
關(guān)閉BLE廣播功能。函數(shù)原型
int ble_stack_adv_stop()
輸入?yún)?shù)
args | description |
無 |
返回參數(shù)0:
成功, 其他值
:失敗。
ble_stack_scan_start
打開BLE掃描功能。函數(shù)原型
int ble_stack_scan_start(const scan_param_t *param)
輸入?yún)?shù)
args | description |
param.type | 掃描類型,定義如下 0x00 被動(dòng)掃描 0x01 主動(dòng)掃描 |
param.filter_dup | 重復(fù)設(shè)備上報(bào)過濾開關(guān),定義如下 0x00 關(guān)閉過濾 0x01 開啟過濾 |
param.interval | 掃描間隔,單位為0.625毫秒 |
param.window | 掃描窗大小,單位為0.625毫秒 |
param.scan_filter | 掃描過濾類型,定義如下 0x00 所有廣播均上報(bào) 0x01 僅白名單設(shè)備的廣播上報(bào) |
返回參數(shù)0:
成功, 其他值
:失敗。
ble_stack_scan_stop
關(guān)閉BLE掃描功能。異步事件,掃描結(jié)果在注冊(cè)的事件回調(diào)函數(shù)中返回,返回事件EVENT_GAP_DEV_FIND函數(shù)原型
int ble_stack_scan_stop()
輸入?yún)?shù)
args | description |
無 |
返回值0:
成功, 其他值
:失敗。
ble_stack_gatt_mtu_get
獲取一個(gè)連接的當(dāng)前MTU大小函數(shù)原型
int ble_stack_gatt_mtu_get(int16_t conn_handle)
輸入?yún)?shù)
args | description |
conn_handle | 連接句柄,在連接成功后分配 |
返回值23-65535: MTU大小
ble_stack_gatt_registe_service
注冊(cè)一個(gè)GATT服務(wù)函數(shù)原型
int ble_stack_gatt_registe_service(gatt_service *s, gatt_attr_t attrs[], uint16_t attr_num)
輸入?yún)?shù)
args | description |
s.bt_gatt_attr | 無需填寫,由API賦值 |
s.attr_count | 無需填寫,由API賦值 |
s.node | 無需填寫,由API賦值 |
attrs | 屬性列表 |
attr_num | 屬性列表大小 |
返回值0:
成功, 其他值
:失敗。
ble_stack_gatt_notificate
GATT服務(wù)某個(gè)屬性值上報(bào),此上報(bào)方式無需GATT Client回復(fù)函數(shù)原型
int ble_stack_gatt_notificate(int16_t conn_handle, uint16_t char_handle, const uint8_t *data, uint16_t len)
輸入?yún)?shù)
args | description |
conn_handle | 連接句柄,在連接成功后分配 |
char_handle | 屬性句柄,在注冊(cè)服務(wù)時(shí)分配 |
data | 上報(bào)數(shù)據(jù)指針 |
len | 上報(bào)數(shù)據(jù)長(zhǎng)度 |
返回值0:
成功, 其他值
:失敗。
ble_stack_gatt_indicate
GATT服務(wù)某個(gè)屬性值上報(bào),此上報(bào)方式GATT Client回復(fù)confirm。函數(shù)原型
int ble_stack_gatt_indicate(int16_t conn_handle, int16_t char_handle, const uint8_t *data, uint16_t len)
輸入?yún)?shù)
args | description |
conn_handle | 連接句柄,在連接成功后分配 |
char_handle | 屬性句柄,在注冊(cè)服務(wù)時(shí)分配 |
data | 上報(bào)數(shù)據(jù)指針 |
len | 上報(bào)數(shù)據(jù)長(zhǎng)度 |
返回值0:
成功, 其他值
:失敗。
ble_stack_gatt_mtu_exchange
GATT Client功能,確保配置項(xiàng)CONFIG_BT_GATT_CLIENT配置。GATT協(xié)商MTU大小,協(xié)商大小由配置項(xiàng)CONFIG_BT_L2CAP_RX_MTU與CONFIG_BT_L2CAP_TX_MTU的最小值以及對(duì)端設(shè)備的回復(fù)決定。異步事件,執(zhí)行結(jié)果在注冊(cè)的事件回調(diào)函數(shù)中返回,返回事件EVENT_GATT_MTU_EXCHANGE函數(shù)原型
int ble_stack_gatt_mtu_exchange(int16_t conn_handle)
輸入?yún)?shù)
args | description |
conn_handle | 連接句柄,在連接成功后分配 |
返回值0:
成功, 其他值
:失敗。
ble_stack_gatt_discovery
GATT Client功能,確保配置項(xiàng)CONFIG_BT_GATT_CLIENT配置。GATT服務(wù)或者屬性項(xiàng)發(fā)現(xiàn)。異步事件,執(zhí)行結(jié)果在注冊(cè)的事件回調(diào)函數(shù)中返回,返回事件根據(jù)入?yún)⒉煌煌?/p>
函數(shù)原型
int ble_stack_gatt_discovery(int16_t conn_handle,
gatt_discovery_type_en type,
uuid_t *uuid,
uint16_t start_handle,
uint16_t end_handle)
輸入?yún)?shù)
args | description |
conn_handle | 連接句柄,在連接成功后分配 |
type | GATT發(fā)現(xiàn)類型,定義如下 0x00 發(fā)現(xiàn)主服務(wù) 0x01 發(fā)現(xiàn)包含服務(wù) 0x02 發(fā)現(xiàn)屬性項(xiàng) 0x03 發(fā)現(xiàn)屬性描述項(xiàng) |
uuid | 需要發(fā)現(xiàn)的UUID值 |
start_handle | 發(fā)現(xiàn)起始句柄 |
end_handle | 發(fā)現(xiàn)結(jié)束句柄 |
返回值0:
成功, 其他值
:失敗。
ble_stack_gatt_read
GATT Client功能,確保配置項(xiàng)CONFIG_BT_GATT_CLIENT配置。GATT讀取某個(gè)屬性項(xiàng)的屬性值異步事件,執(zhí)行結(jié)果在注冊(cè)的事件回調(diào)函數(shù)中返回,返回事件EVENT_GATT_CHAR_READ_CB函數(shù)原型
int ble_stack_gatt_read(int16_t conn_handle, uint16_t attr_handle, uint16_t offset)
輸入?yún)?shù)
args | description |
conn_handle | 連接句柄,在連接成功后分配 |
attr_handle | 讀取的屬性項(xiàng)句柄 |
offset | 讀取起始位置 |
返回值0:
成功, 其他值
:失敗。
ble_stack_gatt_read_multiple
GATT Client功能,確保配置項(xiàng)CONFIG_BT_GATT_CLIENT配置。GATT讀取多個(gè)屬性項(xiàng)的屬性值異步事件,執(zhí)行結(jié)果在注冊(cè)的事件回調(diào)函數(shù)中返回,返回事件EVENT_GATT_CHAR_READ_CB函數(shù)原型
int ble_stack_gatt_read_multiple(int16_t conn_handle, uint16_t attr_count, uint16_t attr_handle[])
輸入?yún)?shù)
args | description |
conn_handle | 連接句柄,在連接成功后分配 |
attr_count | 讀取的屬性項(xiàng)列表大小 |
attr_handle | 讀取的屬性項(xiàng)句柄列表 |
返回值0:
成功, 其他值
:失敗。
ble_stack_gatt_write
GATT Client功能,確保配置項(xiàng)CONFIG_BT_GATT_CLIENT配置。GATT寫入某個(gè)屬性項(xiàng)的屬性值異步事件,執(zhí)行結(jié)果在注冊(cè)的事件回調(diào)函數(shù)中返回,返回事件EVENT_GATT_CHAR_WRITE_CB函數(shù)原型
int ble_stack_gatt_write(int16_t conn_handle, uint16_t attr_handle, uint8_t *data, uint16_t len, uint16_t offset, gatt_write_en type)
輸入?yún)?shù)
args | description |
conn_handle | 連接句柄,在連接成功后分配 |
attr_handle | 寫入的屬性項(xiàng)句柄 |
data | 寫入的數(shù)據(jù)指針 |
len | 寫入的數(shù)據(jù)長(zhǎng)度 |
offset | 寫入到屬性項(xiàng)的起始位置 |
type | 寫入類型,定義如下 0x00 帶回復(fù)寫入 0x01 不帶回復(fù)寫入 0x02 帶簽名寫入 |
返回值0:
成功, 其他值
:失敗。
ble_stack_gatt_read_multiple
GATT Client功能,確保配置項(xiàng)CONFIG_BT_GATT_CLIENT配置。此函數(shù)用于GATT讀取多個(gè)屬性項(xiàng)的屬性值。異步事件,執(zhí)行結(jié)果在注冊(cè)的事件回調(diào)函數(shù)中返回,返回事件EVENT_GATT_CHAR_READ_CB函數(shù)原型
int ble_stack_gatt_read_multiple(int16_t conn_handle, uint16_t attr_count, uint16_t attr_handle[])
輸入?yún)?shù)
args | description |
conn_handle | 連接句柄,在連接成功后分配 |
attr_count | 讀取的屬性項(xiàng)列表大小 |
attr_handle | 讀取的屬性項(xiàng)句柄列表 |
返回值0:
成功, 其他值
:失敗。
ble_stack_connect
BLE連接功能,確保配置項(xiàng)CONFIG_BT_CONN配置。此函數(shù)用于BLE連接某個(gè)設(shè)備。異步事件,執(zhí)行結(jié)果在注冊(cè)的事件回調(diào)函數(shù)中返回,返回事件EVENT_GATT_CONN_CHANGE函數(shù)原型
int ble_stack_connect(dev_addr_t *peer_addr, conn_param_t *param, uint8_t auto_connect)
輸入?yún)?shù)
args | description |
peer_addr.type | 對(duì)端設(shè)備的地址類型 |
peer_addr.val | 對(duì)端設(shè)備的藍(lán)牙地址 |
param.interval_min | 連接間隔最小值參數(shù),單位是0.625毫秒 |
param.interval_max | 連接間隔最大值參數(shù),單位是0.625毫秒 |
param.lantency | 連接延遲參數(shù),單位是連接間隔,注意此時(shí)間長(zhǎng)度不能超過timeout參數(shù)的一半。 |
param.timeout | 連接超時(shí)參數(shù),單位10ms |
auto_connect | 是否自動(dòng)連接定義如下 0x00 不自動(dòng)連接 0x01 自動(dòng)連接 |
返回值0:
成功, 其他值
:失敗。
ble_stack_disconnect
BLE連接功能,確保配置項(xiàng)CONFIG_BT_CONN配置。此函數(shù)用于BLE斷開某個(gè)設(shè)備的連接。異步事件,執(zhí)行結(jié)果在注冊(cè)的事件回調(diào)函數(shù)中返回,返回事件EVENT_GATT_CONN_CHANGE函數(shù)原型
int ble_stack_disconnect(int16_t conn_handle)
輸入?yún)?shù)
args | description |
conn_handle | 連接句柄,在連接事件中返回 |
返回值0:
成功, 其他值
:失敗。
ble_stack_connect_param_update
BLE連接功能,確保配置項(xiàng)CONFIG_BT_CONN配置。此函數(shù)用于BLE修改某個(gè)連接的連接參數(shù)。異步事件,執(zhí)行結(jié)果在注冊(cè)的事件回調(diào)函數(shù)中返回,返回事件EVENT_GAP_CONN_PARAM_UPDATE函數(shù)原型
int ble_stack_connect_param_update(int16_t conn_handle, conn_param_t *param)
輸入?yún)?shù)
args | description |
conn_handle | 連接句柄,在連接事件中返回 |
param.interval_min | 連接間隔最小值參數(shù),單位是0.625毫秒 |
param.interval_max | 連接間隔最大值參數(shù),單位是0.625毫秒 |
param.lantency | 連接延遲參數(shù),單位是連接間隔,注意此時(shí)間長(zhǎng)度不能超過timeout參數(shù)的一半。 |
param.timeout | 連接超時(shí)參數(shù),單位10ms |
返回值0:
成功, 其他值
:失敗。
ble_stack_security
BLE連接功能,確保配置項(xiàng)CONFIG_BT_CONN配置。此函數(shù)用于BLE修改某個(gè)連接的安全參數(shù)。異步事件,執(zhí)行結(jié)果在注冊(cè)的事件回調(diào)函數(shù)中返回,返回事件EVENT_GAP_CONN_SECURITY_CHANGE函數(shù)原型
int ble_stack_security(int16_t conn_handle, security_en level)
輸入?yún)?shù)
args | description |
conn_handle | 連接句柄,在連接事件中返回 |
level | 安全等級(jí),定義如下 0x00 無安全,無加密無鑒權(quán) 0x01 低安全,等同于0x00 0x02 中安全,有加密無鑒權(quán) 0x03 高安全,有加密有鑒權(quán) |
返回值0:
成功, 其他值
:失敗。
ble_stack_iocapability_set
BLE SMP配對(duì)功能,確保配置項(xiàng)CONFIG_BT_SMP配置。此函數(shù)用于設(shè)置BLE設(shè)備的IO能力,這個(gè)設(shè)置會(huì)在BLE SMP配對(duì)被使用。函數(shù)原型
int ble_stack_iocapability_set(uint8_t io_cap)
輸入?yún)?shù)
args | description |
io_cap | IO能力,定義如下 bit0-bit2: 0x01 無輸入 0x02 輸入正確/錯(cuò)誤 0x03 鍵盤輸入 bit3-bit4: 0x00 無輸出 0x01 顯示器輸出 |
返回值0:
成功, 其他值
:失敗。
ble_stack_smp_cancel
BLE SMP配對(duì)功能,確保配置項(xiàng)CONFIG_BT_SMP配置。此函數(shù)用于取消當(dāng)前BLE的SMP配對(duì)請(qǐng)求。函數(shù)原型
int ble_stack_smp_cancel(int16_t conn_handle)
輸入?yún)?shù)
args | description |
conn_handle | 連接句柄,在連接事件中返回 |
返回值0:
成功, 其他值
:失敗。
ble_stack_smp_passkey_entry
BLE SMP配對(duì)功能,確保配置項(xiàng)CONFIG_BT_SMP配置。此函數(shù)用于SMP Passkey模式下輸入當(dāng)前passkey,當(dāng)接收到EVENT_SMP_PASSKEY_ENTER后調(diào)用。函數(shù)原型
int ble_stack_smp_passkey_entry(int16_t conn_handle, uint32_t passkey)
輸入?yún)?shù)
args | description |
conn_handle | 連接句柄,在連接事件中返回 |
passskey | 0-999999之間 |
返回值0:
成功, 其他值
:失敗。
ble_stack_smp_passkey_confirm
BLE SMP配對(duì)功能,確保配置項(xiàng)CONFIG_BT_SMP配置。此函數(shù)用于SMP Passkey模式下確認(rèn)當(dāng)前的passkey是否正確,當(dāng)接收到EVENT_SMP_PASSKEY_CONFIRM后調(diào)用。函數(shù)原型
int ble_stack_smp_passkey_confirm(int16_t conn_handle)
輸入?yún)?shù)
args | description |
conn_handle | 連接句柄,在連接事件中返回 |
返回值0:
成功, 其他值
:失敗。
ble_stack_dev_unpair
BLE SMP配對(duì)功能,確保配置項(xiàng)CONFIG_BT_SMP配置。此函數(shù)用于解除某臺(tái)已SMP配對(duì)的設(shè)備的配對(duì),如果連接存在則斷開連接。函數(shù)原型
int ble_stack_dev_unpair(dev_addr_t *peer_addr)
輸入?yún)?shù)
args | description |
peer_addr.type | 地址類型 |
peer_addr.val | 設(shè)備地址 |
返回值0:
成功, 其他值
:失敗。
使用示例
本用例測(cè)試過程中使用到的工具有:
串口工具
NRF Connect(手機(jī))
組件使用示例相關(guān)的代碼下載、編譯和固件燒錄均依賴AliOS Things配套的開發(fā)工具,所以首先需要參考《AliOS Things集成開發(fā)環(huán)境使用說明之搭建開發(fā)環(huán)境》,下載安裝。 待開發(fā)環(huán)境搭建完成后,可以按照以下步驟進(jìn)行示例的測(cè)試。
步驟1 創(chuàng)建或打開工程
打開已有工程
如果用于測(cè)試的案例工程已存在,可參考《AliOS Things集成開發(fā)環(huán)境使用說明之打開工程》打開已有工程。
創(chuàng)建新的工程
組件的示例代碼可以通過編譯鏈接到AliOS Things的任意案例(solution)來運(yùn)行,這里選擇helloworld_demo案例。helloworld_demo案例相關(guān)的源代碼下載可參考《AliOS Things集成開發(fā)環(huán)境使用說明之創(chuàng)建工程》。
步驟2 添加組件
案例下載完成后,需要在helloworld_demo組件的package.yaml中添加對(duì)組件的依賴:
depends:
- ble_host: master
步驟3 下載組件
在已安裝了的開發(fā)環(huán)境工具欄中,選擇Terminal -> New Terminal啟動(dòng)終端,并且默認(rèn)工作路徑為當(dāng)前工程的workspace,此時(shí)在終端命令行中輸入:
aos install ble_host
上述命令執(zhí)行成功后,組件源碼則被下載到了./components/ble_host路徑中。
步驟4 添加示例
修改solutions/helloworld_demo/helloworld_demo.c,如下:
頭文件修改
#include <aos/ble.h>
#include <atomic.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/gatt.h>
#include <bluetooth/uuid.h>
代碼修改
#define EXAMPLE_BLE_DEV_NAME "HaaS BLE"
#define DEVICE_ADDR {0xE8,0x3B,0xE3,0x88,0xB4,0xC8}
int application_start(int argc, char *argv[])
{
int count = 0;
int ret;
dev_addr_t addr = {DEV_ADDR_LE_RANDOM, DEVICE_ADDR};
init_param_t init = {
.dev_name = EXAMPLE_BLE_DEV_NAME,
.dev_addr = &addr, //&addr,
.conn_num_max = 1,
};
printf("nano entry here!\r\n");
#if 1
/* bt stack init */
ret = ble_stack_init(&init);
if (ret) {
printf("error: ble_stack_init!, ret = %x\r\n", ret);
return -1;
}
#endif
while(1) {
printf("hello world! count %d \r\n", count++);
aos_msleep(1000);
};
}
步驟5 編譯固件
在示例代碼已經(jīng)添加至組件的配置文件,并且helloworld_demo已添加了對(duì)該組件的依賴后,就可以編譯helloworld_demo案例來生成固件了,具體編譯方法可參考《AliOS Things集成開發(fā)環(huán)境使用說明之編譯固件》。
步驟6 燒錄固件
helloworld_demo案例的固件生成后,可參考《AliOS Things集成開發(fā)環(huán)境使用說明之燒錄固件》來燒錄固件。
步驟7 打開串口
固件燒錄完成后,可以通過串口查看示例的運(yùn)行結(jié)果,打開串口的具體方法可參考《AliOS Things集成開發(fā)環(huán)境使用說明之查看日志》。
當(dāng)串口終端打開成功后,可在串口中輸入help來查看已添加的測(cè)試命令。
步驟8 測(cè)試示例
打開串口工具,在串口工具中輸入ble,可看到ble的cli命令集。
BLE廣播與連接測(cè)試
在串口工具中輸入ble adv start 020106,可以在串口日志中看到如下打印
adv_type:0;adv_interval_min:160 (*0.625)ms;adv_interval_max:240 (*0.625)ms
Advertising started
此時(shí)在手機(jī)端打開NRF Connect工具并搜索廣播包,可以看到設(shè)備。
點(diǎn)擊連接,可以看到Generic Access(GAP)和Generic Attribute(GATT)2個(gè)服務(wù),點(diǎn)擊GAP服務(wù)的Device Name的讀取按鍵(下圖紅色圈中的箭頭),可以讀取到數(shù)值“HaaS BLE”
常見問題
Q:此協(xié)議棧是否支持藍(lán)牙音樂播放 A:不支持經(jīng)典藍(lán)牙功能,僅支持BLE功能
Q:常見的GATT Service是否支持 A:支持,包括BAS,DIS,HIDS等等,詳情請(qǐng)參考ble_host/ble_profiles文件下的實(shí)現(xiàn)。