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

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

流程图

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

分步详解

wx.getSystemInfo(Object object) 获取系统信息 获取操作系统及版本 页面加载的时候(或者app.js中 )

初始化蓝牙模块 wx.openBluetoothAdapter(Object object)

在用户蓝牙开关未开启或者手机不支持蓝牙功能的情况下,通过错误码(errCode=10001),提示打开蓝牙或蓝牙功能不可用。此时小程序蓝牙模块已经初始化完成,可通过 wx.onBluetoothAdapterStateChange监听手机蓝牙是否可用或是否在搜索状态。

关闭蓝牙模块wx.closeBluetoothAdapter。调用该方法将断开所有已建立的连接并释放系统资源。建议在使用蓝牙流程后,以及onhideonUnload

开始搜索蓝牙 wx.startBluetoothDevicesDiscovery(OBJECT) 开始搜寻附近的蓝牙外围设备,初始化完成或点击事件里调用。此操作比较耗费系统资源,请在搜索并连接到设备后调用 wx.stopBluetoothDevicesDiscovery方法停止搜索,以及onhideonUnload

监听寻找到新设备的事件wx.onBluetoothDeviceFound(CALLBACK)
通过设备名(设备方提供)过滤设备,deviceId一般不作为判断条件,因为开发者工具和 Android 上获取到的deviceId为设备 MAC 地址;iOS 上则为设备 uuid。

但是如果附近有多个同名的设备时,就需要通过mac地址来匹配对应的蓝牙设备了。ios不同手机搜索到的设备deviceId经过处理后是不同的。如果需要处理这种情况可以联系蓝牙设备硬件方,将mac地址存入当前蓝牙设备的广播数据段中的 ManufacturerData 数据段中,我们通过res.devices.advertisData的值去匹配&连接蓝牙。

⚠️ 安卓下部分机型需要有位置权限才能搜索到设备,需留意是否开启了位置权限

连接低功耗蓝牙设备wx.createBLEConnection(OBJECT) 

若小程序在之前已有搜索过某个蓝牙设备,并成功建立连接,可直接传入之前搜索获取的 deviceId 直接尝试连接该设备,无需进行搜索操作。 

断开连接:wx.closeBLEConnection(),在onhideonUnload时候;

wx.onBLEConnectionStateChange(function callback) 
监听低功耗蓝牙连接状态的改变事件。包括开发者主动连接或断开连接,设备丢失,连接异常断开等等

获取蓝牙设备所有服务(service) wx.getBLEDeviceServices(OBJECT) 
过滤出需要的service uuid,设备方提供,比如包含某一个字段

获取蓝牙设备某个服务中的所有 characteristic(特征值)wx.getBLEDeviceCharacteristics(OBJECT)

过滤特征值,找到 用来写入/读取的特征值的 uuid 设备方提供  

特征值是什么:每个服务都包含了一组特征值用来描述服务的一些属性,跟蓝牙通信时需要这些特征值ID来传递数据。

启用低功耗蓝牙设备特征值变化时的 notify 功能,订阅特征值  wx.notifyBLECharacteristicValueChange(OBJECT),这里需要用来读取的特征值的 uuid

注意⚠️ :必须设备的特征值支持 notify 或者 indicate 才可以成功调用。

写入wx.writeBLECharacteristicValue(OBJECT) 向低功耗蓝牙设备特征值中写入数据,需写入二进制数据。注意:必须设备的特征值支持 write 才可以成功调用。

wx.onBLECharacteristicValueChange 监听低功耗蓝牙设备的特征值变化事件(返回的多个数据包)

监听低功耗蓝牙设备的特征值变化事件。必须先启用 wx.notifyBLECharacteristicValueChange 接口才能接收到设备推送的 notification。

BLE

小程序蓝牙是搜索不到手机蓝牙的。

经典蓝牙和BLE(Bluetooth Low Energy)低功耗蓝牙的区别
蓝牙是一种短距的无线通讯技术,可实现固定设备、移动设备之间的数据交换。一般将蓝牙3.0之前的BR/EDR蓝牙称为传统蓝牙,而将蓝牙4.0规范下的LE蓝牙称为低功耗蓝牙。区别于传统模块,最大的特点就是成本和功耗降低,应用于实时性要求比较高。

蓝牙低功耗(BLE)功能,是利用蓝牙低功耗特性新发展的技术。
手机上要利用蓝牙低功耗技术,一般是通过 BLE 配件厂商发布的 BLE 配件和其配套 APP,配合使用。比如:BLE 运动手环、运动手表、体重计、计步器、智能腕带等。

二进制相关数据类型

ArrayBuffer & TypedArray

ArrayBuffer对象、TypedArray视图和DataView视图是 JavaScript 操作二进制数据的一个接口。ES6 将它们纳入了 ECMAScript 规格,并且增加了新的方法。它们都是以数组的语法处理二进制数据,所以统称为二进制数组。但是,二进制数组并不是真正的数组,而是类似数组的对象。

(1)ArrayBuffer对象:代表内存之中的一段二进制数据,可以通过“视图”进行操作。“视图”部署了数组接口,这意味着,可以用数组的方法操作内存。

(2)TypedArray视图:共包括 9 种类型的视图。比如Uint8ArrayInt16ArrayFloat32Array数组视图等等。 Uint8Array 代表数组的每一项是无符号整型 8代表数据的每一项占 8 个比特位,即一个字节(8bits=1byte)

