实现蓝牙通信并显示接收的数据,需要借助uni-app提供的蓝牙插件。以下是一个简单的示例程序:
- 在manifest.json文件中添加蓝牙插件的配置。
{
"mp-weixin": {
"plugins": {
"wx589698e9c8539a7c": {
"version": "1.1.1",
"provider": "wx589698e9c8539a7c"
}
}
}
}
- 在页面中添加一个按钮,用于连接蓝牙设备。
<template>
<view class="content">
<view class="btn" @tap="connect">
{
{connected ? '断开连接' : '连接蓝牙'}}
</view>
<view class="receive">{
{receiveMsg}}</view>
</view>
</template>
- 在组件的 script 中定义一个 data 对象,包含蓝牙连接状态、接收数据和Characteristic对象等信息,并定义一个方法用于连接或断开蓝牙设备,并监听接收到的数据。
<script>
export default {
data() {
return {
connected: false,
receiveMsg: '',
deviceId: '', // 设备ID
serviceId: '', // 服务ID
characteristicId: '', // Characteristic对象ID
}
},
methods: {
// 连接蓝牙设备
connect() {
if (this.connected) {
// 断开蓝牙连接
wx.closeBLEConnection({
deviceId: this.deviceId,
success: () => {
console.log('closeBLEConnection success')
this.connected = false
}
})
} else {
wx.openBluetoothAdapter({
success: (res) => {
console.log('openBluetoothAdapter success', res)
wx.startBluetoothDevicesDiscovery({
services: [], //要搜索的服务列表,为空表示搜索所有服务
success: (res) => {
console.log('startBluetoothDevicesDiscovery success', res)
wx.onBluetoothDeviceFound((res) => {
console.log('onBluetoothDeviceFound', res)
//检索到设备后,连接设备
if (res.devices[0].deviceId === '设备ID') {
this.deviceId = res.devices[0].deviceId
wx.createBLEConnection({
deviceId: this.deviceId,
timeout: 5000, //超时时间(单位ms),过了这个时间如果还没连接上就会返回失败
success: () => {
console.log('createBLEConnection success')
//连接成功后,获取蓝牙设备的所有服务
wx.getBLEDeviceServices({
deviceId: this.deviceId,
success: (res) => {
console.log('getBLEDeviceServices success', res)
for (let service of res.services) {
if (service.uuid === '服务UUID') {
this.serviceId = service.uuid
// 连接服务后,获取Characteristic对象
wx.getBLEDeviceCharacteristics({
deviceId: this.deviceId,
serviceId: this.serviceId,
success: (res) => {
console.log('getBLEDeviceCharacteristics success', res)
const characteristic = res.characteristics.find(item => item.uuid === '特征UUID')
this.characteristicId = characteristic.uuid
// 监听接收到的数据
wx.onBLECharacteristicValueChange((res) => {
const receiveData = ab2str(res.value)
console.log('接收到的数据:', receiveData)
this.receiveMsg += receiveData
})
// 打开notify
wx.notifyBLECharacteristicValueChange({
deviceId: this.deviceId,
serviceId: this.serviceId,
characteristicId: this.characteristicId,
state: true,
success: (res) => {
console.log('notifyBLECharacteristicValueChange success', res)
this.connected = true
}
})
}
})
}
}
}
})
},
fail: (res) => {
console.log('createBLEConnection failed', res)
}
})
}
})
}
})
},
fail: (res) => {
console.log('openBluetoothAdapter failed', res)
}
})
}
}
}
}
// ArrayBuffer转为字符串
function ab2str(buf) {
return String.fromCharCode.apply(null, new Uint8Array(buf));
}
</script>
- 样式部分可自行添加,最终实现的效果为,点击按钮后可以连接或断开蓝牙设备,并显示接收到的数据。其中,需要将
设备ID
、服务UUID
、特征UUID
替换为实际的设备ID、服务UUID和特征UUID。