uniapp hc05
时间: 2025-05-31 14:19:18 浏览: 24
### UniApp 中集成 HC05 蓝牙模块的使用教程
在 UniApp 中集成 HC05 蓝牙模块涉及多个步骤,主要包括初始化蓝牙适配器、搜索蓝牙设备、连接目标设备以及进行数据传输。以下是详细的说明:
#### 1. 初始化蓝牙适配器
在开始操作之前,需要调用 `uni.openBluetoothAdapter` 方法来初始化蓝牙适配器。如果未成功初始化,则无法继续后续的操作。
```javascript
uni.openBluetoothAdapter({
success(res) {
console.log('蓝牙适配器已打开', res);
},
fail(err) {
console.error('蓝牙适配器开启失败', err);
}
});
```
此部分的功能描述可以参考相关内容[^1]。
---
#### 2. 搜索附近的蓝牙设备
通过调用 `uni.startBluetoothDevicesDiscovery` 可以启动对附近蓝牙设备的扫描。为了实时获取扫描结果,可以通过监听事件 `onBluetoothDeviceFound` 来捕获发现的设备列表。
```javascript
// 启动蓝牙设备扫描
uni.startBluetoothDevicesDiscovery({
success() {
console.log('正在扫描蓝牙设备');
}
});
// 监听找到新设备的事件
uni.onBluetoothDeviceFound((devices) => {
devices.devices.forEach(device => {
if (device.name === 'HC-05' || device.localName === 'HC-05') { // 判断是否为目标设备
console.log('发现了 HC-05 设备:', device);
targetDevice = device; // 存储目标设备信息以便后续连接
}
});
});
```
上述代码片段展示了如何定位 HC05 蓝牙模块,并将其作为目标设备存储下来。
---
#### 3. 连接目标蓝牙设备
当检测到目标设备后,可通过其 deviceId 建立连接。这一步骤由 `uni.createBLEConnection` 方法完成。
```javascript
if (!targetDevice.deviceId) {
console.error('尚未找到目标设备');
} else {
uni.createBLEConnection({
deviceId: targetDevice.deviceId,
success(res) {
console.log('与 HC-05 成功建立连接', res);
},
fail(err) {
console.error('连接 HC-05 失败', err);
}
});
}
```
注意,在实际应用中可能还需要处理一些异常情况,比如超时等问题。
---
#### 4. 获取服务与特征值
一旦建立了 BLE 连接,就需要进一步查询该设备的服务和服务中的特征值(Characteristics)。这些信息对于发送命令和接收反馈至关重要。
```javascript
let serviceId, characteristicId;
// 查询所有可用的服务
uni.getBLEDeviceServices({
deviceId: targetDevice.deviceId,
success(servicesRes) {
servicesRes.services.forEach(service => {
if (service.uuid.includes('FFE0')) { // FFE0 是常见的串口服务 UUID
serviceId = service.uuid;
// 继续查找特性值
uni.getBLEDeviceCharacteristics({
deviceId: targetDevice.deviceId,
serviceId: serviceId,
success(characteristicsRes) {
characteristicsRes.characteristics.forEach(chara => {
if (chara.properties.write && chara.uuid.includes('FFE1')) { // FFE1 是常用的写入特征值
characteristicId = chara.uuid;
console.log('找到了用于写入的特征值:', characteristicId);
} else if (chara.properties.notify) {
notifyCharacteristicId = chara.uuid;
// 开启通知功能
uni.notifyBLECharacteristicValueChange({
state: true,
deviceId: targetDevice.deviceId,
serviceId: serviceId,
characteristicId: notifyCharacteristicId,
success(notifyRes) {
console.log('通知功能已启用', notifyRes);
}
});
}
});
}
});
}
});
}
});
```
以上逻辑解释了如何识别特定的服务及其对应的读/写特征值。
---
#### 5. 数据交互
最后一步就是利用前面获得的信息来进行真正的数据交换。例如向 HC05 发送指令或者监听来自它的消息更新。
##### 写入数据至 HC05
假设要给 HC05 下达某个控制信号:
```javascript
const buffer = new ArrayBuffer(1); // 创建缓冲区对象
new DataView(buffer).setUint8(0, 65); // 设置第一个字节为 ASCII 字符 A 的数值表示形式
uni.writeBLECharacteristicValue({
deviceId: targetDevice.deviceId,
serviceId: serviceId,
characteristicId: characteristicId,
value: buffer,
success(writeRes) {
console.log('数据写入成功', writeRes);
},
fail(writeErr) {
console.error('数据写入失败', writeErr);
}
});
```
##### 接收 HC05 返回的消息
每当有新的数据到达时都会触发回调函数:
```javascript
uni.onBLECharacteristicValueChange(function(dataChangedEvent){
const receivedDataBuffer = dataChangedEvent.value;
let resultString = '';
for(let i=0;i<receivedDataBuffer.byteLength;i++) {
resultString += String.fromCharCode(new Uint8Array(receivedDataBuffer)[i]);
}
console.log('收到的数据转换后的字符串:',resultString);
});
```
这部分实现了基本的双向通信机制。
---
### 总结
综上所述,从初始化蓝牙适配器到最后实现完整的数据流循环,整个过程中需要注意权限管理、错误捕捉等多个方面。尽管存在一定的复杂度和技术挑战,但只要按照既定顺序逐步推进即可顺利完成任务。
阅读全文
相关推荐











