1、第一步 初始化小程序蓝牙模块

初始化模块有可能会出现失败,没有开启手机蓝牙或者其他因素时,失败会有对应的失败编码,这个具体详情看官方文档

  // 第一步 初始化蓝牙模块openBluetoothAdapter() {wx.openBluetoothAdapter({success: (res) => {console.log('第一步、蓝牙初始化成功', res)// 开始搜索附近蓝牙this.startBluetoothDevicesDiscovery()},fail: (res) => {console.log("第一步、蓝牙初始化失败", res);wx.showToast({ title: '蓝牙初始化失败', icon: 'none' })}})},

2、第二步 开始搜索附近的蓝牙设备

allowDuplicatesKey 为设置是否重复上报搜索到的设备,需要其他参数请看看官方文档api

  // 第二步 开始搜索附近的蓝牙设备startBluetoothDevicesDiscovery() {wx.startBluetoothDevicesDiscovery({allowDuplicatesKey: false,success: (res) => {console.log('开始搜索附近的蓝牙设备', res)this.onBluetoothDeviceFound()},})},

3、第三步 获取附近的蓝牙设备

提示 在开始发现附近的蓝牙设备后,有两种方式去获取搜索的蓝牙

(1) 监听附近搜索到的设备

这里的监听是实时的,一发现就会上报出来,这里上报设备的时间间隔,是否重复上报同一设备是在开启搜索时设置的。

   // 第三步 监听发现附近的蓝牙设备onBluetoothDeviceFound() {wx.onBluetoothDeviceFound((res) => {res.devices.forEach(device => {if (!device.name && !device.localName) { return }console.log("发现的蓝牙设备", device)this.data.devices.push(device)this.setData({ devices: this.data.devices })})})},
(2) 获取在蓝牙模块生效期间所有已发现的蓝牙设备

这块的话需要递归调用或者循环调用,如果处理不好的话容易造成多次循环,造成小程序卡顿。所以这个函数根据项目需求去使用。

wx.getBluetoothDevices(Object object)

4、第四步 连接蓝牙

deviceId 是对应蓝牙设备信息的deviceId,系统是根据这个蓝牙的deviceId,去找到这个蓝牙并建立连接。
在前面第三步中获取的是所有搜索到蓝牙设备列表,这个是对应的某一蓝牙设备的deviceId

注意: 一个蓝牙有多个服务,一个服务有多个特征值
提示 : 如果我们想对蓝牙进行写、读操作,那么我们至少需要3个参数
1、蓝牙的deviceId
2、蓝牙的某一服务的 uuid
3、蓝牙某一服务下的某一特征值的uuid
我们至少需要这3个,才能对蓝牙的某一个功能进行操作

  // 第四步、 建立连接createBLEConnection(deviceId) {wx.createBLEConnection({deviceId: deviceId,success: (res) => {wx.showToast({ title: '蓝牙连接成功', icon: 'none' })this.getBLEDeviceServices(deviceId)},fail(res) { wx.showToast({ title: '蓝牙连接失败', icon: 'none' }) }})},

5、第五步 获取蓝牙的服务

蓝牙的服务是由对应蓝牙设备设定的,这个是属于硬件的设置。一个蓝牙可以开启多个服务,我们根据对应的服务操作相对应的功能。
开启主服务isPrimary的值为true,主服务是为了与其他服务区分开来
注意: 我们这里是用对应的服务uuid去区分服务的

  // 第五步、获取蓝牙设备所有服务(service)。getBLEDeviceServices(deviceId) {wx.getBLEDeviceServices({deviceId: deviceId,success: (res) => {console.log('蓝牙设备所有服务', res)for (var i = 0; i < res.services.length; i++) {if (res.services[i].isPrimary) {this.getBLEDeviceCharacteristics(deviceId, res.services[i].uuid);return;}}},fail(res) { console.log('蓝牙设备所有服务失败', res) }})},

6、第六步 获取蓝牙对应服务的特征值

