微信小程序–Ble蓝牙

2025-05-29 0 27

有一段时间没有。没有写关于小程序的文章了。3月28日,微信的api又一次新的更新。期待已久的蓝牙api更新。就开始撸一番。

源码地址

1.简述

蓝牙适配器接口是基础库版本 1.1.0 开始支持。

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

蓝牙总共增加了18个api接口。

2.Api分类

搜索类

连接类

通信类

3.API的具体使用

详细见官网:

https://mp.weixin.qq.com/debug/wxadoc/dev/api/bluetooth.html#wxgetconnectedbluethoothdevicesobject

4. 案例实现

4.1 搜索蓝牙设备

  1. /**
  2. *搜索设备界面
  3. */
  4. Page({
  5. data:{
  6. logs:[],
  7. list:[],
  8. },
  9. onLoad:function(){
  10. console.log('onLoad')
  11. varthat=this;
  12. //constSDKVersion=wx.getSystemInfoSync().SDKVersion||'1.0.0'
  13. //const[MAJOR,MINOR,PATCH]=SDKVersion.split('.').map(Number)
  14. //console.log(SDKVersion);
  15. //console.log(MAJOR);
  16. //console.log(MINOR);
  17. //console.log(PATCH);
  18. //constcanIUse=apiName=>{
  19. //if(apiName==='showModal.cancel'){
  20. //returnMAJOR>=1&&MINOR>=1
  21. //}
  22. //returntrue
  23. //}
  24. //wx.showModal({
  25. //success:function(res){
  26. //if(canIUse('showModal.cancel')){
  27. //console.log(res.cancel)
  28. //}
  29. //}
  30. //})
  31. //获取适配器
  32. wx.openBluetoothAdapter({
  33. success:function(res){
  34. //success
  35. console.log("—–success———-");
  36. console.log(res);
  37. //开始搜索
  38. wx.startBluetoothDevicesDiscovery({
  39. services:[],
  40. success:function(res){
  41. //success
  42. console.log("—–startBluetoothDevicesDiscovery–success———-");
  43. console.log(res);
  44. },
  45. fail:function(res){
  46. //fail
  47. console.log(res);
  48. },
  49. complete:function(res){
  50. //complete
  51. console.log(res);
  52. }
  53. })
  54. },
  55. fail:function(res){
  56. console.log("—–fail———-");
  57. //fail
  58. console.log(res);
  59. },
  60. complete:function(res){
  61. //complete
  62. console.log("—–complete———-");
  63. console.log(res);
  64. }
  65. })
  66. wx.getBluetoothDevices({
  67. success:function(res){
  68. //success
  69. //{devices:Array[11],errMsg:"getBluetoothDevices:ok"}
  70. console.log("getBluetoothDevices");
  71. console.log(res);
  72. that.setData({
  73. list:res.devices
  74. });
  75. console.log(that.data.list);
  76. },
  77. fail:function(res){
  78. //fail
  79. },
  80. complete:function(res){
  81. //complete
  82. }
  83. })
  84. },
  85. onShow:function(){
  86. },
  87. //点击事件处理
  88. bindViewTap:function(e){
  89. console.log(e.currentTarget.dataset.title);
  90. console.log(e.currentTarget.dataset.name);
  91. console.log(e.currentTarget.dataset.advertisData);
  92. vartitle=e.currentTarget.dataset.title;
  93. varname=e.currentTarget.dataset.name;
  94. wx.redirectTo({
  95. url:'../conn/conn?deviceId='+title+'&name='+name,
  96. success:function(res){
  97. //success
  98. },
  99. fail:function(res){
  100. //fail
  101. },
  102. complete:function(res){
  103. //complete
  104. }
  105. })
  106. },
  107. })

4.2连接 获取数据

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246
/**

* 连接设备。获取数据

*/

