uniapp蓝牙源代码
使用uniapp开发蓝牙功能的源代码示例
以下是一个基于uniapp的蓝牙功能实现示例,包含扫描、连接、读写等核心操作。
初始化蓝牙模块
// 在页面或组件中引入uni蓝牙API
export default {
data() {
return {
devices: [],
connectedDeviceId: '',
services: [],
characteristics: []
}
}
}
检查蓝牙适配器状态
checkBluetooth() {
uni.openBluetoothAdapter({
success: (res) => {
console.log('蓝牙适配器初始化成功');
this.startBluetoothDevicesDiscovery();
},
fail: (err) => {
console.error('蓝牙适配器初始化失败:', err);
uni.showToast({
title: '请开启手机蓝牙',
icon: 'none'
});
}
});
}
开始扫描蓝牙设备
startBluetoothDevicesDiscovery() {
uni.startBluetoothDevicesDiscovery({
services: [], // 指定要搜索的蓝牙设备主服务UUID
allowDuplicatesKey: false,
success: (res) => {
console.log('开始扫描设备');
this.onBluetoothDeviceFound();
},
fail: (err) => {
console.error('扫描失败:', err);
}
});
}
监听发现新设备事件
onBluetoothDeviceFound() {
uni.onBluetoothDeviceFound((res) => {
const devices = res.devices;
devices.forEach(device => {
if (!this.devices.some(d => d.deviceId === device.deviceId)) {
this.devices.push(device);
}
});
});
}
连接蓝牙设备
connectDevice(deviceId) {
uni.createBLEConnection({
deviceId,
success: (res) => {
this.connectedDeviceId = deviceId;
console.log('连接成功', res);
this.getBLEDeviceServices(deviceId);
},
fail: (err) => {
console.error('连接失败:', err);
}
});
}
获取设备服务列表
getBLEDeviceServices(deviceId) {
uni.getBLEDeviceServices({
deviceId,
success: (res) => {
this.services = res.services;
console.log('获取服务列表成功', res.services);
// 获取第一个服务的特征值
if (res.services.length > 0) {
this.getBLEDeviceCharacteristics(deviceId, res.services[0].uuid);
}
},
fail: (err) => {
console.error('获取服务失败:', err);
}
});
}
获取特征值
getBLEDeviceCharacteristics(deviceId, serviceId) {
uni.getBLEDeviceCharacteristics({
deviceId,
serviceId,
success: (res) => {
this.characteristics = res.characteristics;
console.log('获取特征值成功', res.characteristics);
},
fail: (err) => {
console.error('获取特征值失败:', err);
}
});
}
写入数据
writeBLECharacteristicValue(deviceId, serviceId, characteristicId, value) {
const buffer = new ArrayBuffer(value.length);
const dataView = new DataView(buffer);
for (let i = 0; i < value.length; i++) {
dataView.setUint8(i, value.charCodeAt(i));
}
uni.writeBLECharacteristicValue({
deviceId,
serviceId,
characteristicId,
value: buffer,
success: (res) => {
console.log('写入成功', res);
},
fail: (err) => {
console.error('写入失败:', err);
}
});
}
读取数据
readBLECharacteristicValue(deviceId, serviceId, characteristicId) {
uni.readBLECharacteristicValue({
deviceId,
serviceId,
characteristicId,
success: (res) => {
console.log('读取成功', res);
},
fail: (err) => {
console.error('读取失败:', err);
}
});
}
监听数据接收
onBLECharacteristicValueChange() {
uni.onBLECharacteristicValueChange((res) => {
const value = res.value;
const dataView = new DataView(value);
let receivedString = '';
for (let i = 0; i < dataView.byteLength; i++) {
receivedString += String.fromCharCode(dataView.getUint8(i));
}
console.log('收到数据:', receivedString);
});
}
断开连接
disconnectDevice() {
if (this.connectedDeviceId) {
uni.closeBLEConnection({
deviceId: this.connectedDeviceId,
success: (res) => {
console.log('断开连接成功');
this.connectedDeviceId = '';
},
fail: (err) => {
console.error('断开连接失败:', err);
}
});
}
}
停止扫描
stopScan() {
uni.stopBluetoothDevicesDiscovery({
success: (res) => {
console.log('停止扫描成功');
},
fail: (err) => {
console.error('停止扫描失败:', err);
}
});
}
注意事项
- 需要在manifest.json中配置蓝牙权限
- 真机调试时需要开启手机蓝牙功能
- iOS和Android平台的蓝牙API行为可能有差异
- 部分设备可能需要配对后才能正常通信
以上代码提供了uniapp蓝牙开发的基本框架,实际应用中需要根据具体设备协议调整服务UUID和特征值处理逻辑。







