微信小程序使用蓝牙进行设备配网

微信小程序蓝牙API

微信小程序API:https://developers.weixin.qq.com/miniprogram/dev/framework/device/bluetooth.html

版本支持:

iOS 微信客户端 6.5.6 版本开始支持,Android 6.5.7 版本开始支持

版本对比

小程序的功能不断的增加,但是旧版本的微信客户端并不支持新功能,所以在使用这些新能力的时候需要做兼容。

开发者可以通过以下方式进行低版本的兼容:

https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html

生命周期:

蓝牙适配器模块生效周期为调用 wx.openBluetoothAdapter 至调用 wx.closeBluetoothAdapter 或小程序被销毁为止。
在小程序蓝牙适配器模块生效期间,开发者才能够正常调用蓝牙相关的小程序 API,并收到蓝牙模块相关的事件回调。

IOS和Android差异:

一、由于系统限制,Android 上获取到的 deviceId 为设备 MAC 地址,iOS 上则为设备 uuid。因此 deviceId 不能硬编码到代码中。
二、iOS 上对特征值的 read、write、notify操作,由于系统需要获取特征值实例,传入的 serviceId 与 characteristicId 必须由 wx.getBLEDeviceServices 与 wx.getBLEDeviceCharacteristics 中获取到后才能使用。建议双平台统一在建立连接后先执行 wx.getBLEDeviceServices 与 wx.getBLEDeviceCharacteristics 后再进行与蓝牙设备的数据交互。

调试:

目前不支持在开发者工具上进行蓝牙功能的调试,需要使用真机才能正常调用小程序蓝牙接口。

//开启和关闭蓝牙模块
wx.openBluetoothAdapter//初始化蓝牙模块
wx.closeBluetoothAdapter //关闭蓝牙模块

//获取和监听蓝牙状态
wx.getBluetoothAdapterState //获取本机蓝牙适配器状态
wx.onBluetoothAdapterStateChange //监听蓝牙适配器状态变化事件

//搜索和停止蓝牙搜索
wx.startBluetoothDevicesDiscovery //开始搜寻附近的蓝牙外围设备
wx.stopBluetoothDevicesDiscovery //停止搜寻附近的蓝牙外围设备

//获取和监听已发现的蓝牙设备
wx.getBluetoothDevices //获取所有已发现的蓝牙设备
wx.onBluetoothDeviceFound //监听发现新设备的事件

//连接和断开蓝牙设备
wx.createBLEConnection //连接蓝牙设备
wx.closeBLEConnection //断开与蓝牙设备的连接

//获取已连接的蓝牙设备
wx.getConnectedBluetoothDevices
//获取已连接的蓝牙设备的服务
wx.getBLEDeviceServices
//获取已连接的蓝牙设备的特征值
wx.getBLEDeviceCharacteristics
//读取已连接的蓝牙设备的二进制数据
wx.readBLECharacteristicValue
//向已连接的蓝牙设备发送二进制数据
wx.writeBLECharacteristicValue
//启用监听已连接的蓝牙设备的特征值变化
wx.notifyBLECharacteristicValueChange
//监听已连接的蓝牙设备的特征值变化
wx.onBLECharacteristicValueChange
//监听已连接的蓝牙设备的连接错误事件
wx.onBLEConnectionStateChange 

//初始化蓝牙模块
wx.openBluetoothAdapter({
	success: function (res) {
		wx.showToast({
			title: '蓝牙已开启,正在搜索设备',
			icon: 'success',
			duration: 800
		});
	},
	//初始化蓝牙失败,蓝牙可能未开启
	fail: function (res) {
		wx.showToast({
			title: '请开启蓝牙',
			icon: 'fails',
			duration: 1000
		})
	}
})
wx.onBluetoothDeviceFound(function(devices) {
  console.log("蓝牙列表信息:");
  console.log(devices);
  //剔除重复设备,兼容不同设备API的不同返回值
  var isnotexist = true;
  if (devices.deviceId) {
    if (devices.advertisData) {
      devices.advertisData = buf2hex(devices.advertisData);
    } else {
      devices.advertisData = '';
    }
    for (var i = 0; i < devicesList.length; i++) {
      if (devices.deviceId == devicesList[i].deviceId) {
        isnotexist = false;
      }
    }
    if (isnotexist) {
      devicesList.push(devices);
    }
  } else if (devices[0]) {
    if (devices[0].advertisData) {
      devices[0].advertisData = buf2hex(devices[0].advertisData);
    } else {
      devices[0].advertisData = '';
    }
    for (var i = 0; i < devices_list.length; i++) {
      if (devices[0].deviceId == devicesList[i].deviceId) {
        isnotexist = false;
      }
    }
    if (isnotexist) {
      devicesList.push(devices[0]);
    }
  }
})
wx.startBluetoothDevicesDiscovery({
  allowDuplicatesKey: true,
  services: ['FEB3'],//小程序开发者和嵌入式开发者约定的服务名
  success: function(res) {
    console.log("蓝牙列表信息:");
    console.log(res);
    devicesList.length = 0;
  },
  fail: function(res) {

  }
});

