小程序连接蓝牙(保证能用)

这篇具有很好参考价值的文章主要介绍了小程序连接蓝牙(保证能用)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、小程序蓝牙连接api文档地址

https://developers.weixin.qq.com/miniprogram/dev/api/

小程序蓝牙,小程序,微信小程序,javascript,前端

二、蓝牙设备ID、服务ID、特征值ID解释

小程序蓝牙,小程序,微信小程序,javascript,前端
蓝牙有一个唯一的设备ID,这个设备ID下面有多个服务ID,每个服务ID下面有多个特征值ID,每个特征值ID有相应的读、写、监听等权限。

小程序和蓝牙连接进行通信,主要是1给蓝牙发送数据 2接收蓝牙发过来的数据,调用了那么多的小程序api,就是为了获取有发送权限write,接收权限notify的特征值ID文章来源地址https://www.toymoban.com/news/detail-518556.html

三、蓝牙连接步骤说明

流程 对应代码方法 执行的操作
1 getUserSetting 检测蓝牙是否授权
2 initBlue 初始化蓝牙设备
3 findBlue 开始搜索蓝牙设备
4 getBlue 获取搜索到的设备ID
5 connetBlue 连接蓝牙设备、关闭蓝牙搜索(省电)、监听蓝牙设备(断开后自动重连)
6 getServiceId 获取蓝牙服务ID
7 getCharacteId 获取蓝牙特征值ID
8 startNotice 开始监听蓝牙数据
9 sendOrder 给蓝牙发送数据
10 onLoad 接收蓝牙数据执行业务逻辑
11 onUnload 离开页面断开蓝牙连接、取消蓝牙监听(省电)

四、小程序源代码

