微信小程序实现蓝牙功能实例分享与详细教程

why 374 2024-09-05

这篇文章主要介绍了微信小程序 蓝牙的实现实例代码的相关资料,需要的朋友可以参考下

微信小程序 蓝牙的实现实例代码

1.简述

蓝牙适配器接口是基础库版本 1.1.0 开始支持。
iOS 微信客户端 6.5.6 版本开始支持,Android 客户端暂不支持
蓝牙总共增加了18个api接口。

2.Api分类

搜索类
连接类
通信类

3.API的具体使用

详细见官网:

1

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

4. 案例实现

4.1 搜索蓝牙设备

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

/**

 * 搜索设备界面

 */

Page({

 data: {

  logs: [],

  list:[],

 },

  onLoad: function () {

  console.log('onLoad')

var that = this;

// const SDKVersion = wx.getSystemInfoSync().SDKVersion || '1.0.0'

// const [MAJOR, MINOR, PATCH] = SDKVersion.split('.').map(Number)

// console.log(SDKVersion);

// console.log(MAJOR);

// console.log(MINOR);

// console.log(PATCH);

 

// const canIUse = apiName => {

//  if (apiName === 'showModal.cancel') {

//   return MAJOR >= 1 && MINOR >= 1

//  }

//  return true

// }

 

// wx.showModal({

//  success: function(res) {

//   if (canIUse('showModal.cancel')) {

//    console.log(res.cancel)

//   }

//  }

// })

   //获取适配器

   wx.openBluetoothAdapter({

   success: function(res){

    // success

    console.log("-----success----------");

     console.log(res);

     //开始搜索

    wx.startBluetoothDevicesDiscovery({

 services: [],

 success: function(res){

  // success

   console.log("-----startBluetoothDevicesDiscovery--success----------");

   console.log(res);

 },

 fail: function(res) {

  // fail

   console.log(res);

 },

 complete: function(res) {

  // complete

   console.log(res);

 }

})

 

 

   },

   fail: function(res) {

     console.log("-----fail----------");

    // fail

     console.log(res);

   },

   complete: function(res) {

    // complete

     console.log("-----complete----------");

     console.log(res);

   }

  })

 

   wx.getBluetoothDevices({

    success: function(res){

     // success

     //{devices: Array[11], errMsg: "getBluetoothDevices:ok"}

     console.log("getBluetoothDevices");

     console.log(res);

     that.setData({

     list:res.devices

     });

     console.log(that.data.list);

    },

    fail: function(res) {

     // fail

    },

    complete: function(res) {

     // complete

    }

   })

 

 },

 onShow:function(){

 

 

 },

  //点击事件处理

 bindViewTap: function(e) {

   console.log(e.currentTarget.dataset.title);

   console.log(e.currentTarget.dataset.name);

   console.log(e.currentTarget.dataset.advertisData);

 

  var title = e.currentTarget.dataset.title;

  var name = e.currentTarget.dataset.name;

   wx.redirectTo({

    url: '../conn/conn?deviceId='+title+'&name='+name,

    success: function(res){

     // success

    },

    fail: function(res) {

     // fail

    },

    complete: function(res) {

     // complete

    }

   })

 },

})

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(&#39;cd01= &#39; + that.data.cd01 + &#39;cd02= &#39; + that.data.cd02 + &#39;cd03= &#39; + that.data.cd03 + &#39;cd04= &#39; + that.data.cd04 + &#39;cd20= &#39; + that.data.cd20);

                  /**

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

                   */

                  wx.onBLECharacteristicValueChange(function (characteristic) {

                    console.log(&#39;characteristic value comed:&#39;, 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(&#39;notifyBLECharacteristicValueChanged success&#39;, 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(&#39;notifyBLECharacteristicValueChanged success&#39;, 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(&#39;notifyBLECharacteristicValueChanged success&#39;, 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(&#39;notifyBLECharacteristicValueChanged success&#39;, res)

                    }

                  })

 

                }, fail: function (res) {

                  console.log(res);

                }

              })

            }

              , 1500);

          }

        })

      },

      fail: function (res) {

        // fail

      },

      complete: function (res) {

        // complete

      }

    })

  },

 

  /**

   * 发送 数据到设备中

   */

  bindViewTap: function () {

    var that = this;

    var hex = &#39;AA5504B10000B5&#39;

    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 => (&#39;00&#39; + x.toString(16)).slice(-2)).join(&#39;&#39;);

  }

})

5.效果展示

image.png

发送校验指令。获取结果

image.png



版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微信小程序注册程序教程详细解析与步骤说明
下一篇:微信小程序 textarea 多行输入框解读与分析实例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~