当前位置:   article > 正文

微信小程序使用蓝牙连接硬件_startbluetoothdevicesdiscovery

startbluetoothdevicesdiscovery

目录

一、蓝牙官方api文档

二、蓝牙重要参数介绍

三、案例教程

1. 获取蓝牙权限(openBluetoothAdapter)

 2. 开始搜索蓝牙设备(startBluetoothDevicesDiscovery)

3. 监听搜索到新设备的事件(onBluetoothDeviceFound)

4.连接蓝牙设备(createBLEConnection)

5.获取蓝牙设备服务(getBLEDeviceServices) 

6.获取某个蓝牙服务特征(getBLEDeviceCharacteristics)

7.启动蓝牙服务值变化监听及监听特征值变化(notifyBLECharacteristicValueChange、onBLECharacteristicValueChange)

8.向蓝牙写入数据(writeBLECharacteristicValue)

9.string2buffer函数

四、扩展


一、蓝牙官方api文档

wx.startBluetoothDevicesDiscovery(Object object) | 微信开放文档微信开发者平台文档icon-default.png?t=N7T8https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.startBluetoothDevicesDiscovery.html

二、蓝牙重要参数介绍

1

deviceid

蓝牙设备的id这个参数是蓝牙设备的唯一id
2

uuid

服务的id这个是通过deviceid获取到的这个设备服务的uuid
3

characteristic

特性值这个是通过deviceid、uuid获取到的特性值

重点:辅助理解这几个值的意思 

首先deviceid是比较清楚的,它是蓝牙设备的唯一标识它只有一个,它的用途在于找到蓝牙之后进行匹配蓝牙。其次是uuid它是通过deviced获得得到的,通过deviced就可以获取到它蓝牙的所有服务,服务就是蓝牙设置支持的某个能力例如开关led灯。还有服务嘛就是有很多,所以uuid不止有一个,使用哪个服务uuid看自己。下来就是特征值他是由devided和uuid得到的,它相当于是一个里面的功能而uuid是这个功能的门牌码,功能当然也有很多个,所以特性值也有好多个,一般使用写功能,遍历出来之后拿到写的特性值就行了。

三、案例教程

1. 获取蓝牙权限(openBluetoothAdapter)

  1. initBlue:function(){
  2. var that = this;
  3. wx.openBluetoothAdapter({
  4. success: function (res) {
  5. wx.showToast({
  6. title: '初始化成功',
  7. icon: 'success',
  8. duration: 800
  9. })
  10. that.findBlue();//2.0
  11. },
  12. fail: function (res) {//如果手机上的蓝牙没有打开,可以提醒用户
  13. wx.showToast({
  14. title: '请开启蓝牙',
  15. icon: 'fails',
  16. duration: 1000
  17. })
  18. }
  19. })
  20. },

 2. 开始搜索蓝牙设备(startBluetoothDevicesDiscovery)

  1. findBlue(){
  2. var that = this
  3. wx.startBluetoothDevicesDiscovery({
  4. allowDuplicatesKey: true,
  5. interval: 0,
  6. powerLevel: 'high',
  7. success: function (res) {
  8. that.getBlue()//3.0
  9. }
  10. })
  11. },

3. 监听搜索到新设备的事件(onBluetoothDeviceFound)

  1. getBlue(){
  2. var that = this;
  3. wx.onBluetoothDeviceFound(function (devices) {
  4. if (devices.devices) {
  5. if(devices.devices[0].name=="这个要自己修改看要怎样的设备")
  6. {
  7. that.setData({
  8. deviceid: devices.devices[0].deviceId,
  9. })
  10. that.connetBlue();
  11. }
  12. }
  13. })
  14. },

4.连接蓝牙设备(createBLEConnection)

  1. connetBlue(){
  2. var that = this;
  3. var deviceid = that.data.deviceid;
  4. wx.createBLEConnection({
  5. // 这里的 deviceid 需要已经通过 createBLEConnection 与对应设备建立链接
  6. deviceId: deviceid,//设备id
  7. timeout: 10000, // 10s连接超时
  8. success: function (res)
  9. wx.showToast({
  10. title: '连接成功',
  11. icon: 'fails',
  12. duration: 800
  13. })
  14. wx.stopBluetoothDevicesDiscovery()
  15. that.getServiceId()//5.0
  16. }
  17. })
  18. },

5.获取蓝牙设备服务(getBLEDeviceServices) 

  1. getServiceId(){
  2. var that = this
  3. wx.getBLEDeviceServices({
  4. // 这里的 deviceid 需要已经通过 createBLEConnection 与对应设备建立链接
  5. deviceId: that.data.deviceid,
  6. success: function (res) {
  7. var model = res.services[0].uuid
  8. that.getCharacteId()//6.0
  9. }
  10. })
  11. },

