1. 微信小程序蓝牙通信基础概念
蓝牙通信在微信小程序中的应用越来越广泛,无论是智能家居控制、健康监测设备还是工业传感器,都离不开稳定可靠的蓝牙连接。作为开发者,理解蓝牙通信的基本原理是第一步。
蓝牙设备通常分为主从两种角色。主设备(比如你的手机)负责发起连接和控制通信过程,而从设备(比如蓝牙耳机或传感器)则被动响应请求。这种主从架构决定了我们小程序开发时的基本流程:先搜索设备,再建立连接,最后进行数据交互。
每个蓝牙设备都有唯一的MAC地址,格式类似XX:XX:XX:XX:XX:XX。这个地址相当于设备的身份证,在搜索和连接时都需要用到。更关键的是UUID(通用唯一标识符),这个128位的编码用于标识服务、特征和属性。举个例子,一个心率监测手环可能提供"心率服务"(Service),这个服务下又有"心率测量"(Characteristic),而该特征可能具备读取(read)和通知(notify)两种属性。
在实际开发中,我们最常操作的三个属性是:
- read:读取设备数据
- write:向设备写入数据
- notify:监听设备主动推送的数据
理解这些基础概念后,你会发现微信小程序的蓝牙API设计正是围绕这些核心概念展开的。比如获取服务列表对应的是获取设备提供的所有Service,而获取特征值则是获取某个Service下的Characteristic。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 开发前的准备工作
在开始编写蓝牙功能前,我们需要做好充分的准备工作。首先是权限配置,这是很多新手容易忽略的关键步骤。在小程序的app.json文件中,必须添加蓝牙相关权限声明:
json复制{
"permission": {
"scope.bluetooth": {
"desc": "需要您的授权才能使用蓝牙功能"
}
}
}
同时,考虑到不同手机型号和系统版本的兼容性问题,建议在代码中加入蓝牙适配器可用性检查:
javascript复制wx.getSystemInfo({
success(res) {
if (!res.bluetoothEnabled) {
wx.showModal({
title: '提示',
content: '请先开启手机蓝牙功能',
showCancel: false
})
}
}
})
设备选择方面,建议准备至少两种不同品牌的蓝牙设备进行测试。我在实际项目中遇到过这样的情况:某款设备在iOS上连接正常,但在部分Android机型上却频繁断开。后来发现是设备厂商对蓝牙协议栈的实现存在差异。因此,兼容性测试清单应该包括:
- 不同操作系统(iOS/Android)
- 不同品牌手机
- 不同蓝牙协议版本(4.0/4.2/5.0)
- 高低功耗模式
开发环境配置也有讲究。微信开发者工具虽然提供了蓝牙调试功能,但真机调试才是王道。因为工具中的蓝牙模拟器无法完全还原真实设备的特性,特别是信号强度和抗干扰能力这些关键指标。
3. 设备搜索与发现机制
设备搜索是蓝牙通信的第一步,也是整个流程中变数最多的环节。微信小程序提供了wx.startBluetoothDevicesDiscovery方法来启动设备搜索,但实际使用中有很多细节需要注意。
首先,搜索参数设置很有讲究。建议这样配置:
javascript复制wx.startBluetoothDevicesDiscovery({
allowDuplicatesKey: false, // 是否允许重复上报同一设备
interval: 0, // 上报间隔
success(res) {
console.log('开始搜索', res)
},
fail(err) {
console.error('搜索失败', err)
}
})
allowDuplicatesKey设置为false可以减少重复设备的干扰,而interval设为0表示立即上报发现的
