一、藍牙技術簡介
藍牙技術是一種無線個人區域網技術,可用於連接行動電話、筆記本電腦、數字相機、PDA等設備。它是一種開放的供應商中立技術,由Ericsson等公司在1994年創立,屬於藍牙專業小組SIG的一部分。
藍牙技術最初旨在消除傳統串列線纜的困擾,改用無線通信方式。藍牙技術提供了簡單的、安全的無線連接,其中包括數據和音頻傳輸等多項服務,速度可達1Mbps,覆蓋範圍通常為10米。
藍牙技術主要分為經典藍牙和低功耗藍牙兩個版本,經典藍牙適用於數據傳輸等場景,低功耗藍牙適用於物聯網等長期低功耗場景。
二、微信小程序藍牙開發介紹
微信小程序提供了藍牙API,可以通過小程序與藍牙設備進行連接和數據交互。藍牙功能的開發步驟一般包括以下幾個方面:
1、初始化藍牙適配器
wx.openBluetoothAdapter({
success: function (res) {
console.log('藍牙適配器初始化成功')
},
fail: function (res) {
console.log('藍牙適配器初始化失敗')
}
})
2、搜索藍牙設備
wx.startBluetoothDevicesDiscovery({
services: [], //搜索目標設備的服務
allowDuplicatesKey: false, //搜索結果是否允許重複
success: function (res) {
console.log('搜索藍牙設備成功')
},
fail: function (res) {
console.log('搜索藍牙設備失敗')
}
})
3、監聽藍牙設備變化
wx.onBluetoothDeviceFound(function (devices) {
console.log('新設備', devices)
})
4、連接藍牙設備
wx.createBLEConnection({
deviceId: '', //藍牙設備ID
success: function (res) {
console.log('藍牙設備連接成功')
},
fail: function (res) {
console.log('藍牙設備連接失敗')
}
})
5、監聽藍牙設備連接狀態
wx.onBLEConnectionStateChange(function (res) {
console.log(`藍牙設備 ${res.deviceId} 連接狀態變化`, res.connected)
})
6、讀寫藍牙設備數據
wx.readBLECharacteristicValue({
deviceId: '', //藍牙設備ID
serviceId: '', //藍牙設備服務ID
characteristicId: '', //藍牙設備特徵值ID
success: function (res) {
console.log('讀取藍牙設備數據成功', res)
},
fail: function (res) {
console.log('讀取藍牙設備數據失敗', res)
}
})
wx.writeBLECharacteristicValue({
deviceId: '', //藍牙設備ID
serviceId: '', //藍牙設備服務ID
characteristicId: '', //藍牙設備特徵值ID
value: new ArrayBuffer(1), //寫入的數據
success: function (res) {
console.log('寫入藍牙設備數據成功', res)
},
fail: function (res) {
console.log('寫入藍牙設備數據失敗', res)
}
})
7、斷開藍牙設備連接
wx.closeBLEConnection({
deviceId: '', //藍牙設備ID
success: function (res) {
console.log('藍牙設備連接斷開成功')
},
fail: function (res) {
console.log('藍牙設備連接斷開失敗')
}
})
三、微信小程序藍牙開發實戰
通過藍牙技術,我們可以讓小程序連接到藍牙設備,並將設備上的數據展示到小程序上。下面,我們以連接智能體脂秤為例,演示具體的代碼實現過程。
1、初始化藍牙適配器
wx.openBluetoothAdapter({
success: function (res) {
console.log('藍牙適配器初始化成功')
//開啟藍牙搜索
wx.startBluetoothDevicesDiscovery({
services: [], //搜索目標設備的服務
allowDuplicatesKey: false, //搜索結果是否允許重複
success: function (res) {
console.log('搜索藍牙設備成功')
},
fail: function (res) {
console.log('搜索藍牙設備失敗')
}
})
},
fail: function (res) {
console.log('藍牙適配器初始化失敗')
}
})
2、搜索藍牙設備
在onBluetoothDeviceFound事件回調函數中,獲取到設備後,根據設備名稱進行判斷,如果是智能體脂秤,則停止藍牙搜索,並連接藍牙設備。
//搜索到新設備
wx.onBluetoothDeviceFound(function (devices) {
console.log('新設備', devices)
//查找智能體脂秤設備
if (devices.name == 'Smart Body Scale') {
//停止搜索設備
wx.stopBluetoothDevicesDiscovery({
success: function (res) {
console.log('停止搜索藍牙設備成功')
//連接藍牙設備
wx.createBLEConnection({
deviceId: devices.deviceId,
success: function (res) {
console.log('藍牙設備連接成功', res)
//監聽連接狀態變化
wx.onBLEConnectionStateChange(function (res) {
console.log(`藍牙設備 ${res.deviceId} 連接狀態變化`, res.connected)
})
//獲取藍牙設備服務列表
wx.getBLEDeviceServices({
deviceId: devices.deviceId,
success: function (res) {
console.log('獲取藍牙設備服務列表成功', res)
//獲取第一個服務ID
var serviceId = res.services[0].uuid
//獲取藍牙設備特徵值列表
wx.getBLEDeviceCharacteristics({
deviceId: devices.deviceId,
serviceId: serviceId,
success: function (res) {
console.log('獲取藍牙設備特徵值列表成功', res)
//遍歷特徵值列表,找到讀取數據的特徵值ID和寫入數據的特徵值ID
for (var i = 0; i < res.characteristics.length; i++) {
var item = res.characteristics[i]
//讀取數據的特徵值
if (item.properties.read) {
that.setData({
readCharacteristicId: item.uuid
})
}
//寫入數據的特徵值
if (item.properties.write) {
that.setData({
writeCharacteristicId: item.uuid
})
}
}
//啟用特徵值的通知功能
wx.notifyBLECharacteristicValueChange({
deviceId: devices.deviceId,
serviceId: serviceId,
characteristicId: that.data.readCharacteristicId,
state: true,
success: function (res) {
console.log('啟用特徵值的通知功能成功', res)
//監聽藍牙設備數據變化
wx.onBLECharacteristicValueChange(function (res) {
console.log('藍牙設備數據變化', res)
//處理藍牙設備數據,並展示在小程序上
var data = new Uint8Array(res.value)
var weight = data[4] + (data[5] * 256) //體重
var fat = data[6] + (data[7] * 256) //體脂率
var water = data[8] + (data[9] * 256) //水分率
var muscle = data[10] + (data[11] * 256) //肌肉量
that.setData({
weight: weight / 100,
fat: fat / 100,
water: water / 100,
muscle: muscle / 100
})
})
},
fail: function (res) {
console.log('啟用特徵值的通知功能失敗', res)
}
})
},
fail: function (res) {
console.log('獲取藍牙設備特徵值列表失敗', res)
}
})
},
fail: function (res) {
console.log('獲取藍牙設備服務列表失敗', res)
}
})
},
fail: function (res) {
console.log('藍牙設備連接失敗', res)
}
})
},
fail: function (res) {
console.log('停止搜索藍牙設備失敗', res)
}
})
}
})
3、讀取藍牙設備數據
啟用特徵值的通知功能後,當設備上的數據發生變化時,會觸發onBLECharacteristicValueChange事件回調函數,從而讀取數據。
//監聽藍牙設備數據變化
wx.onBLECharacteristicValueChange(function (res) {
console.log('藍牙設備數據變化', res)
//處理藍牙設備數據,並展示在小程序上
var data = new Uint8Array(res.value)
var weight = data[4] + (data[5] * 256) //體重
var fat = data[6] + (data[7] * 256) //體脂率
var water = data[8] + (data[9] * 256) //水分率
var muscle = data[10] + (data[11] * 256) //肌肉量
that.setData({
weight: weight / 100,
fat: fat / 100,
water: water / 100,
muscle: muscle / 100
})
})
4、斷開藍牙設備連接
在小程序頁面隱藏時,調用wx.closeBLEConnection方法斷開藍牙設備連接。
onHide: function () {
//斷開藍牙設備連接
wx.closeBLEConnection({
deviceId: this.data.deviceId,
success: function (res) {
console.log('藍牙設備連接斷開成功')
},
fail: function (res) {
console.log('藍牙設備連接斷開失敗')
}
})
}
四、小結
通過藍牙技術,可以讓小程序連接到藍牙設備,並進行數據讀寫。在實際開發中,需要注意以下幾點:
1、對藍牙設備進行操作時,需要先判斷藍牙是否可用,並且藍牙設備是否已連接。
2、對於不同的藍牙設備,需要了解其通信協議,並根據協議進行數據的解析和封裝。
3、在實際使用中,需要考慮藍牙設備的能耗問題,盡量減少不必
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/277001.html