6.获取某个蓝牙服务特征(getBLEDeviceCharacteristics)

  1. getCharacteId(){
  2. var that = this
  3. wx.getBLEDeviceCharacteristics({
  4. deviceId: that.data.deviceid,
  5. serviceId: that.data.services,
  6. success: function (res) {
  7. // 遍历特征值列表
  8. for (let i = 0; i < res.characteristics.length; i++) {
  9. let characteristic = res.characteristics[i];
  10. // 检查特征值是否具有 read 属性为 false
  11. if (!characteristic.properties.read) {
  12. // 当找到 read 属性为 false 的特征值时,设置 writeId 为该特征值的 UUID
  13. that.setData({
  14. writeId: characteristic.uuid
  15. });
  16. break; // 找到符合条件的特征值后,结束循环
  17. }
  18. }
  19. },
  20. fail: function (res) {
  21. // 处理获取特征值失败的情况
  22. console.log("失败的原因",res);
  23. }
  24. })
  25. },

7.启动蓝牙服务值变化监听及监听特征值变化(notifyBLECharacteristicValueChange、onBLECharacteristicValueChange)

启用蓝牙低功耗设备特征值变化时的 notify 功能,订阅特征。注意:必须设备的特征支持 notify 或者 indicate 才可以成功调用。

另外,必须先启用 wx.notifyBLECharacteristicValueChange 才能监听到设备 characteristicValueChange 事件

  1. startNotice(uuid){
  2. var that = this;
  3. wx.notifyBLECharacteristicValueChange({
  4. state: true, // 启用 notify 功能
  5. deviceId: that.data.deviceid,
  6. serviceId: that.data.services,
  7. characteristicId: uuid, //第一步 开启监听 notityid 第二步发送指令 write
  8. success: function (res) {
  9. wx.onBLECharacteristicValueChange(function (res) {
  10. // 这里面需要把回你的数据下转换格式
  11. })
  12.   }
  13. })
  14. },

8.向蓝牙写入数据(writeBLECharacteristicValue)

数据不能大于20字节,直接用就行,大于20字节则进行轮训发送(string2buffer函数在下面)

  1. sendmmm:function(sendData){
  2. var that = this;
  3. //向蓝牙发送数据
  4. let buffer = that.string2buffer(sendData);//16进制
  5. let pos = 0;
  6. let bytes = buffer.byteLength;
  7. var result = ''
  8. let tmpBuffer;
  9. var sdtim= setInterval(function(){
  10. if (bytes > 20) {
  11. tmpBuffer = buffer.slice(pos, pos + 20);
  12. console.log('字节:');
  13. console.log(tmpBuffer);
  14. pos += 20;
  15. bytes -= 20;
  16. wx.writeBLECharacteristicValue({
  17. deviceId: that.data.deviceid,
  18. serviceId: that.data.services,
  19. characteristicId: that.data.writeId,//第二步写入的特征值
  20. value: tmpBuffer,
  21. success(res) {
  22. console.log('发送成功!', res)
  23. }
  24. })
  25. } else {
  26. tmpBuffer = buffer.slice(pos, pos + bytes);
  27. console.log('字节:');
  28. console.log(tmpBuffer);
  29. pos += bytes;
  30. bytes -= bytes;
  31. wx.writeBLECharacteristicValue({
  32. deviceId: that.data.deviceid,
  33. serviceId: that.data.services,
  34. characteristicId: that.data.writeId,//第二步写入的特征值
  35. value: tmpBuffer,
  36. success(res) {
  37. console.log('最后次发送', res)
  38. })
  39. clearInterval(sdtim);
  40. },
  41. fail: function (res) {
  42. console.log('发送失败', res)
  43. }
  44. })
  45. }
  46. }, 30);
  47. },

9.string2buffer函数

  1. string2buffer(str) {
  2. let buffer = new ArrayBuffer(str.length * 2); // 每个字符占2个字节
  3. let bufferView = new Uint16Array(buffer);
  4. for (let i = 0; i < str.length; i++) {
  5. bufferView[i] = str.charCodeAt(i);
  6. }
  7. return buffer;
  8. },

四、扩展

蓝牙 (Bluetooth) | 微信开放文档

只能连接蓝牙4.0以上低功耗,就是手机啥的蓝牙检测不到,耳机什么的可以检测到

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/757992
推荐阅读
相关标签
  

闽ICP备14008679号