每一个不同的蓝牙服务,对应的特征值也不同,当该服务的特征值为true时,我们才与之进行对应的操作,一般我们通过判断 read 属性是否为真,便可以知道能不能通过该服务读取到蓝牙的值,当write为真时,我们便可以对蓝牙设备进行写数据操作

注意: 我们这里是用对应的特征值的uuid去区分特征值的

  // 第六步、 获取蓝牙设备某个服务中所有特征值(characteristic)getBLEDeviceCharacteristics(deviceId, serviceId) {wx.getBLEDeviceCharacteristics({deviceId, serviceId,success: (res) => {for (let i = 0; i < res.characteristics.length; i++) {let item = res.characteristics[i]if (item.properties.write) {this._deviceId = deviceIdthis._serviceId = serviceIdthis._characteristicId = item.uuid}if (item.properties.notify) {this._readDeviceId = deviceIdthis._readServiceId = serviceIdthis._readCharacteristicId = item.uuid}}}})},

7、第七步 获取蓝牙的返回数据

我们在与蓝牙进行数据交互时,蓝牙也常常需要对我们传过去的参数进行相对应的回参,也就是对我们传过去的信息进行回复,这样我们才知道写数据操作有没有成功
我们需要 启用低功耗蓝牙设备特征值变化时的 notify 功能,用来监听数据的返回

  // 第七步、获取蓝牙的返回信息onBLEValue() {wx.onBLECharacteristicValueChange(function (res) {var value = ab2Str(res.value); console.log("第七步,读取蓝牙的值", value);})wx.notifyBLECharacteristicValueChange({state: true, // 启用 notify 功能deviceId: this._readDeviceId,serviceId: this._readServiceId,characteristicId: this._readCharacteristicId,success(res) { console.log('第七步,启用notify成功', res.errMsg) }})}

8、第八步 向蓝牙发送数据

注意: 小程序只能向蓝牙发送二进制数据,这里的例子是官方给出的,如果我们需要发送16进制 或者 字符格式 的数据需要将对应的数据转成二进制再发送,但是机器下位机接收到的数据其实也是16进制或字符格式的数据。只是我们发送时要转成二进制格式而已,下位机机器那边不需要接收后再转一遍格式。

  //第八步、 向蓝牙设备发送数据writeBLECharacteristicValue() {// 向蓝牙设备发送一个0x00的16进制数据let buffer = new ArrayBuffer(1)let dataView = new DataView(buffer)dataView.setUint8(0, Math.random() * 255 | 0)wx.writeBLECharacteristicValue({deviceId: this._deviceId,serviceId: this._deviceId,characteristicId: this._characteristicId,value: buffer,})},

整体的流程就是这样,具体的例子代码有空再发出来,有问题可以在下方留言提问,写的不对的欢迎指认出来,共同进步!

