connectBle.js 6.0 KB

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