diff --git a/bluetooth_demo_F01/pages/index/index.js b/bluetooth_demo_F01/pages/index/index.js index 958ba19..86fa80d 100644 --- a/bluetooth_demo_F01/pages/index/index.js +++ b/bluetooth_demo_F01/pages/index/index.js @@ -1,321 +1,325 @@ const util = require("../../utils/util"); const { - inArray, - ab2hex + inArray, + ab2hex } = util const plugin = requirePlugin("sdkPlugin").AiLink; Page({ - data: { - devices: [], - connected: false, - cmd: '', - name: '', - weight: "", - height: "", - text: "", - imp: "", - uuid1: "", - uuid2: "", - uuid3: "", - deviceId: null, - }, - onLoad: function() {}, - // 初始化蓝牙模块 - openBluetoothAdapter() { - wx.openBluetoothAdapter({ - success: (res) => { - console.log('openBluetoothAdapter success', res) - wx.showToast({ - title: '蓝牙连接中', - icon: "none" - }) - this.startBluetoothDevicesDiscovery() - }, - fail: (res) => { - if (res.errCode === 10001) { - wx.showToast({ - title: '请打开蓝牙', - icon: "none" - }) - // 监听本机蓝牙状态变化的事件 - wx.onBluetoothAdapterStateChange((res) => { - console.log('onBluetoothAdapterStateChange', res) - if (res.available) { - this.startBluetoothDevicesDiscovery() - } - }) - } - } - }) - }, + data: { + devices: [], + connected: false, + cmd: '', + name: '', + weight: "", + height: "", + text: "", + imp: "", + uuid1: "", + uuid2: "", + uuid3: "", + deviceId: null, + }, + onLoad: function() {}, + // 初始化蓝牙模块 + openBluetoothAdapter() { + wx.openBluetoothAdapter({ + success: (res) => { + console.log('openBluetoothAdapter success', res) + wx.showToast({ + title: '蓝牙连接中', + icon: "none" + }) + this.startBluetoothDevicesDiscovery() + }, + fail: (res) => { + if (res.errCode === 10001) { + wx.showToast({ + title: '请打开蓝牙', + icon: "none" + }) + // 监听本机蓝牙状态变化的事件 + wx.onBluetoothAdapterStateChange((res) => { + console.log('onBluetoothAdapterStateChange', res) + if (res.available) { + this.startBluetoothDevicesDiscovery() + } + }) + } + } + }) + }, - // 开始搜寻附近的蓝牙外围设备 - startBluetoothDevicesDiscovery() { - if (this._discoveryStarted) { - return - } - this._discoveryStarted = true - wx.startBluetoothDevicesDiscovery({ - allowDuplicatesKey: true, - interval: 1000, //上报设备的间隔 - services: [ - "FFE0", - ], - success: (res) => { - console.log('startBluetoothDevicesDiscovery success', res) - this.onBluetoothDeviceFound() - }, - }) - }, - // 停止搜寻附近的蓝牙外围设备 - stopBluetoothDevicesDiscovery() { - wx.stopBluetoothDevicesDiscovery() - }, + // 开始搜寻附近的蓝牙外围设备 + startBluetoothDevicesDiscovery() { + if (this._discoveryStarted) { + return + } + this._discoveryStarted = true + wx.startBluetoothDevicesDiscovery({ + allowDuplicatesKey: true, + interval: 1000, //上报设备的间隔 + services: [ + "FFE0", + ], + success: (res) => { + console.log('startBluetoothDevicesDiscovery success', res) + this.onBluetoothDeviceFound() + }, + }) + }, + // 停止搜寻附近的蓝牙外围设备 + stopBluetoothDevicesDiscovery() { + wx.stopBluetoothDevicesDiscovery() + }, - // 找到新设备的事件 - onBluetoothDeviceFound() { - wx.onBluetoothDeviceFound((res) => { - res.devices.forEach(device => { - if (!device.name && !device.localName) { - return - } - if (device.name.indexOf('AiLink_') != -1) { - wx.stopBluetoothDevicesDiscovery() //搜索到名称为“AiLink_”的蓝牙后,停止搜寻附近的蓝牙 - const foundDevices = this.data.devices - const idx = inArray(foundDevices, 'deviceId', device.deviceId) - const data = {} - let buff = device.advertisData.slice(-6) - device.mac = new Uint8Array(buff) // 保存广播数据中的mac地址,这是由于iOS不直接返回mac地址 - let tempMac = Array.from(device.mac) - tempMac.reverse() - device.macAddr = ab2hex(tempMac, ':').toUpperCase() - if (idx === -1) { - data[`devices[${foundDevices.length}]`] = device - } else { - data[`devices[${idx}]`] = device - } - this.setData(data) - } - }) - }) - }, - // 连接低功耗蓝牙设备 - createBLEConnection(e) { - wx.showLoading({ - title: '连接中', - }) - const ds = e.currentTarget.dataset - const index = ds.index - this._device = this.data.devices[index] - const deviceId = ds.deviceId - const name = ds.name - this.mac = ds.mac - wx.createBLEConnection({ - deviceId, - success: (res) => { - this.setData({ - connected: true, - name, - deviceId, - }) - console.log("createBLEConnection:success") - this.onBLEConnectionStateChange() - this.getBLEDeviceServices(deviceId) - }, - fail: res => { - wx.hideLoading() - wx.showToast({ - title: '连接失败', - icon: 'none' - }) - } - }) - }, - //监听蓝牙连接状态 - onBLEConnectionStateChange() { - wx.onBLEConnectionStateChange((res) => { - if (!res.connected) { - setTimeout(() => { - wx.showToast({ - title: '连接已断开', - icon: 'none' - }) - }, 500) - this.setData({ - connected: false, - devices: [], - weight: "", - height: "", - text: "", - imp: "" - }) - } - }) - }, + // 找到新设备的事件 + onBluetoothDeviceFound() { + wx.onBluetoothDeviceFound((res) => { + res.devices.forEach(device => { + if (!device.name && !device.localName) { + return + } + console.log("name", device.name) + if (device.name.indexOf('AiLink_') != -1 || device.name.toLowerCase().indexOf( + 'pcf01') != -1) { + wx.stopBluetoothDevicesDiscovery() //搜索到名称为“AiLink_”的蓝牙后,停止搜寻附近的蓝牙 + const foundDevices = this.data.devices + const idx = inArray(foundDevices, 'deviceId', device.deviceId) + const data = {} + let buff = device.advertisData.slice(-6) + device.mac = new Uint8Array(buff) // 保存广播数据中的mac地址,这是由于iOS不直接返回mac地址 + let tempMac = Array.from(device.mac) + tempMac.reverse() + device.macAddr = ab2hex(tempMac, ':').toUpperCase() + if (idx === -1) { + data[`devices[${foundDevices.length}]`] = device + } else { + data[`devices[${idx}]`] = device + } + this.setData(data) + } + }) + }) + }, + // 连接低功耗蓝牙设备 + createBLEConnection(e) { + wx.showLoading({ + title: '连接中', + }) + const ds = e.currentTarget.dataset + const index = ds.index + this._device = this.data.devices[index] + const deviceId = ds.deviceId + const name = ds.name + this.mac = ds.mac + wx.createBLEConnection({ + deviceId, + success: (res) => { + this.setData({ + connected: true, + name, + deviceId, + }) + console.log("createBLEConnection:success") + this.onBLEConnectionStateChange() + this.getBLEDeviceServices(deviceId) + }, + fail: res => { + wx.hideLoading() + wx.showToast({ + title: '连接失败', + icon: 'none' + }) + } + }) + }, + //监听蓝牙连接状态 + onBLEConnectionStateChange() { + wx.onBLEConnectionStateChange((res) => { + if (!res.connected) { + setTimeout(() => { + wx.showToast({ + title: '连接已断开', + icon: 'none' + }) + }, 500) + this.setData({ + connected: false, + devices: [], + weight: "", + height: "", + text: "", + imp: "" + }) + } + }) + }, - // 获取蓝牙设备的 serviceId - getBLEDeviceServices(deviceId) { - wx.getBLEDeviceServices({ - deviceId, - success: (res) => { - for (let i = 0; i < res.services.length; i++) { - if (res.services[i].isPrimary && res.services[i].uuid.indexOf('FFE0') > -1) { - wx.showLoading({ - title: '获取设备的UUID成功', - }) - this.getBLEDeviceCharacteristics(deviceId, res.services[i].uuid) - return - } - } - } - }) - }, + // 获取蓝牙设备的 serviceId + getBLEDeviceServices(deviceId) { + wx.getBLEDeviceServices({ + deviceId, + success: (res) => { + for (let i = 0; i < res.services.length; i++) { + if (res.services[i].isPrimary && res.services[i].uuid.indexOf('FFE0') > -1) { + wx.showLoading({ + title: '获取设备的UUID成功', + }) + this.getBLEDeviceCharacteristics(deviceId, res.services[i].uuid) + return + } + } + } + }) + }, - // 获取蓝牙设备某个服务中所有特征值(characteristic) - /** - * read: true读,write: true写,notify: true广播 - */ - getBLEDeviceCharacteristics(deviceId, serviceId) { - let that = this - that._deviceId = deviceId - that._serviceId = serviceId - that._device.serviceId = serviceId - wx.hideLoading() - wx.getBLEDeviceCharacteristics({ - deviceId, - serviceId, - success: (res) => { - console.log('getBLEDeviceCharacteristics success', res.characteristics) - for (let i = 0; i < res.characteristics.length; i++) { - let item = res.characteristics[i]; - if (item.uuid.indexOf('0000FFE1') != -1) { - that.data.uuid1 = item.uuid //下发数据 - } else if (item.uuid.indexOf('0000FFE2') != -1) { - that.data.uuid2 = item.uuid //监听数据 - } else if (item.uuid.indexOf('0000FFE3') != -1) { - that.data.uuid3 = item.uuid //写入设置 - } - } + // 获取蓝牙设备某个服务中所有特征值(characteristic) + /** + * read: true读,write: true写,notify: true广播 + */ + getBLEDeviceCharacteristics(deviceId, serviceId) { + let that = this + that._deviceId = deviceId + that._serviceId = serviceId + that._device.serviceId = serviceId + wx.hideLoading() + wx.getBLEDeviceCharacteristics({ + deviceId, + serviceId, + success: (res) => { + console.log('getBLEDeviceCharacteristics success', res.characteristics) + for (let i = 0; i < res.characteristics.length; i++) { + let item = res.characteristics[i]; + if (item.uuid.indexOf('0000FFE1') != -1) { + that.data.uuid1 = item.uuid //下发数据 + } else if (item.uuid.indexOf('0000FFE2') != -1) { + that.data.uuid2 = item.uuid //监听数据 + } else if (item.uuid.indexOf('0000FFE3') != -1) { + that.data.uuid3 = item.uuid //写入设置 + } + } - // 打开监听 - wx.notifyBLECharacteristicValueChange({ - deviceId, - serviceId, - characteristicId: that.data.uuid2, - state: true, - }) - wx.notifyBLECharacteristicValueChange({ - deviceId, - serviceId, - characteristicId: that.data.uuid3, - state: true, - }) - // 初始化插件 - plugin.initPlugin(res.characteristics, that._device) - wx.onBLECharacteristicValueChange((characteristic) => { - let bleData = plugin.parseBleData(characteristic.value) - let dw1 = "kg" - if (bleData.status == 0) { - // 发送 男,22岁,185 - let A = 22 - let H = 185 - let sex = "0x01" - let age = "0x" + A.toString(16) - let height = "0x" + H.toString(16) - let arr = [0x01, parseInt(sex), parseInt(age), parseInt(height),0x00] - plugin.sendDataOfA7(arr) - console.log("握手成功", arr) - } else if (bleData.status == 1) { - let payload = ab2hex(bleData.data, '') - let type = payload.substring(0, 2) - let typeInfo = payload.substring(4, 6) - console.log("payload", payload) - if (type == "10" || type == "40") { //体脂模式 - let data = parseInt(payload.substring(6, 12), 16) - let num = payload.substring(12, 13) - let dw = payload.substring(13, 14) - if (dw == "1") { - dw1 = "斤" - } - if (num == "1") { - data = data / 10 - } - if (num == "2") { - data = data / 100 - } - if (num == "3") { - data = data / 1000 - } - if (typeInfo == "01") { - that.setData({ - weight: "实时体重是:" + data + dw1 - }) - } - if (typeInfo == "02") { - that.setData({ - weight: "稳定体重是:" + data + dw1 - }) - } - } - if (type == "14" || type == "41") { //身高模式 - let height = parseInt(payload.substring(4, 8), 16) - that.setData({ - height: "身高是:" + height - }) - } - if (type == "11") { //阻抗模式 - if (typeInfo == "03" || typeInfo == "04") { - let imp = parseInt(payload.substring(8, 12), 16) - console.log("imp", payload, imp) - that.setData({ - imp: "阻抗值:" + imp - }) - } - } - } - }) - }, - fail(res) { - console.error('getBLEDeviceCharacteristics', res) - } - }) - }, + // 打开监听 + wx.notifyBLECharacteristicValueChange({ + deviceId, + serviceId, + characteristicId: that.data.uuid2, + state: true, + }) + wx.notifyBLECharacteristicValueChange({ + deviceId, + serviceId, + characteristicId: that.data.uuid3, + state: true, + }) + // 初始化插件 + plugin.initPlugin(res.characteristics, that._device) + wx.onBLECharacteristicValueChange((characteristic) => { + let bleData = plugin.parseBleData(characteristic.value) + let dw1 = "kg" + if (bleData.status == 0) { + // 发送 男,22岁,185 + let A = 22 + let H = 185 + let sex = "0x01" + let age = "0x" + A.toString(16) + let height = "0x" + H.toString(16) + let arr = [0x01, parseInt(sex), parseInt(age), parseInt(height), + 0x00 + ] + plugin.sendDataOfA7(arr) + console.log("握手成功", arr) + } else if (bleData.status == 1) { + let payload = ab2hex(bleData.data, '') + let type = payload.substring(0, 2) + let typeInfo = payload.substring(4, 6) + console.log("payload", payload) + if (type == "10" || type == "40") { //体脂模式 + let data = parseInt(payload.substring(6, 12), 16) + let num = payload.substring(12, 13) + let dw = payload.substring(13, 14) + if (dw == "1") { + dw1 = "斤" + } + if (num == "1") { + data = data / 10 + } + if (num == "2") { + data = data / 100 + } + if (num == "3") { + data = data / 1000 + } + if (typeInfo == "01") { + that.setData({ + weight: "实时体重是:" + data + dw1 + }) + } + if (typeInfo == "02") { + that.setData({ + weight: "稳定体重是:" + data + dw1 + }) + } + } + if (type == "14" || type == "41") { //身高模式 + let height = parseInt(payload.substring(4, 8), 16) + that.setData({ + height: "身高是:" + height + }) + } + if (type == "11") { //阻抗模式 + if (typeInfo == "03" || typeInfo == "04") { + let imp = parseInt(payload.substring(8, 12), 16) + console.log("imp", payload, imp) + that.setData({ + imp: "阻抗值:" + imp + }) + } + } + } + }) + }, + fail(res) { + console.error('getBLEDeviceCharacteristics', res) + } + }) + }, - /** - * 断开蓝牙模块 - */ - closeBluetoothAdapter() { - wx.closeBluetoothAdapter() - this._discoveryStarted = false - wx.showToast({ - title: '断开蓝牙模块', - icon: 'none' - }) - this.setData({ - devices: [], - weight: "", - height: "", - text: "", - imp: "" - }) - }, - // 断开与低功耗蓝牙设备的连接 - closeBLEConnection() { - wx.closeBLEConnection({ - deviceId: this._deviceId - }) - wx.showToast({ - title: '断开蓝牙连接', - icon: 'none' - }) - this.setData({ - connected: false, - devices: [], - text: "", - height: "", - weight: "", - imp: "" - }) - }, + /** + * 断开蓝牙模块 + */ + closeBluetoothAdapter() { + wx.closeBluetoothAdapter() + this._discoveryStarted = false + wx.showToast({ + title: '断开蓝牙模块', + icon: 'none' + }) + this.setData({ + devices: [], + weight: "", + height: "", + text: "", + imp: "" + }) + }, + // 断开与低功耗蓝牙设备的连接 + closeBLEConnection() { + wx.closeBLEConnection({ + deviceId: this._deviceId + }) + wx.showToast({ + title: '断开蓝牙连接', + icon: 'none' + }) + this.setData({ + connected: false, + devices: [], + text: "", + height: "", + weight: "", + imp: "" + }) + }, -}); +}); \ No newline at end of file diff --git a/bluetooth_demo_J01.zip b/bluetooth_demo_J01.zip new file mode 100644 index 0000000..c753a7a Binary files /dev/null and b/bluetooth_demo_J01.zip differ diff --git a/bluetooth_demo_L01.zip b/bluetooth_demo_L01.zip new file mode 100644 index 0000000..fec28f5 Binary files /dev/null and b/bluetooth_demo_L01.zip differ diff --git a/bluetooth_demo_L08.zip b/bluetooth_demo_L08.zip new file mode 100644 index 0000000..1a7bce6 Binary files /dev/null and b/bluetooth_demo_L08.zip differ diff --git a/bluetooth_demo_L08/pages/index/index.js b/bluetooth_demo_L08/pages/index/index.js index f14c618..c06b6e9 100644 --- a/bluetooth_demo_L08/pages/index/index.js +++ b/bluetooth_demo_L08/pages/index/index.js @@ -291,11 +291,11 @@ Page({ }) } } - if (typeInfo == "05") { - let mcu = payload.substring(4, 6) - let imp = parseInt(payload.substring(6, 14), 16) - console.log("阻抗类型:", payload, type, typeInfo, mcu,imp) //阻抗模式 - } + // if (typeInfo == "05") { + // let mcu = payload.substring(4, 6) + // let imp = parseInt(payload.substring(6, 14), 16) + // console.log("阻抗类型:", payload, type, typeInfo, mcu,imp) //阻抗模式 + // } } if (type == "0f") { that.setData({ diff --git a/bluetooth_demo_L08_NSDK.zip b/bluetooth_demo_L08_NSDK.zip deleted file mode 100644 index 10df2aa..0000000 Binary files a/bluetooth_demo_L08_NSDK.zip and /dev/null differ