bluetooth.js 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. export default {
  2. // 发送开启脑电数据包指令
  3. sendOpen(deviceId, serviceId, Cid) {
  4. // 向蓝牙设备发送一个0x00的16进制数据
  5. let buffer = new ArrayBuffer(8)
  6. let dataView = new DataView(buffer)
  7. dataView.setUint8(0, '0xaa')
  8. dataView.setUint8(1, '0xcc')
  9. dataView.setUint8(2, '0x03')
  10. dataView.setUint8(3, '0x00')
  11. dataView.setUint8(4, '0x00')
  12. dataView.setUint8(5, '0x00')
  13. dataView.setUint8(6, '0xff')
  14. dataView.setUint8(7, '0xfd')
  15. // 向低功耗蓝牙设备特征值中写入二进制数据
  16. console.log(buffer)
  17. wx.writeBLECharacteristicValue({
  18. deviceId: deviceId,
  19. serviceId: serviceId,
  20. characteristicId: Cid,
  21. value: buffer,
  22. success: function (res) {
  23. console.log('开启脑电数据包成功')
  24. console.log(res)
  25. },
  26. fail: function (err) {
  27. console.log('开启脑电数据包失败')
  28. console.log(err)
  29. }
  30. })
  31. },
  32. // 发送开启教具脑控指令
  33. sendControl(deviceId, serviceId, Cid) {
  34. const that = this
  35. // 向蓝牙设备发送一个0x00的16进制数据
  36. let buffer = new ArrayBuffer(8)
  37. let dataView = new DataView(buffer)
  38. dataView.setUint8(0, '0xaa')
  39. dataView.setUint8(1, '0xcc')
  40. dataView.setUint8(2, '0x03')
  41. dataView.setUint8(3, '0x00')
  42. dataView.setUint8(4, '0x00')
  43. dataView.setUint8(5, '0x00')
  44. dataView.setUint8(6, '0x07')
  45. dataView.setUint8(7, '0xf5')
  46. // 向低功耗蓝牙设备特征值中写入二进制数据
  47. console.log(buffer)
  48. wx.writeBLECharacteristicValue({
  49. deviceId: deviceId,
  50. serviceId: serviceId,
  51. characteristicId: Cid,
  52. value: buffer,
  53. success: function (res) {
  54. console.log('开启教具脑控成功')
  55. // that.sendOpen()
  56. console.log(res)
  57. },
  58. fail: function (err) {
  59. console.log('开启教具脑控失败')
  60. console.log(err)
  61. }
  62. })
  63. },
  64. // 发送连接玩具指令
  65. sendConnect(index, deviceId, serviceId, Cid) {
  66. const that = this
  67. // 玩具对应指令数组
  68. let arr = ['0x01', '0x02', '0x03', '0x04', '0x05', '0x06', '0x07', '0x08', '0x09', '0x0a', '0x0b']
  69. let arr1 = [0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b]
  70. let CheckSum = ((0x03 + 0x00 + arr1[index] + 0x00 + 0x0a) ^ 0xFFFFFFFF) & 0xFF
  71. // 向蓝牙设备发送指令
  72. let buffer = new ArrayBuffer(8)
  73. let dataView = new DataView(buffer)
  74. dataView.setUint8(0, '0xaa')
  75. dataView.setUint8(1, '0xcc')
  76. dataView.setUint8(2, '0x03')
  77. dataView.setUint8(3, '0x00')
  78. dataView.setUint8(4, arr[index])
  79. dataView.setUint8(5, '0x00')
  80. dataView.setUint8(6, '0x0a')
  81. dataView.setUint8(7, '0xf1')
  82. // 向低功耗蓝牙设备特征值中写入二进制数据
  83. console.log(buffer)
  84. wx.writeBLECharacteristicValue({
  85. deviceId: deviceId,
  86. serviceId: serviceId,
  87. characteristicId: Cid,
  88. value: buffer,
  89. success: function (res) {
  90. console.log('发送连接玩具指令成功')
  91. wx.showLoading({
  92. title: '正在创建连接',
  93. })
  94. console.log(res)
  95. },
  96. fail: function (err) {
  97. console.log('发送连接玩具指令失败')
  98. wx.showModal({
  99. showCancel: false,
  100. title: '提示',
  101. content: '指令发送失败',
  102. })
  103. console.log(err)
  104. }
  105. })
  106. },
  107. //发送断开玩具的指令
  108. sendEnd(deviceId, serviceId, Cid) {
  109. //AA CC 03 00 00 00 09 F3
  110. let buffer = new ArrayBuffer(8)
  111. let dataView = new DataView(buffer)
  112. dataView.setUint8(0, '0xaa')
  113. dataView.setUint8(1, '0xcc')
  114. dataView.setUint8(2, '0x03')
  115. dataView.setUint8(3, '0x00')
  116. dataView.setUint8(4, '0x00')
  117. dataView.setUint8(5, '0x00')
  118. dataView.setUint8(6, '0x09')
  119. dataView.setUint8(7, '0xf3')
  120. // 向低功耗蓝牙设备特征值中写入二进制数据
  121. console.log(buffer)
  122. wx.writeBLECharacteristicValue({
  123. deviceId: deviceId,
  124. serviceId: serviceId,
  125. characteristicId: Cid,
  126. value: buffer,
  127. success: function (res) {
  128. console.log('断开玩具成功')
  129. // that.sendOpen()
  130. console.log(res)
  131. },
  132. fail: function (err) {
  133. console.log('断开玩具失败')
  134. console.log(err)
  135. }
  136. })
  137. },
  138. // 发送停止发送脑电数据包指令
  139. sendPause(deviceId, serviceId, Cid) {
  140. let that = this
  141. // 向蓝牙设备发送一个0x00的16进制数据
  142. let buffer = new ArrayBuffer(8)
  143. let dataView = new DataView(buffer)
  144. dataView.setUint8(0, '0xaa')
  145. dataView.setUint8(1, '0xcc')
  146. dataView.setUint8(2, '0x03')
  147. dataView.setUint8(3, '0x00')
  148. dataView.setUint8(4, '0x00')
  149. dataView.setUint8(5, '0x00')
  150. dataView.setUint8(6, '0x00')
  151. dataView.setUint8(7, '0xfc')
  152. // 向低功耗蓝牙设备特征值中写入二进制数据
  153. console.log(buffer)
  154. wx.writeBLECharacteristicValue({
  155. deviceId: deviceId,
  156. serviceId: serviceId,
  157. characteristicId: Cid,
  158. value: buffer,
  159. success: function (res) {
  160. console.log('停止数据发送成功')
  161. console.log(res)
  162. },
  163. fail: function (err) {
  164. console.log('停止数据发送失败')
  165. console.log(err)
  166. }
  167. })
  168. },
  169. // 通过字节码获取玩具
  170. connect_toy(hexStr) {
  171. let $toys = [
  172. {
  173. id: 1,
  174. hex: 'aadd0a0000',
  175. msg: "无连接设备",
  176. flag: false
  177. },
  178. {
  179. id: 1,
  180. hex: 'aadd0a0001',
  181. msg: "已连接到水柱音箱",
  182. flag: true
  183. },
  184. {
  185. id: 2,
  186. hex: 'aadd0a0002',
  187. msg: "已连接到喷雾恐龙(大)",
  188. flag: true
  189. },
  190. {
  191. id: 3,
  192. hex: 'aadd0a0003',
  193. msg: "已连接到喷雾恐龙(小)",
  194. flag: true
  195. },
  196. {
  197. id: 4,
  198. hex: 'aadd0a0004',
  199. msg: "已连接到轨道车",
  200. flag: true
  201. },
  202. {
  203. id: 5,
  204. hex: 'aadd0a0005',
  205. msg: "已连接到碰碰车",
  206. flag: true
  207. },
  208. {
  209. id: 6,
  210. hex: 'aadd0a0006',
  211. msg: "已连接到小车(大)",
  212. flag: true
  213. },
  214. {
  215. id: 7,
  216. hex: 'aadd0a0007',
  217. msg: "已连接到小车(中)",
  218. flag: true
  219. },
  220. {
  221. id: 8,
  222. hex: 'aadd0a0008',
  223. msg: "已连接到小车(小)",
  224. flag: true
  225. },
  226. {
  227. id: 9,
  228. hex: 'aadd0a0009',
  229. msg: '已连接到飞行器(大)',
  230. flag: true
  231. },
  232. {
  233. id: 10,
  234. hex: 'aadd0a000a',
  235. msg: "已连接到飞行器(小)",
  236. flag: true
  237. },
  238. {
  239. id: 11,
  240. hex: 'aadd0a000b',
  241. msg: "已连接到水母灯",
  242. flag: true
  243. },
  244. {
  245. id: 12,
  246. hex: 'aadd070000',
  247. msg: "无连接设备",
  248. flag: true
  249. },
  250. ]
  251. $toys.forEach(($val, $index) => {
  252. if (hexStr.substring(0, 10) == $val['hex']) {
  253. if ($val['flag']) {
  254. wx.hideLoading()
  255. wx.showToast({
  256. title: $val['title'],
  257. icon: 'success',
  258. duration: 1500
  259. })
  260. console.log($val['title'])
  261. } else {
  262. wx.hideLoading()
  263. wx.showToast({
  264. title: $val['title'],
  265. icon: 'nones',
  266. duration: 1500
  267. })
  268. }
  269. return $val['flag']
  270. }
  271. })
  272. },
  273. // 获取大包数据 进行绘制图表
  274. get_big_data(hex) {
  275. //当s1为 00时 数据有效
  276. let $s1 = hex.substr(8, 2)
  277. //专注度数据
  278. let $att = parseInt("0x" + hex.substr(12, 2))
  279. console.log('att', $att)
  280. //放松度数据
  281. let $med = parseInt("0x" + hex.substr(16, 2))
  282. console.log('$med', $med)
  283. //Delta数据
  284. let $delta_1 = hex.substr(hex.indexOf('0418') + 4, 2)
  285. let $delta_2 = hex.substr(hex.indexOf('0418') + 6, 2)
  286. let $delta_3 = hex.substr(hex.indexOf('0418') + 8, 2)
  287. let $delta = "0x" + $delta_1 << 16 | "0x" + $delta_2 << 8 | "0x" + $delta_3
  288. console.log('Delta', parseInt($delta, 16))
  289. //Theta数据
  290. let $theta_1 = hex.substr(hex.indexOf('0418') + 10, 2)
  291. let $theta_2 = hex.substr(hex.indexOf('0418') + 12, 2)
  292. let $theta_3 = hex.substr(hex.indexOf('0418') + 14, 2)
  293. let $theta = "0x" + $theta_1 << 16 | "0x" + $theta_2 << 8 | "0x" + $theta_3
  294. console.log('Theta', parseInt($theta, 16))
  295. //low_Alpha
  296. let $low_alpha_1 = hex.substr(hex.indexOf('0418') + 16, 2)
  297. let $low_alpha_2 = hex.substr(hex.indexOf('0418') + 18, 2)
  298. let $low_alpha_3 = hex.substr(hex.indexOf('0418') + 20, 2)
  299. let $low_alpha = "0x" + $low_alpha_1 << 16 | "0x" + $low_alpha_2 << 8 | "0x" + $low_alpha_3
  300. //high_Alpha
  301. let $high_alpha_1 = hex.substr(hex.indexOf('0418') + 22, 2)
  302. let $high_alpha_2 = hex.substr(hex.indexOf('0418') + 24, 2)
  303. let $high_alpha_3 = hex.substr(hex.indexOf('0418') + 26, 2)
  304. let $high_alpha = "0x" + $high_alpha_1 << 16 | "0x" + $high_alpha_2 << 8 | "0x" + $high_alpha_3
  305. let $alpha = ($high_alpha << 8) | $low_alpha
  306. console.log('Alpha', parseInt($alpha, 16))
  307. //low_beta
  308. let $low_beta_1 = hex.substr(hex.indexOf('0418') + 28, 2)
  309. let $low_beta_2 = hex.substr(hex.indexOf('0418') + 30, 2)
  310. let $low_beta_3 = hex.substr(hex.indexOf('0418') + 32, 2)
  311. let $low_beta = "0x" + $low_beta_1 << 16 | "0x" + $low_beta_2 << 8 | "0x" + $low_beta_3
  312. //high_beta
  313. let $high_beta_1 = hex.substr(hex.indexOf('0418') + 34, 2)
  314. let $high_beta_2 = hex.substr(hex.indexOf('0418') + 36, 2)
  315. let $high_beta_3 = hex.substr(hex.indexOf('0418') + 38, 2)
  316. let $high_beta = "0x" + $low_beta_1 << 16 | "0x" + $low_beta_2 << 8 | "0x" + $low_beta_3
  317. //Beta数据
  318. let $beta = ($high_beta << 8) | $low_beta
  319. console.log('Beta', parseInt($beta, 16))
  320. return {
  321. att: $att,
  322. med: $med,
  323. delta: $delta,
  324. theta: $theta,
  325. alpha: $alpha,
  326. beta: $beta
  327. }
  328. }
  329. }