接口
在这里插入图片描述

1、蓝牙名称 : OID01(大写,注意蓝牙发送的是将字符串转为16进制的数据)
2、广播包数据格式:(长度+标志+数据,例如0x02,0x01,0x06 。0x02表示后面两个字节,标志位0x01,数据为0x06)
0x02,0x01,0x06//可以发现可以连接
0x03,0x02,0xB3,0xFE//UUID :0xFEB3
0x06,0x09,0x4F,0x49,0x44,0x30,0x31//设备名称:OID01字符串转16进制
建议扫描连接设备时判定UUID和设备名,一致则连接该设备
2、蓝牙协议
所有收发数据都是20个字节一包数据的形式发送!
设备端创建服务一共三个:2个蓝牙标准服务和一个自定义服务
蓝牙标准服务
(1)、服务UUID:1800(16位UUID)
特性UUID:2A00
属性:可读
用途:放置设备的蓝牙名称
(2)、服务UUID:180F(16位UUID)
特性UUID:2A19
属性:可读
用途:放置设备端电量百分比
自定义服务:
服务UUID:FEB3(16位UUID)
特性UUID:FED4
属性:可读
用途:放置设备端的MAC地址,可以用于识别设备的唯一ID

特性UUID:FED5
属性:可读+可写
用途:预留

特性UUID:FED6
属性:可读+notify
用途:返回点读码的数据,点读码数据格式:0xFF+0x51+点读码码值(4个bytes)

特性UUID:FED7
属性:可读+WRITE_WITHOUT_RESPONSE
用途:预留

特性UUID:FED8
属性:可读+notify
用途:返回按键数据,按键数据格式键说明文档

附java服务器与设备通信设计:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信小程序可以通过使用微信小程序蓝牙接口来读取蓝牙设备返回的数据。下面是一个简单的示例代码,演示了如何读取蓝牙设备的数据: ```javascript // 初始化蓝牙适配器 wx.openBluetoothAdapter({ success: function (res) { // 监听蓝牙适配器状态变化事件 wx.onBluetoothAdapterStateChange(function (res) { console.log('蓝牙适配器状态变化', res) }) // 开始搜索附近的蓝牙设备 wx.startBluetoothDevicesDiscovery({ success: function (res) { // 监听寻找到新设备的事件 wx.onBluetoothDeviceFound(function (devices) { console.log('新设备', devices) // 如果找到目标设备,停止搜索 if (devices.deviceId === '目标设备的deviceId') { wx.stopBluetoothDevicesDiscovery() } }) } }) } }) // 连接蓝牙设备 wx.createBLEConnection({ deviceId: '目标设备的deviceId', success: function (res) { // 监听蓝牙连接状态改变事件 wx.onBLEConnectionStateChange(function (res) { console.log('蓝牙连接状态改变', res) }) // 获取蓝牙设备的服务列表 wx.getBLEDeviceServices({ deviceId: '目标设备的deviceId', success: function (res) { // 遍历服务列表 for (let i = 0; i < res.services.length; i++) { let service = res.services[i] // 获取服务的特征值列表 wx.getBLEDeviceCharacteristics({ deviceId: '目标设备的deviceId', serviceId: service.uuid, success: function (res) { // 遍历特征值列表 for (let j = 0; j < res.characteristics.length; j++) { let characteristic = res.characteristics[j] // 监听特征值变化事件 wx.onBLECharacteristicValueChange(function (res) { console.log('特征值变化', res) // 获取特征值的数据 let data = new Uint8Array(res.value) console.log('接收到的数据', data) }) // 读取特征值的数据 wx.readBLECharacteristicValue({ deviceId: '目标设备的deviceId', serviceId: service.uuid, characteristicId: characteristic.uuid, success: function (res) { console.log('读取特征值数据成功', res) } }) } } }) } } }) } }) ``` 请注意,以上代码只是一个示例,实际情况可能会有所不同。具体实现需要根据蓝牙设备的特性和协议进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值