向设备发送协议指的是通过应用层向驱动层发送特定的命令从而使设备执行对应的功能,鸿蒙官网给我们提供了很多创建实例的方法,不同的实例作用也不一样:
1.a2dp模块(高级音频分发配置文件):A2DP是Advanced Audio Distribution Profile的缩写,即高级音频分发配置文件。它是一种蓝牙协议,允许无线传输高品质音频流,例如音乐或语音通话,同时支持双向通信,因此可以用于耳机、扬声器、汽车音响等设备。
2.ble模块(低功耗蓝牙):BLE是Bluetooth Low Energy的缩写,意为“低功耗蓝牙”。它是一种能够在低功耗情况下进行通信的蓝牙技术,与传统蓝牙相比,BLE的功耗更低,适用于需要长时间运行的低功耗设备,如智能手表、健康监测设备、智能家居等。
3.hid模块(人机接口设备):HID是Human Interface Device的缩写,即人机接口设备。在蓝牙中,HID模块是一种允许用户通过蓝牙连接键盘、鼠标、游戏手柄等人机接口设备的模块。用户可以通过HID模块将这些设备连接到蓝牙主机上,实现无线控制和输入。
以上只是列举了部分的详情见官网
1.这里我们以hid来做示范首先获取实例和地址:
let hidHostProfile = hid.createHidHostProfile()//获取HID操作实例
let connectedDevice = hidHostProfile.getConnectedDevices()//获取已连接设备列表
this.pairedDevice = connectedDevice[0]//这里获取的是临时地址
const name = connection.getRemoteDeviceName(this.pairedDevice)
2.连接设备
通过刚刚获取的地址创建client端实例,创建完成后调用connect方法连接远端蓝牙设备
this.gattClient = ble.createGattClientDevice(this.pairedDevice)//创建客户端
this.gattClient.on('BLEConnectionStateChange', (stateInfo: ble.BLEConnectionChangeState) => {})
this.gattClient.connect()
3.获取设备的UUID
我们通过client端实例调用getServices()方法之后会返回一个数组,里面存储了很多UUID,每个serviceUUID可以看作是服务,每个serviceUUID中可以定义多个characteristics uuid(特征值)
我们可以找到自己设备对应的UUID之后就可以进行数据的写入了
4.写入数据
let writeCharacteristic = {
serviceUuid: this.writeCharacteristic.serviceUuid,//刚刚拿到的UUID
characteristicUuid: this.writeCharacteristic.characteristicUuid,//特征值
characteristicValue: charBuffer,//写入的协议(公司协议,不方便透露)
descriptors: []
} as ble.BLECharacteristic
console.info(TAG, 'writeCharacteristicValue');
try {
this.gattClient.writeCharacteristicValue(writeCharacteristic, ble.GattWriteType.WRITE, (err) => {
if (err) {
console.error(TAG,
'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
return;
}
console.info(TAG, 'writeCharacteristicValue success');
});
} catch (err) {
console.error(TAG,
'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}
写入之后设备就会执行这串命令对应的功能了