/**获取已授权列表*/
        getUserSetting() {
            console.log("获取已授权列表")
            var that = this;
            wx.getSetting({
                success(res) {
                    var authSetting = res.authSetting
                    console.log(res.authSetting)
                    if (!res.authSetting['scope.bluetooth']) {
                        //授权获取蓝牙权限
                        wx.authorize({
                            scope: 'scope.bluetooth',
                            success() {
                                console.log("成功获取蓝牙权限")
                                that.initBlue()
                            },
                            fail() {
                                console.log("蓝牙权限获取失败")
                            }
                        })
                    } else {
                        that.initBlue()
                    }
                },
                fail(f) {
                    console.log(f)
                }
            })
        },

        /**初始化蓝牙设备*/
        initBlue() {
            console.log("初始化蓝牙")
            var that = this;
            wx.openBluetoothAdapter({
                success: function (res) {
                    that.findBlue()
                },
                fail: function (res) {
                    console.log("e", "请开启蓝牙定位")
                }
            })
        },

        /**开始搜索蓝牙设备*/
        findBlue() {
            var that = this
            wx.startBluetoothDevicesDiscovery({
                allowDuplicatesKey: true,
                interval: 0,
                powerLevel: 'high',
                success: function (res) {
                    console.log("开始搜索蓝牙设备", res)
                    //加个延时,避免获取数据为空
                    setTimeout(() => {
                        that.getBlue()
                    }, 300)
                }
            })
        },

        /**获取搜索到的设备信息*/
        getBlue() {
            var that = this
            wx.getBluetoothDevices({
                success: function (res) {
                    var blueToothList = []
                    for (var i = 0; i < res.devices.length; i++) {
                        if (res.devices[i].name != "未知设备") {
                            console.log("遍历已知蓝牙设备" + i, res.devices[i].deviceId, res.devices[i].name, res.devices[i].RSSI)
                        }
                    }
                },
                fail: function () {
                    console.log("搜索蓝牙设备失败")
                }
            })
        },

        /**获取到设备之后连接蓝牙设备*/
        connetBlue() {
            setTimeout(() => {
                //getBlue里面获取的deviceId
                var deviceId = this.data.deviceId
                var that = this;
                wx.createBLEConnection({
                    deviceId: deviceId,//设备id
                    success: function (res) {
                        console.log("连接蓝牙成功!")
                        wx.stopBluetoothDevicesDiscovery({
                            success: function () {
                                console.log('连接蓝牙成功之后关闭蓝牙搜索,避免耗电');
                            }
                        })
                        //获取蓝牙服务ID
                        that.getServiceId()
                        //连接成功,开始监听蓝牙连接状态,断开后重连
                        that.onStateChange()
                    },
                    fail: function (f) {

                    }
                })
            }, 200)
        },

        /**开始监听蓝牙连接状态*/
        onStateChange() {
            wx.onBLEConnectionStateChange(this.stateChangeFun)
        },

        /**蓝牙状态监听方法*/
        stateChangeFun(res) {
            // 该方法回调中可以用于处理连接意外断开等异常情况
            var connectStatus = res.connected
            if (connectStatus == false) {
                console.log('蓝牙断开重连', `device ${res.deviceId} state has changed, connected: ${res.connected}`)
                this.reconnectBlue()
            }
        },

        /**蓝牙重连*/
        reconnectBlue() {
            var deviceId = this.data.deviceId
            var that = this;
            wx.createBLEConnection({
                deviceId: deviceId,
                success() {
                    console.log("蓝牙重连成功!")
                },
                fail() {
                    that.reconnectBlue()
                }
            })
        },

        /**蓝牙设备的服务uuid*/
        getServiceId() {
            var that = this
            wx.getBLEDeviceServices({
                deviceId: that.data.deviceId,
                success: function (res) {
                    console.log("蓝牙服务信息", res)
                    //[0]这个服务ID下面的特征值ID有notify和write为true的,每个设备不一样,根据你的设备来,可能是[0]也可能是[1]或者其他的
                    var model = res.services[0]
                    that.setData({
                        servicesId: model.uuid,
                    })
                    that.getCharacteId()
                }
            })
        },

        /**查看蓝牙特征值*/
        getCharacteId() {
            var that = this
            wx.getBLEDeviceCharacteristics({
                deviceId: that.data.deviceId,
                serviceId: that.data.servicesId,
                success: function (res) {
                    console.log("蓝牙特征值", res)
                    var model = ""
                    for (var i = 0; i < res.characteristics.length; i++) {
                        model = res.characteristics[i]
                        //接收蓝牙发送过来的数据需要这个uuid
                        if (model.properties.notify == true) {
                            that.setData({ notifyId: model.uuid })
                        }
                        //给蓝牙发送数据需要这个uuid
                        if (model.properties.write == true) {
                            that.setData({ writeId: model.uuid })
                        }
                    }
                    that.startNotice(that.data.notifyId)
                }
            })
        },

        /**监听蓝牙数据*/
        startNotice(uuid) {
            var that = this;
            wx.notifyBLECharacteristicValueChange({
                state: true, // 启用 notify 功能
                deviceId: that.data.deviceId,
                serviceId: that.data.servicesId,
                characteristicId: uuid,
                success: function (res) {

                },
                fail: function (fail) {
                    console.log("蓝牙监听失败!")
                }
            })
        },

        /**发送数据*/
        sendOrder(write) {
            let buffer = this.string2buffer(write);
            let pos = 0;
            let bytes = buffer.byteLength;
            var that = this
            //因为微信小程序使用蓝牙发送数据限制20字节内的原因,需要对超过20字节的数据拆包进行发送
            while (bytes > 0) {
                let tmpBuffer;
                if (bytes > 20) {
                    tmpBuffer = buffer.slice(pos, pos + 20);
                    pos += 20;
                    bytes -= 20;
                } else {
                    tmpBuffer = buffer.slice(pos, pos + bytes);
                    pos += bytes;
                    bytes -= bytes;
                }
                wx.writeBLECharacteristicValue({
                    deviceId: that.data.deviceId,
                    serviceId: that.data.servicesId,
                    characteristicId: that.data.writeId,
                    value: tmpBuffer,
                    success: (res) => {
                        console.log("写入成功", res)
                    },
                    fail: (f) => {
                        console.log("写入失败")
                    }
                })
            }
        },

        /**将16进制转化为ArrayBuffer*/
        string2buffer() {
            return new Uint8Array(str.match(/[\da-f]{2}/gi).map(function (h) {
                return parseInt(h, 16)
            })).buffer
        },

        /**将ArrayBuffer转换成字符串*/
        ab2hex() {
            var hexArr = Array.prototype.map.call(
                new Uint8Array(buffer),
                function (bit) {
                    return ('00' + bit.toString(16)).slice(-2)
                }
            )
            return hexArr.join('');
        },

        /**生命周期函数--监听页面加载*/
        onLoad(options) {
            wx.onBLECharacteristicValueChange(function (res) {
                // 此时可以拿到蓝牙设备返回来的数据是一个ArrayBuffer类型数据,所以需要通过一个方法转换成字符串
                var data = this.ab2hex(res.value)
                //下面写你接收到数据之后的业务逻辑代码
            })
        },

        /**生命周期函数--监听页面隐藏*/
        onUnload() {
            //关闭蓝牙连接状态监听、蓝牙连接,避免耗电
            this.offStateChange()
            this.closeBlue()
        }