通过 Uint8Array,即可知道其他视图如 Uint16ArrayInt8Array 等所代表的意义。

  • Int8Array 8位有符号整数的数组
  • Uint16Array 16位无符号整数数组 16代表数据的每一项占 16 个比特位,即2个字节
  • Int16Array 16位有符号整数数组
  • ...

小概括

简单说,ArrayBuffer对象代表原始的二进制数据,「并且只读」,而TypedArray 视图可以进行改写操作。

// new ArrayBuffer 1
var cmdBuffer1 = new ArrayBuffer(15) // new ArrayBuffer(Bytelength); 15个字节
//cmdBuffer1
ArrayBuffer(15) {}
    [[Int8Array]]: Int8Array(15)[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    [[Uint8Array]: Uint8Array(15)[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
    byteLength: (...)  
    __proto__: ArrayBuffer
       
// new ArrayBuffer 2
var cmdBuffer2 = new ArrayBuffer(16)
// cmdBuffer2
ArrayBuffer(16) {}
    [[Int8Array]]: Int8Array(16) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    [[Int16Array]]: Int16Array(8)[0, 0, 0, 0, 0, 0, 0, 0]  
    [[Int32Array]]: Int32Array(4) [0, 0, 0, 0]   
    [[Uint8Array]]: Uint8Array(16)[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]   
    byteLength: (...)
    __proto__: ArrayBuffer
        
// ArrayBuffer -> TypedArray
var cmd1 = new Uint8Array(cmdBuffer1)
//cmd1
Uint8Array(15) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

// TypedArray -> ArrayBuffer
cmd1.buffer
// cmd1.buffer
ArrayBuffer(15) {}
    [[Int8Array]]: Int8Array(15)[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    [[Uint8Array]]: Uint8Array(15)[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    byteLength: (...)
    __proto__: ArrayBuffer

数据写入和读取

数据写入

0x是16进制的前缀,H是16进制的后缀。另后缀

  • B,Binary(二进制);
  • H,Hex(十六进制);
  • O,Octal(八进制);
  • D,Decimal(十进制)。
// eg.
cmd1[10] = 0x20 // (数据定义来自产品说明)高四位是用户组数:2表示用户组号是P2;低四位是用户身体素质;0:普通人;1:业余运动员;2:专业运动员;

0x20转换为二进制为100000,即00100000,从左到右为高位到低位。高四位是用户组数,即0010转换为10进制是2,表示用户组号是P2,低四位是用户身体素质,0000转换为10进制是0,表示普通人,所以是0x20是p2 普通人

数据读取

BLE数据包传输规定了一次只能传输20byte,所以如果数据量较大,需要做分包传输处理

小程序生命周期

隐藏/卸载 显示/加载

onLoad: wx.navigateTowx.redirectTowx.reLaunch
onShow: wx.navigateTowx.redirectTowx.navigateBackwx.reLaunch、选择照片

onHide: wx.navigateTo、选择照片
onUnload:wx.redirectTowx.navigateBackwx.reLaunch

小概括

wx.navigateBack只会onshow 不会onload,其余(除了wx.switchTab) 两者都会
wx.navigateTo只会onhide不会onunload,其余都是onunload

小程序官方文档-蓝牙api

https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.openBluetoothAdapter.html文章来源地址https://www.toymoban.com/news/detail-483010.html

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

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

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

相关文章

  • uniapp 蓝牙连接设备 下发命令 监听蓝牙与设备的连接状态(兼容 微信小程序和支付宝小程序)

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

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

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

    2024年03月20日
    浏览(64)
  • 微信小程序实现蓝牙开锁、开门、开关、指令发送成功,但蓝牙设备毫无反应、坑

    wx联系本人获取源码(开源): MJ682517 需要从下往上阅读,使用函数自调的方式解决 API 不能及时获取数据的问题,替换方案是使用定时器,但是个人觉得定时器不好,所以使用了函数自调的方式实现获取不到数据的问题。 getBluetoothDevices 方法中获取 deviceId ; getBLEDeviceServices 方法

    2024年02月15日
    浏览(34)
  • 微信小程序 - 蓝牙连接

    官网 蓝牙 (Bluetooth) | 微信开放文档        蓝牙低功耗是从蓝牙 4.0 起支持的协议,与经典蓝牙相比,功耗极低、传输速度更快,但传输数据量较小。常用在对续航要求较高且只需小数据量传输的各种智能电子产品中,比如智能穿戴设备、智能家电、传感器等,应用场景

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

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

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

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

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

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

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

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

    2024年01月18日
    浏览(59)
  • 微信小程序数据传递的综合指南

    数据传递是现代应用程序开发中的一个关键问题。在微信小程序中,传递数据的方式有很多种,每种方式都有其适用的场景和优势。在本文中,我将为大家介绍微信小程序中常用的数据传递方式,并提供一些实用的技巧和建议,帮助大家在开发微信小程序时更好地处理数据传

    2024年02月05日
    浏览(51)
  • 微信小程序扫描蓝牙及操作(低功耗)蓝牙数据(全套流程)

    扫描蓝牙首先需要打开手机上的蓝牙。iOS只需打开蓝牙即可开始扫描蓝牙;Android需要打开蓝牙及位置信息才可以开始扫描蓝牙。下面的代码可以在扫描之前使用,用来检查是否已经很打开蓝牙及位置信息 官方地址https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.stopBl

    2024年02月09日
    浏览(61)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包