diff --git a/app.json b/app.json
index 2c54782..0e776d4 100644
--- a/app.json
+++ b/app.json
@@ -1,30 +1,30 @@
{
- "pages": [
- "pages/index/index",
- "pages/PCD01PRO/index",
- "pages/PCH0809/index",
- "pages/PCF01B/index",
- "pages/PCF01proFRK/index",
- "pages/PCF08/index",
- "pages/PCJ02/index",
- "pages/G01/index",
- "pages/FB03/index",
- "pages/L08/index"
-
- ],
- "window": {
- "navigationBarBackgroundColor": "#0082FE",
- "navigationBarTextStyle": "white",
- "navigationBarTitleText": "蓝牙连接Demo",
- "backgroundColor": "#eeeeee",
- "backgroundTextStyle": "light"
- },
- "plugins": {
- "sdkPlugin": {
- "version": "2.1.0",
- "provider": "wx17e93aad47cdae1a"
- }
- },
- "style": "v2",
- "sitemapLocation": "sitemap.json"
+ "pages": [
+ "pages/index/index",
+ "pages/PCD01PRO/index",
+ "pages/H01PRO/index",
+ "pages/PCH0809/index",
+ "pages/PCF01B/index",
+ "pages/PCF01proFRK/index",
+ "pages/PCF08/index",
+ "pages/L08/index",
+ "pages/G01/index",
+ "pages/FB03/index",
+ "pages/PCJ02/index"
+ ],
+ "window": {
+ "navigationBarBackgroundColor": "#0082FE",
+ "navigationBarTextStyle": "white",
+ "navigationBarTitleText": "蓝牙连接Demo",
+ "backgroundColor": "#eeeeee",
+ "backgroundTextStyle": "light"
+ },
+ "plugins": {
+ "sdkPlugin": {
+ "version": "2.1.0",
+ "provider": "wx17e93aad47cdae1a"
+ }
+ },
+ "style": "v2",
+ "sitemapLocation": "sitemap.json"
}
diff --git a/pages/H01PRO/index.js b/pages/H01PRO/index.js
new file mode 100644
index 0000000..fd3c3ed
--- /dev/null
+++ b/pages/H01PRO/index.js
@@ -0,0 +1,275 @@
+const util = require("../../utils/util");
+const {
+ inArray,
+ ab2hex
+} = util
+Page({
+ data: {
+ devices: [],
+ connected: false,
+ text: '',
+ name: '',
+ weight: "",
+ height: "",
+ imp: "",
+ readId: "",
+ writeId: "",
+ notifyId: "",
+ 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: 500, //上报设备的间隔
+ 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('My') != -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)
+ 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].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)
+ that.setData({
+ text: "请站在秤上,开始测量"
+ })
+ for (let i = 0; i < res.characteristics.length; i++) {
+ let item = res.characteristics[i];
+ if (item.uuid.indexOf("FFE1") != -1) {
+ if (item.properties.notify == true) {
+ that.data.notifyId = item.uuid
+ }
+ if (item.properties.read) {
+ that.data.readId = item.uuid
+ }
+ if (item.properties.write == true) {
+ that.data.writeId = item.uuid
+ }
+ }
+ }
+
+ // 打开监听
+ wx.notifyBLECharacteristicValueChange({
+ deviceId,
+ serviceId,
+ characteristicId: that.data.notifyId,
+ state: true,
+ })
+ wx.notifyBLECharacteristicValueChange({
+ deviceId,
+ serviceId,
+ characteristicId: that.data.writeId,
+ state: true,
+ })
+
+ wx.onBLECharacteristicValueChange((res) => {
+ let value = ab2hex(res.value, '');
+ let weight = parseInt(value.substring(4, 8), 16) / 100
+ let height = parseInt(value.substring(30, 34), 16) / 10
+ let imp0 = value.substring(28, 30) + value.substring(34, 36)
+ that.setData({
+ weight: "您的体重是:" + weight + 'kg'
+ })
+ that.setData({
+ height: "您的身高是:" + height + 'kg'
+ })
+ that.setData({
+ imp: "阻抗:" + parseInt(imp0, 16)
+ })
+ that.setData({
+ text: "测量结束"
+ })
+ })
+ },
+ fail(res) {
+ console.error('getBLEDeviceCharacteristics', res)
+ }
+ })
+ },
+
+ /**
+ * 断开蓝牙模块
+ */
+ closeBluetoothAdapter() {
+ wx.closeBluetoothAdapter()
+ this._discoveryStarted = false
+ wx.showToast({
+ title: '断开蓝牙模块',
+ icon: 'none'
+ })
+ this.setData({
+ devices: [],
+ weight: "",
+ height: "",
+ imp: ""
+ })
+ },
+ // 断开与低功耗蓝牙设备的连接
+ closeBLEConnection() {
+ wx.closeBLEConnection({
+ deviceId: this._deviceId
+ })
+ wx.showToast({
+ title: '断开蓝牙连接',
+ icon: 'none'
+ })
+ this.setData({
+ connected: false,
+ devices: [],
+ height: "",
+ weight: "",
+ imp: ""
+ })
+ },
+
+});
diff --git a/pages/H01PRO/index.json b/pages/H01PRO/index.json
new file mode 100644
index 0000000..b55b5a2
--- /dev/null
+++ b/pages/H01PRO/index.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {
+ }
+}
\ No newline at end of file
diff --git a/pages/H01PRO/index.wxml b/pages/H01PRO/index.wxml
new file mode 100644
index 0000000..105d823
--- /dev/null
+++ b/pages/H01PRO/index.wxml
@@ -0,0 +1,37 @@
+
+ module.exports.max = function(n1, n2) {
+ return Math.max(n1, n2)
+ }
+ module.exports.len = function(arr) {
+ arr = arr || []
+ return arr.length
+ }
+
+
+
+
+
+ {{weight}}
+ {{height}}
+ {{imp}}
+ {{text}}
+
+ 已发现 {{devices.length}} 个外围设备:
+
+
+
+ {{item.name}}
+ (信号强度: {{item.RSSI}}dBm)
+
+ mac地址: {{item.macAddr || item.deviceId}}
+
+
+
+
+
diff --git a/pages/index/index.js b/pages/index/index.js
index b47304b..fb1695a 100644
--- a/pages/index/index.js
+++ b/pages/index/index.js
@@ -1,392 +1,399 @@
const util = require("../../utils/util");
const {
- inArray,
- ab2hex
+ inArray,
+ ab2hex
} = util
Page({
- data: {
- devices: [],
- connected: false,
- cmd: '',
- name: '',
- weight: "",
- text: "",
- imp: "",
- deviceId: null,
- },
- onLoad: function() {},
- // 初始化蓝牙模块
- editclick: function(e) {
- let type = e.currentTarget.dataset.name
- if (type == 'PCD01PRO') {
- wx.navigateTo({
- url: `/pages/PCD01PRO/index`
- })
- return
- }
- if (type == 'PCH0809') {
- wx.navigateTo({
- url: `/pages/PCH0809/index`
- })
- return
- }
- if (type == 'PCF01B') {
- wx.navigateTo({
- url: `/pages/PCF01B/index`
- })
- return
- }
- if (type == 'PCF01proFRK') {
- wx.navigateTo({
- url: `/pages/PCF01proFRK/index`
- })
- return
- }
- if (type == 'PCF08') {
- wx.navigateTo({
- url: `/pages/PCF08/index`
- })
- return
- }
- if (type == 'PCJ02') {
- wx.navigateTo({
- url: `/pages/PCJ02/index`
- })
- return
- }
- if (type == 'FB03') {
- wx.navigateTo({
- url: `/pages/FB03/index`
- })
- return
- }
- if (type == 'G01') {
- wx.navigateTo({
- url: `/pages/G01/index`
- })
- return
- }
- if (type == 'h018') {
- wx.navigateTo({
- url: `/pages/h018/index`
- })
- return
- }
- if (type == 'L08') {
- wx.navigateTo({
- url: `/pages/L08/index`
- })
- return
+ data: {
+ devices: [],
+ connected: false,
+ cmd: '',
+ name: '',
+ weight: "",
+ text: "",
+ imp: "",
+ deviceId: null,
+ },
+ onLoad: function() {},
+ // 初始化蓝牙模块
+ editclick: function(e) {
+ let type = e.currentTarget.dataset.name
+ if (type == 'PCD01PRO') {
+ wx.navigateTo({
+ url: `/pages/PCD01PRO/index`
+ })
+ return
+ }
+ if (type == 'PCH0809') {
+ wx.navigateTo({
+ url: `/pages/PCH0809/index`
+ })
+ return
+ }
+ if (type == 'PCF01B') {
+ wx.navigateTo({
+ url: `/pages/PCF01B/index`
+ })
+ return
+ }
+ if (type == 'PCF01proFRK') {
+ wx.navigateTo({
+ url: `/pages/PCF01proFRK/index`
+ })
+ return
+ }
+ if (type == 'PCF08') {
+ wx.navigateTo({
+ url: `/pages/PCF08/index`
+ })
+ return
+ }
+ if (type == 'PCJ02') {
+ wx.navigateTo({
+ url: `/pages/PCJ02/index`
+ })
+ return
+ }
+ if (type == 'FB03') {
+ wx.navigateTo({
+ url: `/pages/FB03/index`
+ })
+ return
+ }
+ if (type == 'G01') {
+ wx.navigateTo({
+ url: `/pages/G01/index`
+ })
+ return
+ }
+ if (type == 'h018') {
+ wx.navigateTo({
+ url: `/pages/h018/index`
+ })
+ return
+ }
+ if (type == 'L08') {
+ wx.navigateTo({
+ url: `/pages/L08/index`
+ })
+ return
+ }
+
+ if (type == 'H01PRO') {
+ wx.navigateTo({
+ url: `/pages/H01PRO/index`
+ })
+ return
+ }
+
+ },
+ 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()
+ }
+ })
}
-
- },
- 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, //是否允许重复上报同一设备
- services: [ //要搜索蓝牙设备主 service 的 uuid 列表
- "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, //是否允许重复上报同一设备
+ services: [ //要搜索蓝牙设备主 service 的 uuid 列表
+ "FFE0",
+ ],
+ success: (res) => {
+ console.log('startBluetoothDevicesDiscovery success', res)
+ this.onBluetoothDeviceFound()
+ },
+ })
+ },
+ // 停止搜寻附近的蓝牙外围设备
+ stopBluetoothDevicesDiscovery() {
+ wx.stopBluetoothDevicesDiscovery()
+ },
- // 找到新设备的事件
- onBluetoothDeviceFound() {
- wx.onBluetoothDeviceFound((res) => {
- res.devices.forEach(device => {
- 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
- }
- console.log("131", data)
- this.setData(data)
- }
- })
- })
- },
- // 连接低功耗蓝牙设备
- createBLEConnection(e) {
- this._connLoading = true
- wx.showLoading({
- title: '连接中',
- })
- setTimeout(() => {
- if (this._connLoading) {
- this._connLoading = false
- wx.hideLoading()
- }
- }, 6000)
- 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 => {
- this._connLoading = false
- 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: "",
- text: "",
- imp: ""
- })
- }
- })
- },
+ // 找到新设备的事件
+ onBluetoothDeviceFound() {
+ wx.onBluetoothDeviceFound((res) => {
+ res.devices.forEach(device => {
+ 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
+ }
+ console.log("131", data)
+ this.setData(data)
+ }
+ })
+ })
+ },
+ // 连接低功耗蓝牙设备
+ createBLEConnection(e) {
+ this._connLoading = true
+ wx.showLoading({
+ title: '连接中',
+ })
+ setTimeout(() => {
+ if (this._connLoading) {
+ this._connLoading = false
+ wx.hideLoading()
+ }
+ }, 6000)
+ 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 => {
+ this._connLoading = false
+ 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: "",
+ 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) {
- this._deviceId = deviceId
- this._serviceId = serviceId
- this._device.serviceId = serviceId
- wx.getBLEDeviceCharacteristics({
- deviceId,
- serviceId,
- success: (res) => {
- console.log('getBLEDeviceCharacteristics success', res.characteristics)
- wx.showLoading({
- title: '获取特征值成功',
- })
- //FFE1:write: true, FFE2:notify: true,FFE3:read: true, write: true, notify: true,
- for (let i = 0; i < res.characteristics.length; i++) {
- let characteristic = res.characteristics[i];
- if (characteristic.uuid.indexOf("FFE2") != -1) {
- if (characteristic.properties.notify == true) {
- this.notifyBLECharacteristicValue(deviceId, serviceId, characteristic
- .uuid)
- console.log("ffe2服务的notifyId获取成功")
- }
- if (characteristic.properties.read == true) {
- that.readId = characteristic.uuid
- }
- if (characteristic.properties.write == true) {
- that.writeId = characteristic.uuid
- }
- break;
- }
- }
- },
- fail(res) {
- console.error('getBLEDeviceCharacteristics', res)
- }
- })
- },
- //解析蓝牙返回数据
- notifyBLECharacteristicValue(deviceId, serviceId, notifyId) {
- let that = this
- wx.notifyBLECharacteristicValueChange({
- state: true, // 启用 notify 功能
- deviceId: deviceId,
- serviceId: serviceId,
- characteristicId: notifyId,
- success(res) {
- wx.onBLECharacteristicValueChange(function(res) {
- let value = ab2hex(res.value);
- let num = value.substring(18, 19)
- let dw = value.substring(19, 20)
- let typeInfo = value.substring(10, 12)
- console.log("16进制转化:", value);
- if (value.length == 26) {
- let data = parseInt(value.substring(13, 18), 16)
- let dw1 = "kg"
- if (dw == "1") {
- dw1 = "斤"
- console.log("体重单位:斤")
- }
- if (dw == "4") {
- dw1 = "st:lb"
- console.log("体重单位:st:lb,计算方法:1 * data + 5")
- }
- if (dw == "6") {
- dw1 = "lb"
- console.log("体重单位:lb")
- }
- if (num == "1") {
- data = parseInt(value.substring(13, 18), 16) / 10
- console.log("体重小数点后1位")
- }
- if (num == "2") {
- data = parseInt(value.substring(13, 18), 16) / 100
- console.log("体重小数点后2位")
- }
- if (num == "3") {
- data = parseInt(value.substring(13, 18), 16) / 1000
- console.log("体重小数点后3位")
- }
- if (typeInfo == "01") {
- console.log("实时体重:", data)
- that.setData({
- weight: "实时体重是:" + data + dw1
- })
- }
- if (typeInfo == "02") {
- console.log("稳定体重:", data)
- that.setData({
- weight: "稳定体重是:" + data + dw1
- })
- }
- }
- if (value.length == 30) {
- console.log("阻抗值:", value)
- if (typeInfo == "03") {
- let imp = parseInt(value.substring(17, 22), 16)
- that.setData({
- imp: "阻抗值:" + imp
- })
- }
+ // 获取蓝牙设备某个服务中所有特征值(characteristic)
+ /**
+ * read: true读,write: true写,notify: true广播
+ */
+ getBLEDeviceCharacteristics(deviceId, serviceId) {
+ this._deviceId = deviceId
+ this._serviceId = serviceId
+ this._device.serviceId = serviceId
+ wx.getBLEDeviceCharacteristics({
+ deviceId,
+ serviceId,
+ success: (res) => {
+ console.log('getBLEDeviceCharacteristics success', res.characteristics)
+ wx.showLoading({
+ title: '获取特征值成功',
+ })
+ //FFE1:write: true, FFE2:notify: true,FFE3:read: true, write: true, notify: true,
+ for (let i = 0; i < res.characteristics.length; i++) {
+ let characteristic = res.characteristics[i];
+ if (characteristic.uuid.indexOf("FFE2") != -1) {
+ if (characteristic.properties.notify == true) {
+ this.notifyBLECharacteristicValue(deviceId, serviceId, characteristic
+ .uuid)
+ console.log("ffe2服务的notifyId获取成功")
+ }
+ if (characteristic.properties.read == true) {
+ that.readId = characteristic.uuid
+ }
+ if (characteristic.properties.write == true) {
+ that.writeId = characteristic.uuid
+ }
+ break;
+ }
+ }
+ },
+ fail(res) {
+ console.error('getBLEDeviceCharacteristics', res)
+ }
+ })
+ },
+ //解析蓝牙返回数据
+ notifyBLECharacteristicValue(deviceId, serviceId, notifyId) {
+ let that = this
+ wx.notifyBLECharacteristicValueChange({
+ state: true, // 启用 notify 功能
+ deviceId: deviceId,
+ serviceId: serviceId,
+ characteristicId: notifyId,
+ success(res) {
+ wx.onBLECharacteristicValueChange(function(res) {
+ let value = ab2hex(res.value);
+ let num = value.substring(18, 19)
+ let dw = value.substring(19, 20)
+ let typeInfo = value.substring(10, 12)
+ console.log("16进制转化:", value);
+ if (value.length == 26) {
+ let data = parseInt(value.substring(13, 18), 16)
+ let dw1 = "kg"
+ if (dw == "1") {
+ dw1 = "斤"
+ console.log("体重单位:斤")
+ }
+ if (dw == "4") {
+ dw1 = "st:lb"
+ console.log("体重单位:st:lb,计算方法:1 * data + 5")
+ }
+ if (dw == "6") {
+ dw1 = "lb"
+ console.log("体重单位:lb")
+ }
+ if (num == "1") {
+ data = parseInt(value.substring(13, 18), 16) / 10
+ console.log("体重小数点后1位")
+ }
+ if (num == "2") {
+ data = parseInt(value.substring(13, 18), 16) / 100
+ console.log("体重小数点后2位")
+ }
+ if (num == "3") {
+ data = parseInt(value.substring(13, 18), 16) / 1000
+ console.log("体重小数点后3位")
+ }
+ if (typeInfo == "01") {
+ console.log("实时体重:", data)
+ that.setData({
+ weight: "实时体重是:" + data + dw1
+ })
+ }
+ if (typeInfo == "02") {
+ console.log("稳定体重:", data)
+ that.setData({
+ weight: "稳定体重是:" + data + dw1
+ })
+ }
+ }
+ if (value.length == 30) {
+ console.log("阻抗值:", value)
+ if (typeInfo == "03") {
+ let imp = parseInt(value.substring(17, 22), 16)
+ that.setData({
+ imp: "阻抗值:" + imp
+ })
+ }
- }
- if (value.toUpperCase() == "A90026023000589A") {
- console.log("测量完成")
- that.setData({
- text: "测量完成"
- })
- }
- });
- },
- fail(res) {
- console.log("测量失败", res.value);
- }
- });
- },
+ }
+ if (value.toUpperCase() == "A90026023000589A") {
+ console.log("测量完成")
+ that.setData({
+ text: "测量完成"
+ })
+ }
+ });
+ },
+ fail(res) {
+ console.log("测量失败", res.value);
+ }
+ });
+ },
- /**
- * 断开蓝牙模块
- */
- closeBluetoothAdapter() {
- wx.closeBluetoothAdapter()
- this._discoveryStarted = false
- wx.showToast({
- title: '断开蓝牙模块',
- icon: 'none'
- })
- this.setData({
- devices: [],
- weight: "",
- text: "",
- imp: ""
- })
- },
- // 断开与低功耗蓝牙设备的连接
- closeBLEConnection() {
- wx.closeBLEConnection({
- deviceId: this._deviceId
- })
- wx.showToast({
- title: '断开蓝牙连接',
- icon: 'none'
- })
- this.setData({
- connected: false,
- devices: [],
- text: "",
- weight: "",
- imp: ""
- })
- },
+ /**
+ * 断开蓝牙模块
+ */
+ closeBluetoothAdapter() {
+ wx.closeBluetoothAdapter()
+ this._discoveryStarted = false
+ wx.showToast({
+ title: '断开蓝牙模块',
+ icon: 'none'
+ })
+ this.setData({
+ devices: [],
+ weight: "",
+ text: "",
+ imp: ""
+ })
+ },
+ // 断开与低功耗蓝牙设备的连接
+ closeBLEConnection() {
+ wx.closeBLEConnection({
+ deviceId: this._deviceId
+ })
+ wx.showToast({
+ title: '断开蓝牙连接',
+ icon: 'none'
+ })
+ this.setData({
+ connected: false,
+ devices: [],
+ text: "",
+ weight: "",
+ imp: ""
+ })
+ },
});
diff --git a/pages/index/index.wxml b/pages/index/index.wxml
index f69d2e8..7dd1b89 100644
--- a/pages/index/index.wxml
+++ b/pages/index/index.wxml
@@ -1,25 +1,27 @@
- module.exports.max = function(n1, n2) {
- return Math.max(n1, n2)
- }
- module.exports.len = function(arr) {
- arr = arr || []
- return arr.length
- }
+ module.exports.max = function(n1, n2) {
+ return Math.max(n1, n2)
+ }
+ module.exports.len = function(arr) {
+ arr = arr || []
+ return arr.length
+ }
-
- PCD01PRO
- PCH08/09
- PCF01B
- PCF01pro(旧)
- PCF01pro(新)
- PCF08
- PCJ02
- G01
- B03
-
- L08
-
+
+ PCD01PRO
+ H01PRO
+ PCH08/09
+ PCF01B
+ PCF01pro(旧)
+ PCF01pro(新)
+ PCF08
+ L08
+ B03
+ PCJ02
+ G01
+
+
+
diff --git a/project.config.json b/project.config.json
index ae58e57..e252818 100644
--- a/project.config.json
+++ b/project.config.json
@@ -1,57 +1,56 @@
{
- "description": "项目配置文件,详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
- "packOptions": {
- "ignore": [],
- "include": []
- },
- "setting": {
- "urlCheck": true,
- "es6": false,
- "enhance": true,
- "postcss": true,
- "preloadBackgroundData": false,
- "minified": true,
- "newFeature": false,
- "coverView": true,
- "nodeModules": false,
- "autoAudits": false,
- "showShadowRootInWxmlPanel": true,
- "scopeDataCheck": false,
- "uglifyFileName": false,
- "checkInvalidKey": true,
- "checkSiteMap": true,
- "uploadWithSourceMap": true,
- "compileHotReLoad": false,
- "lazyloadPlaceholderEnable": false,
- "useMultiFrameRuntime": true,
- "useApiHook": true,
- "useApiHostProcess": false,
- "babelSetting": {
- "ignore": [],
- "disablePlugins": [],
- "outputPath": ""
+ "description": "项目配置文件,详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
+ "packOptions": {
+ "ignore": [],
+ "include": []
},
- "useIsolateContext": true,
- "userConfirmedBundleSwitch": false,
- "packNpmManually": false,
- "packNpmRelationList": [],
- "minifyWXSS": true,
- "showES6CompileOption": false,
- "disableUseStrict": false,
- "ignoreUploadUnusedFiles": true,
- "useStaticServer": true,
- "useCompilerPlugins": false,
- "minifyWXML": true
- },
- "compileType": "miniprogram",
- "libVersion": "2.16.0",
- "projectname": "bluetooth_demo",
- "simulatorType": "wechat",
- "simulatorPluginLibVersion": {},
- "appid": "wxcea3504a31518eb6",
- "condition": {},
- "editorSetting": {
- "tabIndent": "insertSpaces",
- "tabSize": 2
- }
+ "setting": {
+ "urlCheck": true,
+ "es6": false,
+ "enhance": true,
+ "postcss": true,
+ "preloadBackgroundData": false,
+ "minified": true,
+ "newFeature": false,
+ "coverView": true,
+ "nodeModules": false,
+ "autoAudits": false,
+ "showShadowRootInWxmlPanel": true,
+ "scopeDataCheck": false,
+ "uglifyFileName": false,
+ "checkInvalidKey": true,
+ "checkSiteMap": true,
+ "uploadWithSourceMap": true,
+ "compileHotReLoad": false,
+ "lazyloadPlaceholderEnable": false,
+ "useMultiFrameRuntime": true,
+ "useApiHook": true,
+ "useApiHostProcess": true,
+ "babelSetting": {
+ "ignore": [],
+ "disablePlugins": [],
+ "outputPath": ""
+ },
+ "useIsolateContext": true,
+ "userConfirmedBundleSwitch": false,
+ "packNpmManually": false,
+ "packNpmRelationList": [],
+ "minifyWXSS": true,
+ "disableUseStrict": false,
+ "minifyWXML": true,
+ "showES6CompileOption": false,
+ "useCompilerPlugins": false,
+ "ignoreUploadUnusedFiles": true
+ },
+ "compileType": "miniprogram",
+ "libVersion": "2.16.0",
+ "projectname": "bluetooth_demo",
+ "simulatorType": "wechat",
+ "simulatorPluginLibVersion": {},
+ "appid": "wxcea3504a31518eb6",
+ "editorSetting": {
+ "tabIndent": "insertSpaces",
+ "tabSize": 2
+ },
+ "condition": {}
}
\ No newline at end of file