微信小程序低功耗蓝牙BLE快速开发js

这篇具有很好参考价值的文章主要介绍了微信小程序低功耗蓝牙BLE快速开发js。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、前言

目的:

1、为了能三分钟快速开发BLE模块,特此做一个笔记,按照笔记的顺序开发,能够简单、快速、规范。

2、如果以后觉得有必要改动的地方就在这里更改。

3、主要是记录BLE连接的步骤。
微信小程序低功耗蓝牙BLE快速开发js

2、资料

https://note.youdao.com/ynoteshare/index.html?id=d662c9c1c58121ec28901d78d9aa5e80

比较完整的微信小程序BLE连接资料

https://zhuanlan.zhihu.com/p/537636778

3、BLE连接流程

BLE连接原理

  • 第一步,扫描周围已打开蓝牙的BLE设备。
  • 第二步,扫描结束后在扫描的结果中选取一个符合条件的BLE设备,在APP扫描(BLE设备广播)的过程中,BLE设备会有以下几个属性用于辨别身份:蓝牙名、MAC、广播数据。
  • 第三步,对选取的BLE设备进行连接。
  • 第四步,连接成功后可以列出这个设备所包含的所有服务和特征,服务和特征是APP与设备进行交互的通道。
  • 第五步,对指定的特征进行通知、读、写等操作。常用的操作是notify和wirte,前者是APP接收BLE发过来的数据,后者是APP向BLE设备发送数据。
  • 第六步,APP与BLE设备断开连接。

4、index.js页面加载流程详细说明

(有了解过BLE的同学建议直接代码)

  • 1、首先进入 onLoad: function () 方法
1、执行wx.openBluetoothAdapter()方法			// 初始化蓝牙模块。

2、执行that.getBluetoothAdapterState();
  • 2、that.getBluetoothAdapterState()方法
1、wx.getBluetoothAdapterState()方法		//获取本机蓝牙适配器状态

2、执行startBluetoothDevicesDiscovery()
  • 3、startBluetoothDevicesDiscovery()方法
1、执行wx.openBluetoothAdapter()方法		//不是很理解这个操作

2、执行that.closeConnect();
  • 4、closeConnect: function () 方法
// 断开与蓝牙低功耗设备的连接。,确保上一个蓝牙断开(例如刚才连接着音乐什么的)
1、执行wx.closeBLEConnection()方法 

2、在上一个方法成功回调函数中执行that.closeBluetoothAdapter()方法	//关闭蓝牙适配器

3、wx.startBluetoothDevicesDiscovery()方法, //开始搜寻附近的蓝牙外围设备。

成功之后调用that.getBluetoothDevices()
  • 5、getBluetoothDevices()方法
1、执行 wx.getBluetoothDevices() 	 // 获取在蓝牙模块生效期间所有搜索到的蓝牙设备。

真正查找蓝牙设备在这一步。通过指定的蓝牙设备名称去匹配。

2、搜索到设备名称之后 停止搜寻附近的蓝牙外围设备,wx.stopBluetoothDevicesDiscovery

3、调用 that.connectTO()开始连接蓝牙。

(温馨提示)连接蓝牙的条件: 设备名字(deviceId)

以上所有的准备工作都是为了检查手机蓝牙情况、在蓝牙列表里面获取到设备名,只有存在于 蓝牙列表 里面的设备名称才可以连接上,不是单单知道设备名字就可以连接上的。

例如:手机蓝牙A,要连接的设备B

A是主动,B是被动,

要求是A找到B的名字并添加到 蓝牙列表 里面,同时添加的可能会很多(有可能添加了一百个设备),但是我们只要B,所以在 蓝牙列表 里面找出B,最后调用连接的方法,即可连接成功。
  • 6、connectTO()方法
1、wx.createBLEConnection()		// 连接蓝牙

2、调用that.getBLEDeviceServices();方法
  • 7、getBLEDeviceServices: function ()
//获取蓝牙低功耗设备所有服务 (service)。在这里同时选取出所需的服务
1、调用wx.getBLEDeviceServices方法

  • 8、getBLEDeviceCharacteristics: function ()

