小程序蓝牙通信例子
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

190 lines
4.5 KiB

  1. const app = getApp();
  2. var longUtil = require('./../../utils/long');
  3. var util = require('../../utils/util');
  4. import { BLE } from "./../../utils/btls/ble";
  5. const emitter = app.globalData.emitter
  6. Page({
  7. /**
  8. * 页面的初始数据
  9. */
  10. data: {
  11. baseUrlImg: app.globalData.baseUrlImg,
  12. bleStatus: false,
  13. respond: [],
  14. blueyes: false, //是否重发同步指令
  15. connectStatus: "",
  16. info:"未初始化蓝牙适配器",
  17. },
  18. btntest1(event){
  19. var that = this;
  20. this.startconnect()
  21. },
  22. btntest2(event){
  23. var that = this
  24. let userTelephone = "13028878230"
  25. let userPassword = "130288"
  26. let pwd = "12344321"
  27. let openLockType = 2
  28. this.openLock(userTelephone, userPassword, pwd, openLockType)
  29. },
  30. //获取输入框的数据
  31. getmsg(event){
  32. this.setData({
  33. sendmsg:event.detail.value
  34. })
  35. },
  36. btntest3(event){
  37. var that = this;
  38. this.closeblue()
  39. },
  40. startconnect() {
  41. //if(checkWechatVersion())
  42. {
  43. const ble = new BLE("yxwl01680000004895", emitter)
  44. app.globalData.ble = ble
  45. this.watchBLE()
  46. app.globalData.ble.init()
  47. }
  48. },
  49. watchBLE() {
  50. if (app.globalData.ble) {
  51. app.globalData.ble.listen(res => {
  52. if (res.type == 'connect') {
  53. if (res.data == "未打开适配器") {
  54. wx.showModal({
  55. title: "提示",
  56. content: "请检查手机蓝牙和定位功能是否打开?",
  57. showCancel: false,
  58. confirmText: "确定",
  59. });
  60. } else {
  61. this.setData({
  62. info: res.data
  63. })
  64. app.globalData.bleStatus = res.data
  65. }
  66. }
  67. })
  68. }
  69. },
  70. closeblue() {
  71. wx.showLoading({
  72. title: "正在停止...",
  73. });
  74. app.globalData.ble.close()
  75. setTimeout(() => {
  76. wx.hideLoading()
  77. }, 1000);
  78. app.globalData.bleStatus = false
  79. this.setData({
  80. bleStatus: false,
  81. respond: []
  82. })
  83. },
  84. openLock(userTelephone, userPassword, pwd, openLockType) {
  85. wx.showLoading({
  86. title: "正在发送...",
  87. });
  88. setTimeout(() => {
  89. wx.hideLoading()
  90. }, 1000);
  91. let cmd = 0x41
  92. let ut = util.stringToUint8Array(userTelephone)
  93. let up = util.stringToUint8Array(userPassword)
  94. let p = util.hexStringToBytesWithPadding(pwd, 10, 0xff)
  95. let length = 1+11+6+10+1
  96. let b = new Uint8Array(length)
  97. b[0] = cmd
  98. b.set(ut, 1)
  99. b.set(up, 12)
  100. b.set(p, 18)
  101. b[28] = openLockType
  102. console.log(b)
  103. app.globalData.ble.send(cmd, b, length)
  104. },
  105. })
  106. /**
  107. * 版本比较
  108. */
  109. function versionCompare (ver1, ver2) { //版本比较
  110. // console.log("ver1" + ver1 + 'ver2' + ver2);
  111. var version1pre = parseFloat(ver1)
  112. var version2pre = parseFloat(ver2)
  113. var version1next = parseInt(ver1.replace(version1pre + ".", ""))
  114. var version2next = parseInt(ver2.replace(version2pre + ".", ""))
  115. if (version1pre > version2pre)
  116. return true
  117. else if (version1pre < version2pre)
  118. return false
  119. else {
  120. if (version1next > version2next)
  121. return true
  122. else
  123. return false
  124. }
  125. }
  126. /**
  127. * 微信版本检测
  128. * Android从微信 6.5.7 开始支持iOS从微信 6.5.6 开始支持
  129. */
  130. function checkWechatVersion() {
  131. wx.getSystemInfo({
  132. success: function (res) {
  133. let si = res;
  134. if (si.platform == 'android' && versionCompare('6.5.7', si.version)) {
  135. console.log("当前安卓微信版本过低,请更新至最新版本体验");
  136. wx.showModal({
  137. title: '提示',
  138. content: '当前微信版本过低,请更新至最新版本体验',
  139. showCancel: false
  140. })
  141. return false;
  142. }else if (si.platform == 'ios' && versionCompare('6.5.6', si.version)) {
  143. console.log("当前苹果微信版本过低,请更新至最新版本体验");
  144. wx.showModal({
  145. title: '提示',
  146. content: '当前微信版本过低,请更新至最新版本体验',
  147. showCancel: false
  148. })
  149. return false;
  150. }
  151. return true;
  152. }
  153. })
  154. }