connectBle.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. // pages/connectBle/connectBle.js
  2. const btHelper = require('../../devices/bt_helper');
  3. const toastUtil = require('../../utils/toast_util');
  4. import routeUtil from '../../utils/route_util'
  5. import route_constant from '../../utils/route_constant.js'
  6. Page({
  7. /**
  8. * 页面的初始数据
  9. */
  10. data: {
  11. connectDevice: {},
  12. nvabarData: {
  13. showCapsule: 1, //是否显示左上角图标 1表示显示 0表示不显示
  14. title: '连接设备', //导航栏 中间的标题
  15. callback() {
  16. wx.navigateBack({
  17. delta: 1,
  18. })
  19. }
  20. },
  21. connectStatus: 0,
  22. searchTips: "正在搜索设备,请保持开机状态…",
  23. subTips: "确认手机蓝牙已打开",
  24. buttonTips: "正在搜索设备"
  25. },
  26. setStatus(bleType) {
  27. var searchTips = ""
  28. var subTips = ""
  29. var buttonTips = ""
  30. let name = this.data.connectDevice.name;
  31. console.log("搜索状态", bleType)
  32. switch (bleType) {
  33. case 0:
  34. // 搜索中
  35. searchTips = "正在搜索设备,请保持开机状态…"
  36. subTips = "确认手机蓝牙已打开"
  37. buttonTips = "正在搜索设备"
  38. break;
  39. case 1:
  40. // 搜索失败
  41. searchTips = "未搜索到" + name
  42. subTips = "请检查设备是否被其他手机连接,或在手机蓝牙忽略掉原来的蓝牙连接重新连接。"
  43. buttonTips = "重新搜索"
  44. break;
  45. case 2:
  46. // 搜索到
  47. searchTips = "搜索到" + name
  48. subTips = ""
  49. buttonTips = "连接"
  50. break;
  51. case 3:
  52. // 连接成功
  53. searchTips = "搜索到" + name
  54. subTips = ""
  55. buttonTips = "连接成功"
  56. break;
  57. case 4:
  58. // 连接失败
  59. searchTips = "未连接到" + name
  60. subTips = "请检查设备是否被其他手机连接,或在手机蓝牙忽略掉原来的蓝牙连接重新连接。"
  61. buttonTips = "重新搜索"
  62. break;
  63. }
  64. this.setData({
  65. searchTips: searchTips,
  66. subTips: subTips,
  67. buttonTips: buttonTips,
  68. connectStatus: bleType
  69. })
  70. },
  71. async connectDeviceTap() {
  72. let _this = this
  73. console.log("点击搜索状态", this.data.connectStatus)
  74. switch (this.data.connectStatus) {
  75. case 0:
  76. // 搜索中
  77. break;
  78. case 1:
  79. case 4:
  80. // 搜索失败,点击重新搜索
  81. _this.startSearch()
  82. break;
  83. case 2:
  84. // 搜索到
  85. btHelper.connect(element, function (data) {
  86. // console.log("连接成功", data)
  87. toastUtil.show("开始连接设备")
  88. _this.setStatus(data ? 3 : 4)
  89. // 蓝牙模式
  90. _this.data.connectDevice.connectType = 1
  91. getApp().globalData.device = _this.data.connectDevice
  92. setTimeout(() => {
  93. wx.reLaunch({
  94. url: '/pages/index/index', // 替换为首页的路径
  95. });
  96. }, 500);
  97. })
  98. break;
  99. case 3:
  100. // 连接成功
  101. break;
  102. }
  103. }, getConnectedDevices: async function () {
  104. let _this = this
  105. const connectedDevices = await btHelper.getConnectedDevices()
  106. console.log("全部设备", connectedDevices)
  107. if (connectedDevices.length > 0) {
  108. connectedDevices.forEach(element => {
  109. console.log('已连接的蓝牙设备:', element);
  110. _this.setStatus(3)
  111. });
  112. } else {
  113. }
  114. return connectedDevices;
  115. }, async startSearch() {
  116. this.setStatus(0)
  117. let _this = this
  118. btHelper.search(async function () {
  119. const connectedDevices = await _this.getConnectedDevices()
  120. if (connectedDevices.length == 0) {
  121. _this.setStatus(1)
  122. }
  123. })
  124. },
  125. didFindDevice() {
  126. let _this = this
  127. btHelper.findDevices(function (devices) {
  128. devices.forEach(element => {
  129. console.log('发现设备:', element.deviceId, element.uuid, element.mac);
  130. let deviceId = element.deviceId ?? ""
  131. // todo
  132. if (deviceId.includes("D8:24:07:89:31") ||
  133. element.deviceId.includes("F5:A5:43:70:C8:F1") ||
  134. element.deviceId.includes("D1:4D:DA:76:42:50")
  135. ) {
  136. btHelper.stopSearch()
  137. _this.setStatus(2)
  138. }
  139. });
  140. })
  141. },
  142. /**
  143. * 生命周期函数--监听页面加载
  144. */
  145. onLoad(options) {
  146. let _this = this
  147. btHelper.initBluetooth(function (adapterState, hasPermission) {
  148. console.log("蓝牙状态", adapterState, hasPermission)
  149. if (adapterState && hasPermission) {
  150. _this.setStatus(0)
  151. _this.startSearch()
  152. } else {
  153. _this.setStatus(1)
  154. }
  155. })
  156. _this.didFindDevice()
  157. let json = JSON.parse(options.param)
  158. console.log(json)
  159. let device = json
  160. this.setData({
  161. connectDevice: device
  162. })
  163. },
  164. /**
  165. * 生命周期函数--监听页面初次渲染完成
  166. */
  167. onReady() {
  168. },
  169. /**
  170. * 生命周期函数--监听页面显示
  171. */
  172. onShow() {
  173. },
  174. /**
  175. * 生命周期函数--监听页面隐藏
  176. */
  177. onHide() {
  178. },
  179. /**
  180. * 生命周期函数--监听页面卸载
  181. */
  182. onUnload() {
  183. // todo 要关闭吗
  184. btHelper.closeBle()
  185. },
  186. /**
  187. * 页面相关事件处理函数--监听用户下拉动作
  188. */
  189. onPullDownRefresh() {
  190. },
  191. /**
  192. * 页面上拉触底事件的处理函数
  193. */
  194. onReachBottom() {
  195. },
  196. /**
  197. * 用户点击右上角分享
  198. */
  199. onShareAppMessage() {
  200. }
  201. })