到了这里,关于小程序连接蓝牙(保证能用)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 微信小程序连接蓝牙设备并传递数据

    流程图 分步详解 wx.getSystemInfo(Object object)  获取系统信息 获取操作系统及版本 页面加载的时候(或者app.js中 ) ↓ 初始化蓝牙模块  wx.openBluetoothAdapter(Object object) 在用户蓝牙开关未开启或者手机不支持蓝牙功能的情况下,通过错误码(errCode=10001),提示打开蓝牙或蓝牙功能

    2024年02月08日
    浏览(55)
  • 微信小程序之蓝牙连接全过程封装

    1、初始化蓝牙 不管是ios操作系统还是安卓操作系统,第一步都需要初始化蓝牙 2、获取蓝牙适配器状态 3、ios和安卓的操作系统对蓝牙的连接方式不同 安卓是直接对设备的macAddress进行连接 ios需要对周边的蓝牙设备就行搜索: 4、蓝牙连接 5、获取蓝牙多个service 6、开启notif

    2024年02月15日
    浏览(40)
  • 微信小程序——实现蓝牙设备搜索及连接功能

    ✅作者简介:2022年 博客新星 第八 。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:微信小程序学习分享 ✨特色专栏:国学周更-心性养成之路 🥭本文内容:微信小程序——实

    2024年02月08日
    浏览(65)
  • uniapp微信小程序蓝牙连接与设备数据对接

    蓝牙连接并通信方法封装大致步骤。 初始化蓝牙并搜索; 获取并启用service服务; 数据读取和监听设备返回数据 需要使用uniapp官方提供api: 1、开启蓝牙适配器初始化蓝牙模块,获取手机蓝牙是否打开 2、开启蓝牙设备搜索 3、获取搜索到的设备信息 4、关闭蓝牙搜索 5、连接

    2024年02月04日
    浏览(49)
  • uniapp 蓝牙连接设备 下发命令 监听蓝牙与设备的连接状态(兼容 微信小程序和支付宝小程序)

    1:创建蓝牙需要调用的Api文件 ly.js 2 在页面中使用index.vue 

    2024年04月14日
    浏览(52)
  • uniapp微信小程序连接蓝牙打印机 打印文字、图片

    首先感谢几位的文章分享 https://blog.csdn.net/guairena/article/details/127941515 https://blog.csdn.net/qq_37970097/article/details/119148707 效果图: 使用的是 芝柯cc3 蓝牙打印机, 我这里没有存储蓝牙设备相关信息。所以每次打印都会重新初始化并搜索设备,储存相关的代码下面也有,所以代码部分

    2024年02月13日
    浏览(72)
  • 微信小程序通过蓝牙连接ESP32控制LED灯

    本文主要基于网上已有的代码以及官方给定示例代码进行修改。如有不妥请指出,谢谢啦。 据我了解,微信小程序只能通过低功耗蓝牙(BLE)进行控制。 BLE蓝牙部分设置流程(通过该程序就能让esp32广播蓝牙,同时手机也可搜索到蓝牙设备): // 获取蓝牙接收的数据与处理

    2024年02月04日
    浏览(77)
  • 微信小程序连接蓝牙汉印HM-A300L标签打印机

    需求: 以下文章针对打印一讲解,打印二的代码放在最后。 打印一 打印二 参考文章: 微信小程序实现蓝牙打印 打印机CPCL编程参考手册(CPCL 语言) 蓝牙打印机CPCL编程手册~汉印HM-A300 无用小知识: A300系列:先将打印机关机然后装好纸,同时按住屏幕左右两边的按键不放,

    2024年01月18日
    浏览(59)
  • 微信小程序能用python写吗,可以用python做小程序吗

    大家好,小编来为大家解答以下问题,微信小程序用什么语言开发python,微信小程序可以用python开发吗,现在让我们一起来看看吧! 本篇文章给大家谈谈用python编写一个小程序,以及如何用python做小软件,希望对各位有所帮助,不要忘了收藏本站喔。 最近想学习利用Python进

    2024年02月03日
    浏览(36)
  • 保姆级微信小程序对接蓝牙设备教程。微信小程序发送不同蓝牙指令(定时发送,断开重连,判断是否有蓝牙权限等)

    本文是一个完整的对接设备,发送不同指令监听不同返回的完整示例,可根据实际项目按需更改。 注: app.showModal 为在app.js中封装的showModal方法, then(()={}) 代表用户点击 confirm ,可用 wx.showModal 代替。 公用方法 请求设备列表 1. 判断是否有蓝牙权限 2. 初始化蓝牙 wx.openBluet

    2024年03月20日
    浏览(65)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包