微信蓝牙小程序API蓝牙的流程及知识储备

2023-08-06
来源:网络整理

前言

经过几个月的断断续续的修改,我终于完成了我的第一个微信蓝牙小程序,这只是一个总结。

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之间的波特率是可以连接的。

后记

我已经从坑里爬出来了,写这篇文章,希望别人能爬得更快,哈哈哈哈!

分享