① 前端調用藍牙介面怎麼設置
我實現的小程序模塊自動連接(根據需要,可改手動),是在小程序初始化完成時開始自動調用執行。
大致流程:
開啟藍牙適配;
獲取藍牙適配器狀態,判斷設備藍牙是否可用;
判斷藍牙適配器可用時開啟掃描藍牙設備和開啟獲取已連接的藍牙設備;
如果開啟掃描藍牙設備失敗 5 s 後,自動再次開啟掃描;
開啟掃描藍牙設備成功後,開啟監聽已掃描的設備;
如果已掃描到的新設備,包含特定名稱規律,則開始連接檔老臘該設備;
開啟獲取已連接藍牙設備,成功後,連接包含特定名稱規律的設備;
兩者都無法搜索到相應設備,則等待 5 s,重新搜索;
開始連接某設備時停止掃描設備,停止循環獲取已連接設備;
連接成功後停止掃描設備,停止循環獲取已連接設備。
下面,我們一步步來完成這個流程。
開始連接藍牙設備
1. 開啟連接
app.js的onLaunch()方法里中,我們調用this.startConnect();來開啟連接,彈出提示框,進行配對。如果失敗,則提示設備藍牙不可用,同時開啟藍牙適配器狀態監聽。
2. 獲取本機藍牙狀態
調用this.getBluetoothAdapterState()獲取本機藍牙適配器狀態,判斷是否可用。若available為false,則為用戶沒有開啟系統藍牙。
同時,判斷程序還沒有開始搜索藍牙設備,調用this.()開始掃描附近的藍牙設備,以及this.getConnectedBluetoothDevices(),獲取本機已配對的藍牙設備。
3. 開始搜索新設備
開始搜索藍牙設備(),提示藍牙搜索。
4. 獲取已配對的藍牙設備
需要注意的是,參數services(Array)是必填的,但是官方示例中以及各種坑爹 demo 里從沒見過有誰填寫。不填寫這個屬性此方法,將無法獲取到任何已配對設備。
如果要調用此方法,則代表需要連接特定設備,並且知道該設備的一個主服務serviceId。
如暫時不知道這個 ID,可以先手動連接一次想要連接的設備,然後獲取service列表,記錄屬性primary為true的值至少一個。5. 處理搜索功能開啟失敗的情況
如果搜索功能啟動失敗,回到第 2 步,重新檢查藍牙適配器。如果可用,開啟藍牙搜索功能並開啟發現附近藍牙設備事件監聽:this.onBluetoothDeviceFound()。
此方法可自定義過濾一些無效的藍牙設備,比如name為空的,或是產品開發中,需要過濾設備名稱不含有特定規律字元串的設備。
6. 自動配對設含棗備
在第 5 步中發現了某個想配對的設備,則獲取到該設備的deviceId,然後用this.startConnectDevices()介面,開始配對該設備。
開啟連接後,為了避免出現沖突,一旦開啟連接,則需要終止掃描附近藍牙設備、終止讀取本機已配對設備
7. 連接成功後握手
連接成功後,使用this.getService(deviceId)介面,獲取設備的所有服務。
8. 讀取服務的特徵值
9. 意外處理
如果掃描到的設備中沒有想要連接的設備,可以嘗試使用系統藍牙手動配對,然後再小程序中調用getConnectedBluetoothDevices()獲取本機已配對的藍牙設備,然後過濾設備(可能獲取多個已配對的藍牙設備)。
然後,將已獲取的藍牙設備deviceId列表放入到一個數組中,然後調用自定義方法this.loopConnect();
思路:通過遞歸調用獲取已配對藍牙設備的,如果獲取到了就去連接,如果devicesId[x]為空,說明上傳調用時,獲取到的已配對設備全部連接失敗了。
這時候,我們需要則開啟重新獲取已配對藍牙設行滑備,並開啟掃描附近藍牙設備。
10. 自動循環重試
startConnectDevices('loop', array)方法,是當獲取已配對藍牙設備進行連接時調用。
其中的處理邏輯上文已經貼出,意思就是在連接失敗後fail方法里累加一個全局變數,然後回調loopConnect(array)方法。
11. 手動連接
上文介紹的方法是為了直接自動連接,如果不需要自動連接,可使用方法getBluetoothDevices(),獲取已掃描到的藍牙設備的列表。
開發者可以做個頁面顯示出設備名,用戶點擊某個設備後,才開始連接。
需要注意的事項
that.serviceId是在初始化時設置的,由於對需要連接設備的主服務serivceId和各種特徵值都是已知的,因此可以這樣做。如果不可知,可以做一個掃描方法自己檢查特徵值的用途。
連接成功後的writeBLECharacteristicValue和openNotifyService操作需要注意,如果同時開啟這兩項操作要先調用wirte再開啟notify(原因未知,個人心得)。
3、經提醒,我發現還可以再完善一下在onBlueToothAdapterStateChange()監聽藍牙適配器狀態,以此判斷連接過程中、連接後用戶開關了設備藍牙。如果判斷到關了藍牙,發出開啟藍牙的提示;如果監聽到開啟了,就重新回到第 1 步。
② 小程序香氛怎麼連接藍牙音響
1、首先,請確保您的手機已經開啟藍牙功能,並且藍牙音響已經正確連接到電源。
2、然後,打開小程序,點擊「設備」,在頁面中找到「藍牙設備」,點擊「搜索」,系統會自動搜索附近可用的藍牙設備,搜索到後點擊連接即可。
3、最後,在小程序中選擇您想要播放的香氛,點擊「播放」,即可將香氛播放到藍牙音響上。
③ 斷網了,如何讓微信小程序,可以用藍牙
微信小程序怎麼實現藍牙連接?(代碼示例)
微信小程序 2022-03-13
微信小程序如何實現藍牙連接?本篇文章給大家帶來的內容是介紹微信小程序實現藍牙連接的方法(步驟)。有一定的參考價值,有需要的朋友可以參考一下,希望對你們有所幫助。
最近的項目需要使用小程序的藍牙功能與硬體設備進行連接相互傳送數據指令,聯調過程中發現一些問題,於是想著記錄下來,方便以後查看!
1、初始化藍牙設備
一般使用藍牙功能肯定是想連接某一個藍牙設備,所以需要知道這個藍牙設備的名稱,一般來說都是掃描二維碼連接,那麼當你掃描這個設備二維碼的時候,就需要去初始化你手機上的藍牙模塊了
/**
* 初始化藍牙設備
*/
initBlue:function(){
var that = this;
wx.openBluetoothAdapter({//調用微信小程序api 打開藍牙適配器介面
success: function (res) {
// console.log(res)
wx.showToast({
title: '初始化成功',
icon: 'success',
ration: 800
})
that.findBlue();//2.0
},
fail: function (res) {//如果手機上的藍牙沒有打開,可以提醒用戶
wx.showToast({
title: '請開啟藍牙',
icon: 'fails',
ration: 1000
})
}
})
},
2、搜索藍牙設備
手機藍牙初始化成功之後,就會去搜索周邊的藍牙設備
/**
*開始搜索藍牙設備
*/
findBlue(){
var that = this
wx.({
allowDuplicatesKey: false,
interval: 0,
success: function (res) {
④ 小米手機微信小程序藍牙連接不上
可參考以下無法連接藍牙設備處理步驟:1、確認藍牙設備電量與連接范圍確認藍牙設備電量充足,藍牙連接有效距離一般為10米左右,如果雙方設備距離較遠或中間存在障礙物,則可能搜索不到藍牙設備。2、確認藍牙設備連接狀態確保沒有其他手機連接此藍牙設備。3、重新配對藍牙設備請參考藍牙設備說明書操作,確保設備處於可配對狀態,並重新配對設備。4、進行對比測試同時使用兩個無配對記錄的手機搜索,如果其他手機也不能搜索到設備,則可能是藍滑謹牙設備故障。5、重置網路設置進入設置--系統管理--備份與重置--重置網凳讓鍵絡設置--重置設置,再使用查看。6、升級系統版本請您將手棗巧機升級至最新版本使用查看。
⑤ 微信小程序藍牙教程--完整版親測
#使用mpvue 開發小程序過程中 簡單介紹一下微信小程序藍牙連接過程
#在藍牙連接的過程中部分api需要加定時器延時1秒到2秒左右再執行,原因為何不知道,小程序有這樣的要求
#1.首先是要初始化藍牙:openBluetoothAdapter()
```js
if (wx.openBluetoothAdapter) {
wx.openBluetoothAdapter({
success: function(res) {
/* 獲取本機的藍牙狀態 */
setTimeout(() => {
getBluetoothAdapterState()
}, 1000)
},
fail: function(err) {
// 初始化失敗
}
})
} else {
}
```
#2.檢測本機藍牙是否可用:
# 要在上述的初始化藍牙成功之後回調里調用
```js
getBluetoothAdapterState() {
var that= this;
that.toastTitle= '檢查藍牙狀態'
wx.getBluetoothAdapterState({
success: function(res) {
()
},
談祥 fail(res) {
console.log(res)
}
})
}
```
#3. 開始搜索藍牙設備:
```js
() {
var that= this;
setTimeout(() => {
wx.({
success: function(res) {
/* 獲取藍牙設備列表 */
that.getBluetoothDevices()
},
納畝 fail(res) {
}
})
}, 1000)
}
```
#4. 獲取搜索到的藍牙設備列表
# /* that.deviceName 是獲取到的藍牙設備的名稱, 因為藍牙設備在安卓和蘋果手機上搜到的藍牙地址顯示是不一樣的,所以根據設備名稱匹配藍牙*/
```js
getBluetoothDevices() {
var that= this;
setTimeout(() => {
wx.getBluetoothDevices({
services: [],
allowDuplicatesKey: false,
interval: 0,
success: function(res) {
if (res.devices.length> 0) {
if (JSON.stringify(res.devices).indexOf(that.deviceName) !== -1) {
for (let i = 0; i < res.devices.length; i++) {
if (that.deviceName === res.devices[i].name) {
/* 根據指定的藍牙設備名稱匹配到deviceId */
that.deviceId = that.devices[i].deviceId;
含茄搏 setTimeout(() => {
that.connectTO();
}, 2000);
};
};
} else {
}
} else {
}
},
fail(res) {
console.log(res, '獲取藍牙設備列表失敗=====')
}
})
}, 2000)
},
```
#5.連接藍牙
# 匹配到的藍牙設備ID 發送連接藍牙的請求, 連接成功之後 應該斷開藍牙搜索的api,然後去獲取所連接藍牙設備的service服務
```js
connectTO() {
wx.createBLEConnection({
deviceId: deviceId,
success: function(res) {
that.connectedDeviceId = deviceId;
/* 4.獲取連接設備的service服務 */
that.getBLEDeviceServices();
wx.stopBluetoothDevicesDiscovery({
success: function(res) {
console.log(res, '停止搜索')
},
fail(res) {
}
})
},
fail: function(res) {
}
})
}
```
#6. 獲取藍牙設備的service服務,獲取的serviceId有多個要試著連接最終確定哪個是穩定版本的service 獲取服務完後獲取設備特徵值
```js
getBLEDeviceServices() {
setTimeout(() => {
wx.getBLEDeviceServices({
deviceId: that.connectedDeviceId,
success: function(res) {
that.services= res.services
/* 獲取連接設備的所有特徵值 */
that.getBLEDeviceCharacteristics()
},
fail: (res) => {
}
})
}, 2000)
},
```
#7.獲取藍牙設備特徵值
# 獲取到的特徵值有多個,最後要用的事能讀,能寫,能監聽的那個值的uuid作為特徵值id,
```js
getBLEDeviceCharacteristics() {
setTimeout(() => {
wx.getBLEDeviceCharacteristics({
deviceId: connectedDeviceId,
serviceId: services[2].uuid,
success: function(res) {
for (var i = 0; i < res.characteristics.length; i++) {
if ((res.characteristics[i].properties.notify || res.characteristics[i].properties.indicate) &&
(res.characteristics[i].properties.read && res.characteristics[i].properties.write)) {
console.log(res.characteristics[i].uuid, '藍牙特徵值 ==========')
/* 獲取藍牙特徵值 */
that.notifyCharacteristicsId = res.characteristics[i].uuid
// 啟用低功耗藍牙設備特徵值變化時的 notify 功能
that.()
}
}
},
fail: function(res) {
}
})
}, 1000)
},
```
#8.啟動notify 藍牙監聽功能 然後使用 wx.用來監聽藍牙設備傳遞數據
#接收到的數據和發送的數據必須是二級制數據, 頁面展示的時候需要進行轉換
```js
() { // 啟用低功耗藍牙設備特徵值變化時的 notify 功能
var that= this;
console.log('6.啟用低功耗藍牙設備特徵值變化時的 notify 功能')
wx.({
state: true,
deviceId: that.connectedDeviceId,
serviceId: that.notifyServicweId,
characteristicId: that.notifyCharacteristicsId,
complete(res) {
/*用來監聽手機藍牙設備的數據變化*/
wx.(function(res) {
/**/
that.balanceData += that.buf2string(res.value)
that.hexstr += that.receiveData(res.value)
})
},
fail(res) {
console.log(res, '啟用低功耗藍牙設備監聽失敗')
that.measuringTip(res)
}
})
},
/*轉換成需要的格式*/
buf2string(buffer) {
var arr = Array.prototype.map.call(new Uint8Array(buffer), x => x)
return arr.map((char, i) => {
return String.fromCharCode(char);
}).join('');
},
receiveData(buf) {
return this.hexCharCodeToStr(this.ab2hex(buf))
},
/*轉成二進制*/
ab2hex (buffer) {
var hexArr = Array.prototype.map.call(
new Uint8Array(buffer), function (bit) {
return ('00' + bit.toString(16)).slice(-2)
}
)
return hexArr.join('')
},
/*轉成可展會的文字*/
hexCharCodeToStr(hexCharCodeStr) {
var trimedStr = hexCharCodeStr.trim();
var rawStr = trimedStr.substr(0, 2).toLowerCase() === '0x' ? trimedStr.substr(2) : trimedStr;
var len = rawStr.length;
var curCharCode;
var resultStr= [];
for (var i = 0; i < len; i = i+ 2) {
curCharCode = parseInt(rawStr.substr(i, 2), 16);
resultStr.push(String.fromCharCode(curCharCode));
}
return resultStr.join('');
},
```
# 向藍牙設備發送數據
```js
sendData(str) {
let that= this;
let dataBuffer = new ArrayBuffer(str.length)
let dataView = new DataView(dataBuffer)
for (var i = 0; i < str.length; i++) {
dataView.setUint8(i, str.charAt(i).charCodeAt())
}
let dataHex = that.ab2hex(dataBuffer);
this.writeDatas = that.hexCharCodeToStr(dataHex);
wx.writeBLECharacteristicValue({
deviceId: that.connectedDeviceId,
serviceId: that.notifyServicweId,
characteristicId: that.notifyCharacteristicsId,
value: dataBuffer,
success: function (res) {
console.log('發送的數據:' + that.writeDatas)
console.log('message發送成功')
},
fail: function (res) {
},
complete: function (res) {
}
})
},
```
# 當不需要連接藍牙了後就要關閉藍牙,並關閉藍牙模塊
```js
// 斷開設備連接
closeConnect() {
if (that.connectedDeviceId) {
wx.closeBLEConnection({
deviceId: that.connectedDeviceId,
success: function(res) {
that.closeBluetoothAdapter()
},
fail(res) {
}
})
} else {
that.closeBluetoothAdapter()
}
},
// 關閉藍牙模塊
closeBluetoothAdapter() {
wx.closeBluetoothAdapter({
success: function(res) {
},
fail: function(err) {
}
})
},
```
#在向藍牙設備傳遞數據和接收數據的過程中,並未使用到read的API 不知道有沒有潛在的問題,目前線上運行為發現任何的問題
#今天的藍牙使用心得到此結束,謝謝
⑥ 微信小程序無法連接藍牙列印機
方法指州如下:
1、打開微信小程序,點擊設置,選擇藍牙開放拍侍。
2、打開藍牙列印機,點擊藍牙開放。
3、用微信搜索附近藍牙即可連接到藍牙列印機。列印機(Printer)是計算機的輸出設備之一,用於將計算機處理結果列印在相關介襲逗吵質上。
⑦ 微信小程序說請打開藍牙但開著藍牙
重新連接。
有時候在顯示過程中打開藍牙,小程序未能及時接收到信息,握虧從而出現打開仍舊提醒的情況。
具體步雹虧驟:設置---許可權管理段肆神--微信--開啟藍牙--允許「。
⑧ 滿天星小程序怎樣與設備鏈接
滿天星小程序支持通過藍牙、WIFI、二維碼等方式與設備鏈接:
1、通過藍牙:在滿天星小程序中,點擊「設備」,選擇「添加設備」,按照提示開啟藍牙,打開設備的藍牙功能後會自動搜索到附近的設備,點擊確認連接即可完成設備與小程序的連接。
2、通過WIFI:在滿天星小程序敬擾中,點擊「設備」,選早態擇「WIFI連接」,再輸入設備的WIFI信息,根據提示完成設備的配置,即可完成小程序與設備的配對連接。
3、通過二維碼:在滿天星小程序中,點擊「亮睜旦設備」,選擇「掃碼添加」,對准設備的二維碼,便可完成小程序與設備的連接。
⑨ 小程序 藍牙連接
//初始化藍牙
initBlue() {
var that = this;
wx.openBluetoothAdapter({ //調用微信小程序api 打開藍牙適配器介面
success: function (res) {
console.log('1.初始化藍牙成功')
},
//監聽手機藍牙的開關
monitorTheBlue:function(){
var that =this;
wx.onBluetoothAdapterStateChange(function(res){
})
},
//開始獲取附近的藍牙設備
//. 獲取到附近的藍牙數組 通過藍牙特定的名稱獲取自己想要連接的藍牙設備
//. 獲取附近藍牙設備的數組
findBlue() {
console.log(new Date())
var that = this
wx.({
allowDuplicatesKey: false,
interval: 0,
success: function (res) {
console.log('2.正在搜索設備.............')
if (that.data.isFirestShow) {
wx.showLoading({
title: '正在搜索設備'
})
}
},
//搜索獲取附近的所有藍牙設備 獲取附近所有的藍牙設備的相關信息 獲取需要連接藍牙設備的deviceID
//. 通過bluetoothDeviceName 和 localName 來確定製定藍牙
//. 一般根據制定虧畢設備的名漏空局字去連接 設備的名字 是出產廠家設定
getBlue() {
var that = this
wx.getBluetoothDevices({
success: function (res) {
console.log('3.找到設備列表........')
wx.hideLoading()
// return false
var index = 10
for (var i = 0; i < res.devices.length; i++) {
if (res.devices[i].name && res.devices[i].localName) {
var arr = res.devices[i].name.split("-")
var secArr = res.devices[i].localName.split("-")
if (arr[0] == that.data.bluetoothDeviceName || secArr[0] == that.data.bluetoothDeviceName) {
},
//連接藍牙設備
//通過deviceId 連接藍牙
/**
},
/返讓/6 連接上需要的藍牙設備之後,獲取這個藍牙設備的服務uuid
//獲取設備的uuid
getServiceId() {
var that = this
wx.getBLEDeviceServices({
// 這里的 deviceId 需要已經通過 createBLEConnection 與對應設備建立鏈接
deviceId: that.data.deviceId,
success: function (res) {
var model = res.services[1]
that.setData({
servicesUUID: model.uuid
})
console.log('7.獲取設備 uuid 成功....')
that.getCharacteId() //6.0
}
})
},
//7 如果一個藍牙設備需要進行數據的寫入以及數據傳輸,就必須具有某些特徵值,所以通過上面步驟獲取的id可以查看當前藍牙設備的特徵值
//notify write read 當只有 notify為true的時候才能 接收藍牙設備傳來的數據,
//write 為true 才能傳入數據
//read 為true 才能讀取設備數據
getCharacteId() {
var that = this
wx.getBLEDeviceCharacteristics({
// 這里的 deviceId 需要已經通過 createBLEConnection 與對應設備建立鏈接
deviceId: that.data.deviceId,
// 這里的 serviceId 需要在上面的 getBLEDeviceServices 介面中獲取
serviceId: that.data.servicesUUID,
success: function (res) {
for (var i = 0; i < res.characteristics.length; i++) { //2個值
var model = res.characteristics[i]
if (model.properties.notify == true) {
that.setData({
characteristicId: model.uuid //監聽的值
})
console.log('8.model.properties.notify == true')
that.startNotice(model.uuid) //7.0
}
// if (model.properties.read == true) {
// that.readData(model.uuid)
// }
// if (model.properties.write == true) {
// that.setData({
// writeId: model.uuid//用來寫入的值
// })
// }
}
}
})
},
fordateTime1(){
let now = new Date(),hour = now.getHours()
console.log(hour)
let str = ''
if(hour < 7){str = '早餐前'}
else if ((7< hour) && (hour<= 9)){str = '早餐後'}
else if ((9< hour) && (hour<= 11)){str = '午餐前'}
else if ((11< hour) && (hour<= 13)){str = '午餐後'}
else if ((13< hour) && (hour<= 17)){str = '晚餐前'}
else if ((17< hour) && (hour<= 19)){str = '晚餐後'}
else if ((19< hour) && (hour<= 24)){str = '睡覺前'}
return str
},
//8 如果一個藍牙設備需要進行數據的寫入以及數據傳輸,就必須具有某些特徵值,所以通過上面步驟獲取的id可以查看當前藍牙設備的特徵值
//開啟設備數據監聽 監聽藍牙設備返回來的數據
startNotice(uuid) {
var that = this;
wx.({
state: true, // 啟用 notify 功能
deviceId: that.data.deviceId,
serviceId: that.data.servicesUUID,
characteristicId: uuid, //第一步 開啟監聽 notityid 第二步發送指令 write
success: function (res) {
// that.closeConnect(that.data.deviceId)
// 設備返回的方法
let tip = 0
wx.(res1 => {
},
/**
//監聽藍牙設備是否會異常斷開
() {
},
// 斷開設備連接
closeConnect: function(v) {
var that = this
if (v) {
wx.closeBLEConnection({
deviceId: v,
success: function(res) {
console.log("藍牙斷開連接")
that.closeBluetoothAdapter()
},
fail(res) {
}
})
} else {
that.closeBluetoothAdapter()
}
},
// 關閉藍牙模塊
closeBluetoothAdapter:function () {
wx.closeBluetoothAdapter({
success: function(res) {
console.log("關閉藍牙模塊")
},
fail: function(err) {
}
})
},
⑩ 7ma小程序怎麼開啟藍牙
可以在程序里的設置里進行開啟。
打開設置找到藍牙選項即可開啟。