小程序蓝牙(二)蓝牙的具体操作步骤(搜索-连接-读写)相关推荐

  1. 【微信小程序控制硬件15 】 重认识无线物联网的配网协议,了解腾讯物联蓝牙协议LLSync SDK,腾讯连连小程序也可以蓝牙配网了。

    文章目录 一.配网的认识 1.1 各类Wi-Fi配网方式对比 1.2 设备热点配网 1.3 零配配网 1.4 蓝牙辅助配网 1.5 一键配网 1.6 手机热点配网 1.6 摄像头扫码配网 二.LLSy ...

  2. 微信小程序控制硬件第17篇 : 腾讯连连小程序通过LLSync蓝牙协议控制安信可PB-02模组,无需网络实现蓝牙本地通讯。(附带源码)

    文章目录 前言 一.注册腾讯物联开发平台设备 新建项目 新建产品 创建数据模板 选择设备开发方式 交互开发配置 新建设备 二.设备端操作 硬件简介与连接 准备软件环境 工程目录 烧录步骤 三.腾讯连连 ...

  3. 【微信小程序控制硬件15 】 开源一个微信小程序,支持蓝牙快速配网+WiFi双控制ESP32-C3应用示范;(附带Demo)

    文章目录 一.前言 二. Blufi乐鑫自研的蓝牙配网协议 ESP32 配网流程 流程图 三.相关代码 3.1 蓝牙快速配网 3.2 蓝牙本地控制 2.3 外设驱动 3.1 蓝牙搜索 3.2 蓝牙服务 ...

  4. 微信小程序与低功耗蓝牙通信-接受硬件端发送来的数据(四)

    接受数据只要 wx.notifyBLECharacteristicValueChange监听器打开, wx.onBLECharacteristicValueChange是接受数据的函数. 数据接收到后 ...

  5. 乐鑫Esp32学习之旅 19 重磅开源,如何在微信小程序上ble蓝牙配网esp32,blufi的那些事!

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 " ...

  6. 微信小程序直连蓝牙实现控制继电器及串口调试功能--全系统开源工程

    微信小程序直连蓝牙硬件设备,设备控制继电器,灯等设备,同时实现蓝牙串口调试助手等功能,设备能够输出微信小程序发出的蓝牙数据,可为工程师在手机上实现设备串口调试功能,当工程师去现场调试设备,没有带电脑, ...

  7. 微信小程序访问手机蓝牙需要用户授权解决办法

    访问蓝牙.添加通讯录联系人.添加日历事件需要用户授权 小程序处理用户的个人信息,需要获取用户明示同意,平台计划从2022年2月21日24时起对以下接口增加用户授权: 访问蓝牙:调用wx.openBlu ...

  8. 微信小程序-仿朋友圈点赞评论操作面板

    目录 微信小程序-仿朋友圈点赞评论操作面板 一.效果 二.实现 1.wxml实现 2.js实现 3.wxss实现 三.记录 1.dataset使用 微信小程序-仿朋友圈点赞评论操作面板 一.效果 二. ...

  9. 微信小程序——校园服务小程序(二)校园论坛加预约理发服务

    微信小程序--校园服务小程序(二) 环境搭建好了,我们开始编写代码. 首先我们来看 "我的" 界面,先写一下登录功能. 先看一下wxml 通过判断canIUseGetUserPro ...

最新文章

  1. python变量类型怎么决定的_python里测试变量类型用什么
  2. 运维基础(9)Linux性能调优三大系统
  3. 【opencv系列05】OpenCV4.X鼠标回调函数
  4. opengl加载显示3D模型PLY类型文件
  5. 零基础跟我学前端之css3基础
  6. DFS水题 URAL 1152 False Mirrors
  7. Integration Services包部署常见问题汇总 (转自游子吟)
  8. Unity 导出Supermap exe
  9. SAP License:分摊、分配、定期重过账
  10. 33.启动流程,模块管理与 Loader
  11. OFFICE技术讲座:WP/SS文字渲染不开启的条件
  12. drools规则引擎初探
  13. 天勤数据结构——绪论
  14. opencv 图像平滑处理(python)
  15. C++按键模拟/刷屏器
  16. 物联网的背景及其发展
  17. 跟着团子学SAP PS:企业如何依托信息化工具构建成熟的项目成本管理体系
  18. 指标公式c语言源码下载,通达信超赢天下指标公式源码(通达信)
  19. gSOAP编译以及测试过程
  20. 迷你世界api 系统事件

热门文章

  1. redis 底层原理实现
  2. 头歌C++ 第8章 虚函数与多态性
  3. Hibernate的DAO实现
  4. 腾讯/谷歌《元宇宙 研究报告 100页》.pdf 完整版 开放下载
  5. android gps源码分析,Android编程之Android GPS ——AGPS源码分析及配置
  6. GPS 入门 10 ——GPS快速定位之AGPS、EPO
  7. H3C交换机开启SNMP
  8. Julia并行计算笔记(一)
  9. java.sql.SQLNonTransientConnectionException: Data source rejected establishment of connection, mess
  10. 深深的套路——九价加卫苗之行