1、 wx.getBLEDeviceCharacteristics()	// 获取蓝牙低功耗设备某个服务中所有特征 (characteristic)。

以上就是连接蓝牙的整个过程

完整代码:

//index.js
//获取应用实例
const app = getApp()
var that; //把this对象复制到临时变量that
Page({
    data: {
        status: "未连接",
        msg: "BLEHID",
        deviceId: "",
        connectedDeviceId: "", //已连接设备uuid
        deviceName: "ble2usbhid",
        ServicweId: '',
        writeCharacteristicsId: "",
        strcmd: 'K:ABC123',

    },
    //事件处理函数
    bindViewTap: function () {
        wx.navigateTo({
            url: '../logs/logs'
        })
    },

    // 当用户离开页面时发生的事件
    onUnload: function () {
        that.closeBLEConnection()
        that.closeBluetoothAdapter()
    },
    onLoad: function () {
        that = this;
        // 1、初始化蓝牙模块。
        if (wx.openBluetoothAdapter) {
            wx.openBluetoothAdapter({
                success: function (res) {
                    /* 获取本机的蓝牙状态 */
                    that.getBluetoothAdapterState()
                },
                fail: function (err) {}
            })
        } else {

        }
    },
    // 2、获取本机蓝牙适配器状态
    getBluetoothAdapterState: function () {
        wx.getBluetoothAdapterState({
            success: function (res) {
                that.startBluetoothDevicesDiscovery()
            },
            fail(res) {
                console.log(res)
            }
        })
    },
    // 3、关闭蓝牙连接,并且 开始搜寻附近的蓝牙外围设备。 此处方法也应该是“连接蓝牙”按钮的调用方法
    startBluetoothDevicesDiscovery: function () {
        wx.openBluetoothAdapter({})
        that.closeConnect();
        that.setData({
            devices: {}
        })
        setTimeout(() => {
            wx.startBluetoothDevicesDiscovery({
                success: function (res) {
                    /* 获取蓝牙设备列表 */
                    that.getBluetoothDevices()
                },
                fail(res) {}
            })
        }, 500)
    },

    /**4、获取在蓝牙模块生效期间所有搜索到的蓝牙设备。
     * 包括已经和本机处于连接状态的设备。
     *  */
    getBluetoothDevices: function () {
        setTimeout(() => {
            wx.getBluetoothDevices({
                services: [],
                allowDuplicatesKey: false,
                interval: 0,
                success: function (res) {
                    console.log(JSON.stringify(res.devices))

                    that.setData({
                        devices: res.devices,
                    })

                    if (res.devices.length > 0) {

                        for (let i = 0; i < res.devices.length; i++) {
                            console.log(res.devices[i].name);
                            if ('ble2usbhid' === res.devices[i].name) {
                                /* 根据指定的蓝牙设备名称匹配到deviceId */

                                that.deviceId = res.devices[i].deviceId,
                                    wx.stopBluetoothDevicesDiscovery({
                                        success: function (res) {
                                            console.log(res, '已停止搜索')
                                        },
                                        fail(res) {
                                            console.log(res, '停止搜索失败')
                                        }
                                    })

                                that.connectTO();

                            };
                        };

                    } else {}
                },
                fail(res) {
                    console.log(res, '获取蓝牙设备列表失败=====')
                }
            })
        }, 50)
    },

    // 5、连接蓝牙
    connectTO: function () {
        wx.createBLEConnection({
            deviceId: that.deviceId,
            success: function (res) {
                that.connectedDeviceId = that.deviceId;
                /* 4.获取连接设备的service服务 */
                that.getBLEDeviceServices();
            },
            fail: function (res) {
                that.setData({
                    status: "连接失败",
                    msg: "连接失败!请重试",
                })
            }
        })
    },
    // 6、获取蓝牙低功耗设备所有服务 (service)。并且选出 FFE0 服务
    getBLEDeviceServices: function () {
        setTimeout(() => {
            wx.getBLEDeviceServices({
                deviceId: that.connectedDeviceId,
                success: function (res) {
                    that.setData({
                        msg: "发现服务" + JSON.stringify(res.services)
                    })
                    for (var i = 0; i < res.services.length; i++) {

                        if (res.services[i].uuid.indexOf("FFE0") >= 0) {
                            that.setData({
                                msg: "已发现服务" + res.services[i].uuid
                            })
                            that.services = res.services[i]
                            /* 获取连接设备的所有特征值 */
                            that.getBLEDeviceCharacteristics()
                            break;
                        }
                    }
                },
                fail: (res) => {
                    console.log(res)
                    that.setData({
                        msg: "服务搜索失败"
                    })
                }
            })
        }, 500)
    },
    // 7、获取蓝牙低功耗设备某个服务中所有特征 (characteristic)。
    getBLEDeviceCharacteristics: function () {
        console.log("find char of " + that.services.uuid)
        setTimeout(() => {
            wx.getBLEDeviceCharacteristics({
                deviceId: that.connectedDeviceId,
                serviceId: that.services.uuid,
                success: function (res) {
                    that.setData({
                        msg: "发现特征" + res.characteristics.length
                    })
                    console.log('蓝牙特征值UUID:', res.characteristics)
                    for (var i = 0; i < res.characteristics.length; i++) {


                        if (res.characteristics[i].properties.write && res.characteristics[i].uuid.indexOf('FFE3') >= 0) {
                            that.setData({
                                status: "已就绪",
                                msg: "连接成功 可以操作",
                            })
                            /* 获取蓝牙特征值 */
                            that.ServicweId = that.services.uuid;
                            that.writeCharacteristicsId = res.characteristics[i].uuid
                            // 启用低功耗蓝牙设备特征值变化时的 notify 功能
                            // that.notifyBLECharacteristicValueChange()

                            break;
                        }
                    }

                },
                fail: function (res) {}
            })
        }, 100)
    },

    notifyBLECharacteristicValueChange: function () { // 启用低功耗蓝牙设备特征值变化时的 notify 功能
        console.log('启用低功耗蓝牙设备特征值变化时的 notify 功能')
        wx.notifyBLECharacteristicValueChange({
            state: true,
            deviceId: that.connectedDeviceId,
            serviceId: that.ServicweId,
            characteristicId: that.notifyCharacteristicsId,
            complete(res) {
                /*用来监听手机蓝牙设备的数据变化*/
                wx.onBLECharacteristicValueChange(function (res) {
                    that.setData({
                        msg: 'reveive:' + that.receiveData(res.value)
                    })
                })
            },
            fail(res) {
                console.log(res, '启用低功耗蓝牙设备监听失败')
            }
        })
    },

    // 断开设备连接
    closeConnect: function () {
        if (that.connectedDeviceId) {
            wx.closeBLEConnection({
                deviceId: that.connectedDeviceId,
                success: function (res) {
                    that.closeBluetoothAdapter()
                },
                fail(res) {}
            })
        } else {
            //that.closeBluetoothAdapter()
        }
    },
    // 关闭蓝牙模块
    closeBluetoothAdapter: function () {
        wx.closeBluetoothAdapter({
            success: function (res) {},
            fail: function (err) {}
        })
    },
})