Page({

data: {

motto: 'Hello World',

userInfo: {},

deviceId: '',

name: '',

serviceId: '',

services: [],

cd20: '',

cd01: '',

cd02: '',

cd03: '',

cd04: '',

characteristics20: null,

characteristics01: null,

characteristics02: null,

characteristics03: null,

characteristics04: null,

result,

},

onLoad: function (opt) {

var that = this;

console.log("onLoad");

console.log('deviceId=' + opt.deviceId);

console.log('name=' + opt.name);

that.setData({ deviceId: opt.deviceId });

/**

* 监听设备的连接状态

*/

wx.onBLEConnectionStateChanged(function (res) {

console.log(`device ${res.deviceId} state has changed, connected: ${res.connected}`)

})

/**

* 连接设备

*/

wx.createBLEConnection({

deviceId: that.data.deviceId,

success: function (res) {

// success

console.log(res);

/**

* 连接成功,后开始获取设备的服务列表

*/

wx.getBLEDeviceServices({

// 这里的 deviceId 需要在上面的 getBluetoothDevices中获取

deviceId: that.data.deviceId,

success: function (res) {

console.log('device services:', res.services)

that.setData({ services: res.services });

console.log('device services:', that.data.services[1].uuid);

that.setData({ serviceId: that.data.services[1].uuid });

console.log('--------------------------------------');

console.log('device设备的id:', that.data.deviceId);

console.log('device设备的服务id:', that.data.serviceId);

/**

* 延迟3秒,根据服务获取特征

*/

setTimeout(function () {

wx.getBLEDeviceCharacteristics({

// 这里的 deviceId 需要在上面的 getBluetoothDevices

deviceId: that.data.deviceId,

// 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取

serviceId: that.data.serviceId,

success: function (res) {

console.log('000000000000' + that.data.serviceId);

console.log('device getBLEDeviceCharacteristics:', res.characteristics)

for (var i = 0; i < 5; i++) {

if (res.characteristics[i].uuid.indexOf("cd20") != -1) {

that.setData({

cd20: res.characteristics[i].uuid,

characteristics20: res.characteristics[i]

});

}

if (res.characteristics[i].uuid.indexOf("cd01") != -1) {

that.setData({

cd01: res.characteristics[i].uuid,

characteristics01: res.characteristics[i]

});

}

if (res.characteristics[i].uuid.indexOf("cd02") != -1) {

that.setData({

cd02: res.characteristics[i].uuid,

characteristics02: res.characteristics[i]

});

} if (res.characteristics[i].uuid.indexOf("cd03") != -1) {

that.setData({

cd03: res.characteristics[i].uuid,

characteristics03: res.characteristics[i]

});

}

if (res.characteristics[i].uuid.indexOf("cd04") != -1) {

that.setData({

cd04: res.characteristics[i].uuid,

characteristics04: res.characteristics[i]

});

}

}

console.log('cd01= ' + that.data.cd01 + 'cd02= ' + that.data.cd02 + 'cd03= ' + that.data.cd03 + 'cd04= ' + that.data.cd04 + 'cd20= ' + that.data.cd20);

/**

* 回调获取 设备发过来的数据

*/

wx.onBLECharacteristicValueChange(function (characteristic) {

console.log('characteristic value comed:', characteristic.value)

//{value: ArrayBuffer, deviceId: "D8:00:D2:4F:24:17", serviceId: "ba11f08c-5f14-0b0d-1080-007cbe238851-0x600000460240", characteristicId: "0000cd04-0000-1000-8000-00805f9b34fb-0x60800069fb80"}

/**

* 监听cd04cd04中的结果

*/

if (characteristic.characteristicId.indexOf("cd01") != -1) {

const result = characteristic.value;

const hex = that.buf2hex(result);

console.log(hex);

}

if (characteristic.characteristicId.indexOf("cd04") != -1) {

const result = characteristic.value;

const hex = that.buf2hex(result);

console.log(hex);

that.setData({ result: hex });

}

})

/**

* 顺序开发设备特征notifiy

*/

wx.notifyBLECharacteristicValueChanged({

deviceId: that.data.deviceId,

serviceId: that.data.serviceId,

characteristicId: that.data.cd01,

state: true,

success: function (res) {

// success

console.log('notifyBLECharacteristicValueChanged success', res);

},

fail: function (res) {

// fail

},

complete: function (res) {

// complete

}

})

wx.notifyBLECharacteristicValueChanged({

deviceId: that.data.deviceId,

serviceId: that.data.serviceId,

characteristicId: that.data.cd02,

state: true,

success: function (res) {

// success

console.log('notifyBLECharacteristicValueChanged success', res);

},

fail: function (res) {

// fail

},

complete: function (res) {

// complete

}

})

wx.notifyBLECharacteristicValueChanged({

deviceId: that.data.deviceId,

serviceId: that.data.serviceId,

characteristicId: that.data.cd03,

state: true,

success: function (res) {

// success

console.log('notifyBLECharacteristicValueChanged success', res);

},

fail: function (res) {

// fail

},

complete: function (res) {

// complete

}

})

wx.notifyBLECharacteristicValueChanged({

// 启用 notify 功能

// 这里的 deviceId 需要在上面的 getBluetoothDevices 或 onBluetoothDeviceFound 接口中获取

deviceId: that.data.deviceId,

serviceId: that.data.serviceId,

characteristicId: that.data.cd04,

state: true,

success: function (res) {

console.log('notifyBLECharacteristicValueChanged success', res)

}

})

}, fail: function (res) {

console.log(res);

}

})

}

, 1500);

}

})

},

fail: function (res) {

// fail

},

complete: function (res) {

// complete

}

})

},

/**

* 发送 数据到设备中

*/

bindViewTap: function () {

var that = this;

var hex = 'AA5504B10000B5'

var typedArray = new Uint8Array(hex.match(/[da-f]{2}/gi).map(function (h) {

return parseInt(h, 16)

}))

console.log(typedArray)

console.log([0xAA, 0x55, 0x04, 0xB1, 0x00, 0x00, 0xB5])

var buffer1 = typedArray.buffer

console.log(buffer1)

wx.writeBLECharacteristicValue({

deviceId: that.data.deviceId,

serviceId: that.data.serviceId,

characteristicId: that.data.cd20,

value: buffer1,

success: function (res) {

// success

console.log("success 指令发送成功");

console.log(res);

},

fail: function (res) {

// fail

console.log(res);

},

complete: function (res) {

// complete

}

})

},

/**

* ArrayBuffer 转换为 Hex

*/

buf2hex: function (buffer) { // buffer is an ArrayBuffer

return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join('');

}

})

5.效果展示

微信小程序--Ble蓝牙

发送校验指令。获取结果

微信小程序--Ble蓝牙

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持快网idc!

原文链接:http://blog.csdn.net/u010046908/article/details/68924339

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 微信小程序–Ble蓝牙 https://www.kuaiidc.com/118038.html

相关文章

猜你喜欢
发表评论
暂无评论