前言
经过几个月的断断续续的修改,我终于完成了我的第一个微信蓝牙小程序,这只是一个总结。
1. 知识储备 1. 微信小程序API
蓝牙部分的API可以在微信公众平台上找到,而且都是官方文档。 从微信6.5.7开始支持蓝牙程序,从微信6.5.6开始支持iOS。
我之前稍微整理了一个流程。
蓝牙进程
2. 蓝牙4.0
BLE 4.0是一种流行的蓝牙传输协议,其中BLE是Low Low 的缩写。 我对整个协议只是一知半解,所以我就谈谈我在申请过程中学到的东西。 剩下的感兴趣的可以直接搜索。
先澄清几个概念:(个人理解,如有疑问请指出)
MAC地址:()蓝牙设备的物理地址,每个设备只有一个唯一值。
UUID:( ) 通用唯一识别码,软件识别码。 一台设备可以有多个UUID,一个UUID对应一个软件服务部分。
():相关特征值的集合,用于操作具体功能,因此一个服务中可以有多个特征值。 例如,“温度计”服务包括温度测量和测量的时间间隔。
():蓝牙设备之间传递的数据值,例如当前的温度测量值。
服务的特征称为属性(),并通过UUID来标识。 实施者可以为所使用的专有格式选择随机或伪随机 UUID,但蓝牙 SIG 已保留一系列 UUID(范围 -0-))供标准属性使用。
所以可以理解为:
MAC地址:一个人的名字。
服务:一个人做一件事。
特点:评估这件事的几个指标。
UIDD:使用一串数字和字母来表示事物或指标。
了解了这些之后,我们还需要了解BLE 4.0与传统蓝牙的区别。 在单一模式的情况下,传统的蓝牙设备无法通用。 因此,在开发小程序之前,你需要知道你的手机和要连接的蓝牙设备是否能够满足BLE 4.0的要求,否则硬件基础不支持,那么软件实现呢?
3.
这是微信自带的真机调试工具,因为蓝牙程序部分无法在“微信网页开发者工具”中模拟调试,需要大量的真机调试,所以使用它非常重要后续发展顺利。
简单的介绍
二、开发过程中的坎坎坷坷 1、日志首先打印错误信息
一开始按照蓝牙流程写完小程序后,总是遇到各种错误,一是第一,二是大。
然后在每个程序中添加:
.log('连接蓝牙:', res. + res.);
将所有错误信息打印出来,与下表进行对比,你就会逐渐有方向了。
错误信息截图
2.如果不起作用,添加延迟
如果您使用多个蓝牙API并且存在顺序或参数传递关系,请添加适当的延迟。
不加延迟的后果是前面的API还没有执行完,后面的API正在执行,所以后面的API缺少一些必要的准备或者参数。
上面有两种情况,1、中间状态的参数没有赋值,2、错误提示之前API操作结果错误
以wx. 和wx。 举个例子,两者之间存在参数传递关系,所以需要扩展。
wx.getBLEDeviceServices({ deviceId: that.data.connectedDeviceId, success: function(res) { for (let i = 0; i < res.services.length; i++) { if (res.services[i].uuid.toUpperCase().indexOf("FFE0") != -1) { that.setData({ serviceUUID: res.services[i].uuid, }) console.log("UUID1:" + that.data.serviceUUID); break; } } }, fail: function (res) { } }) setTimeout(function () { wx.getBLEDeviceCharacteristics({ deviceId: that.data.connectedDeviceId, serviceId: that.data.serviceUUID, success: function(res) { console.log('成功2:', res.errMsg + res.errCode); var notify_id, write_id, read_id; for (let i = 0; i < res.characteristics.length; i++) { if (res.characteristics[i].properties.notify) { notify_id = res.characteristics[i].uuid; } if (res.characteristics[i].properties.write) { write_id = res.characteristics[i].uuid; } if (res.characteristics[i].properties.read) { read_id = res.characteristics[i].uuid; } } that.setData({ characteristicId_notify: notify_id, characteristicId_write: write_id, characteristicId_read: read_id, }) }, fail: function (res) { } }) }, 1000)//添加延迟
3.为什么连接比较困难
更加虚伪是有原因的。
使用时,即使知道服务的UUID和特征值的UUID,也必须通过wx. 和wx。 两个 API。 这就是上面的代码。
服务的UUID和特征值的UUID只识别大写字母,的大小写字母都可以。
和还有一个区别:上获取设备的MAC地址,iOS上获取设备的UUID。 但实际应用中,只发现这个值不一样,会影响界面的布局,其他的没感觉。
最后整理一下与之间的连接流程:
安卓:
wx。 - 获取MAC地址()
wx.——通过MAC地址创建连接
wx.——获取服务的UUID() 如果已知,可以将其设置为常量,省略此步骤。
wx.——获取特征值的UUID() 如果已知,可以将其设置为常量,省略此步骤。
wx.——按,,启动模式
:
wx。 - 获取设备的UUID ()
wx.——通过设备的UUID创建连接
wx.——获取的UUID(),无论已知与否,这一步都不能省略。
wx.——获取特征值的UUID(),无论已知与否,这一步都不能省略。
wx.——按,,启动模式
所以,当你想共享两者的时候,就乖乖都写成wx. 和wx。 蜜蜂。
4. 如何获取可用服务UUID
可以通过wx.获取所有服务的UUID。 但您需要哪一个呢?
例如,我筛选了包含“FFE0”的 UUID。
if (res.[i].uuid.().("FFE0") != -1)
那么如何获得你想要的UUID呢?
我尝试了哪些UUID可以通过APP使用(我忘了在哪里下载的,红框是它的标志)。
APP界面
5.使用on读取数据,不能一次性读写太多
有点坑,建议使用wx。 读取数据。
读取和写入操作有大小限制。 在我的印象中微信小程序开发小结,大小是20字节。 如果没有分段存储,则只能读取前20个字节。
超过 20 个字节只能以数据包的形式发送或读取。 微信小程序提供的API中没有自动分包功能,只能手动分包。
6. 关于波特率
微信暂时没有提供设置蓝牙设备波特率的API,但是通过手机连接测试,9600-9600之间的波特率是可以连接的。
后记
我已经从坑里爬出来了,写这篇文章,希望别人能爬得更快,哈哈哈哈!