END文章来源地址https://www.toymoban.com/news/detail-498938.html

到了这里,关于微信小程序低功耗蓝牙BLE快速开发js的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于低功耗蓝牙和微信小程序的门禁系统(FPGA课设设计)

    本次FPGA课程设计基于Cyclone IV的 EP4CE6F17C8。使用的是AX301开发板(正点原子的新起点也是用同一种芯片,只是要修改引脚)。 本系统能够实现通过蓝牙发送密码给FPGA,并在开发板的数码管上显示密码,密码正确,则手机端(微信小程序)接收到开门信号,并显示开门。其余时候

    2024年02月08日
    浏览(43)
  • 低功耗蓝牙(BLE)你入门了吗

            蓝牙低功耗(Bluetooth Low Energy,或称Bluetooth LE、BLE,旧商标Bluetooth Smart),用于医疗保健、运动健身、安防、工业控制、家庭娱乐等领域。在如今的物联网时代下大放异彩,扮演者重要一环,是无线通信的主流技术之一(常见的无线通信技术有NFC、GPRS、Zigbee、Wi

    2024年02月02日
    浏览(50)
  • windows+python+bleak+BLE低功耗蓝牙通讯连接

    1.为什么选bleak   参考这篇知乎:https://zhuanlan.zhihu.com/p/577687336   windows端使用python连接常规的BLE设备(蓝牙4.0),仅考虑bleak模块(排除pybluez、pybluez2、pygatt)。 2.本文主要参考   本文主要参考bleak的官方文档:https://github.com/hbldh/bleak 3.本文所用设备   应事先学习蓝

    2024年02月02日
    浏览(40)
  • 深入浅出蓝牙低功耗音频BLE Audio--4-3 CIS

            为了掌握核心规范中ISO新特性,先介绍单播且可连接的ISO流,即CIS,CIS的结构框架相当复杂,但是其建立在一些非常的原则之上。本节首先描述CIS如何被设计,解释组成模块如何配合工作,然后学习广播模式的不同之处,为学习蓝牙低功耗音频方案奠定基础。  

    2023年04月14日
    浏览(48)
  • CH573-08-BLE蓝牙(通信与点灯)——RISC-V内核BLE MCU快速开发教程

       ch573芯片集成低功耗 2.4-GHz 无线通讯模块,包括 RF 收发器、基带和链路控制以及天线匹配网络,支持低功耗蓝牙 BLE。内部提供一百多个寄存器用于调节参数和控制过程及状态,官方优化的通讯协议栈和应用层 API,支持组网,支持各种主流操作系统下的上位机开发,提

    2024年02月09日
    浏览(43)
  • 深入浅出蓝牙低功耗音频BLE Audio --4-2 ISO流和角色

    核心规范V5.2中增加ISO流特性是低功耗蓝牙协议中一个全新的概念。熟悉A2DP和HFP协议的读者都知道其拓扑结构局限不灵活。HFP具有双向一对一的链路,典型场景是电话和耳机或免提设备之间。A2DP是一个更简单的单播链路,定义Source设备产生音频数据,Sink设备通常是耳机,扬声

    2023年04月11日
    浏览(71)
  • 微信小程序蓝牙功能开发与问题记录

    一、蓝牙支持情况 1. 微信小程序对蓝牙的支持情况 目前普遍使用的蓝牙规格:经典蓝牙和蓝牙低功耗。 经典蓝牙 (蓝牙基础率/增强数据率):常用在对数据传输带宽有一定要求的大数据量传输场景上,比如需要传输音频数据的蓝牙音箱、蓝牙耳机等; 蓝牙低功耗  (Blue

    2024年02月09日
    浏览(56)
  • 微信小程序蓝牙功能全套开发流程介绍

    1.1初始化蓝牙模块(打开蓝牙适配器) 初次加载,自动获取获取系统信息,检查蓝牙适配器是否可用 初始化蓝牙,提示打开GPS和蓝牙,开始自动搜索蓝牙设备 1.2搜索周围蓝牙 开始搜索蓝牙设备,定时1s获取搜索到的设备 把搜索到的设备保存在一个数组内,渲染在页面 1.3监

    2024年02月08日
    浏览(207)
  • 【STM32备忘录】【STM32WB系列的BLE低功耗蓝牙】一、测试广播配置搜不到信号的注意事项

    WB系列是双核单片机,用户写M4,无线协议栈使用M0 新买到手的单片机,需要自己刷入使用的无线协议栈 刷入无线协议栈的途径是通过一个叫FUS的东东,类似于bootloader,这个FUS新买的芯片通常已经刷好,但版本不一定是最新的(如果没有需要自己刷入) 刷入FUS和无线协议栈需要

    2024年03月16日
    浏览(54)
  • 【微信小程序 | 实战开发】配置微信小程序APPID并快速接入

    你是否想要掌握人工智能的最新技术和应用?你是否想要成为未来社会的创新者和领导者?你是否想要和全球的优秀导师和同学一起学习和交流?如果你的答案是肯定的,那么欢迎来到床长人工智能教程网站,这里是你实现梦想的起点! 个人名片: 🐼 作者简介:一名大一在

    2024年01月24日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包