OpenHarmony轻量设备应用BLE接口的使用(四):设备广播
·
本文讲述的是在OpenHarmony轻量设备(L0设备)上进行BLE相关应用程序的开发。应用所在设备作为Gatt Client与其他Gatt Server设备进行连接和通信。
本文重点讲述BLE广播的实现。
BLE设备广播的接口
BLE设备可直接调用BLE的接口启动、停止发送广播报文。
// 开始发送BLE广播
startAdvertising(setting: AdvertiseSetting, advData: AdvertiseData, advResponse?: AdvertiseData): number
// 停止发送BLE广播。
stopAdvertising(): number
// 开始发送BLE广播。使用Callback异步回调。
startAdvertising(advertisingParams: AdvertisingParams, callback: AsyncCallback<number, number>): void
// 停止发送BLE广播。使用Callback异步回调。
stopAdvertising(advertisingId: number, callback: AsyncCallback<number>): void
详细的BLE设备连接接口说明请参考蓝牙ble模块
BLE设备广播接口的使用
以下为BLE设备广播的示例代码,通过按钮触发BLE设备广播报文的发送和停止。
1、点击"开始广播"按钮,开始发送广播报文。如果AdvertisingParams的duration参数设置为0,则代表一直发送广播报文,直到调用stopAdvertising接口才停止广播。
示例中AdvertisingParams的duration参数设置为2000,表示发送广播报文持续20秒钟,20秒钟后自动停止广播无需再调用stopAdvertising接口。
示例中发送的广播报文只携带了AD Type为0xFF的厂商自定义信息,不包含service的信息。
2、在广播停止前,点击"停止广播"按钮停止发送广播报文。
// connect.js
import ble from '@ohos.bluetooth.ble';
let advId = 0;
export default {
data: {
...
},
// 用户操作开始BLE发送广播报文
onStartAdvertisingClick() {
// 广播报文ad Type=0xff为manufacture部分,包含id+value
// 广播报文的manufacture部分数据为: 0x0a ff 57 4b 50 96 50 c7 1f 60 60
let manuArray = new Uint8Array([0x50,0x96,0x50,0xc7,0x1f,0x60,0x60]);
if (manuArray == null) {
console.error('failed to build manufacture data');
return errEnum.failed;
}
let manuData = {
manufactureId: 0x574B, // manufacture的id占据发送数据的前2个字节
manufactureValue: manuArray.buffer
};
let advData = {
serviceUuids: [], // 示例发送的广播报文不包含UUID
manufactureData: [manuData],
serviceData: [], // 示例发送的广播报文不包含service data
includeDeviceName: false
};
let advSetting = {
interval: 160, // 广播报文发送间隔 160slot = 100ms
txPower: -7,
connectable: true
};
let param = {
advertisingSettings: advSetting,
advertisingData: advData,
duration: 2000 // 单位:10ms,广播持续20s后会自动停止广播
};
ble.startAdvertising(param, (err, advHandle) => {
if (err) {
console.error(`call ble startAdvertising failed, err ${err}`);
return;
}
console.debug(`call ble startAdvertising success, handle ${advHandle}`);
advId = advHandle;
});
},
// 用户操作停止BLE发送广播报文
onStopAdvertisingClick() {
ble.stopAdvertising(advId, (err) => {
if (err) {
console.error(`call ble stopAdvertising failed, err ${err}`);
return;
}
console.debug('call ble stopAdvertising success');
});
},
...
}
通过手机安装的蓝牙抓包工具nRF Connect,可以抓到上述示例中BLE设备发送的广播报文。

更多推荐

所有评论(0)