您當前位置>首頁 » 新聞資(zī)訊 » 小程序相關(guān) >
熊晨沣藍牙實戰--小程序藍牙連接2.0
發表時間:2021-4-22
發布人:葵宇科技
浏覽次數:59
微信小程序藍牙連接2.0說明:
1、本版本區分了ANDROID和(hé)IOS系統下(xià)藍牙連接的不同方式。
2、兼容了更多情況下(xià)的鍊接包括:
(1)未開啟設備藍牙,當監聽到開啟了藍牙後自動(dòng)開始連接。
(2)初始化藍牙失敗後每3000ms自動(dòng)重新初始化藍牙适配器(qì)。
(3)安卓端開啟藍牙适配器(qì)掃描失敗,每3000ms自動(dòng)重新開啟。
(4)IOS端獲取已連接藍牙設備為空,每3000ms自動(dòng)重新獲取。
(5)安卓端藍牙開始鍊接後中(zhōng)斷掃描,連接失敗了,重新開始掃描。
(6)IOS端開始連接設備後,停止獲取已連接設備,連接失敗自動(dòng)重新開啟獲取。
(7)連接成功後,關(guān)閉系統藍牙,藍牙适配器(qì)重置。
(8)連接成功後,關(guān)閉系統藍牙,再次打開藍牙,自動(dòng)重新開始連接。
(9)連接成功後,關(guān)閉目标藍牙設備,自動(dòng)重新開始掃描(獲取)。
(10)連接成功後,最小化小程序(連接未中(zhōng)斷),打開小程序顯示已連接。
(11)連接成功後,殺掉小程序進程,連接關(guān)閉,自動(dòng)重新開始掃描(獲取)。
3、想起來了再來更新....。
4、流程圖,明天或後天或...誰有空幫我畫一下(xià)也行。
我的連接是在App.js中(zhōng)做的。
在App.js中(zhōng)的onLaunch觸發是調用 init()方法。
init代碼:
init: function (n) {
this.list = [];
this.serviceId = "6E400001-B5A3-F393-E0A9-E50E24DCCA9E";
this.serviceId_2 = "00001803-0000-1000-8000-00805F9B34FB";
this.serviceId_3 = "00001814-0000-1000-8000-00805F9B34FB";
this.serviceId_4 = "00001802-0000-1000-8000-00805F9B34FB";
this.serviceId_5 = "00001804-0000-1000-8000-00805F9B34FB";
this.serviceId_6 = "00001535-1212-EFDE-1523-785FEABCD123";
this.characterId_write = "6E400042-B5A3-F393-E0A9-E50E24DCCA9E";
this.characterId_read = "6E400012-B5A3-F393-E0A9-E50E24DCCA9E";
this.connectDeviceIndex = 0;
this.isGettingConnected = false;
this.isDiscovering = false;
this.isConnecting = false;
this.connectedDevice = {};
console.log('init state', this.connectedDevice.state);
if (!this.connectedDevice.state || n == 200) {
this.connectedDevice.state = false;
this.connectedDevice.deviceId = '';
this.adapterHasInit = false
}
this.startConnect();
}
說明:
1、 serviceId_2~6 是我已知的想要連接的藍牙設備的serviceId可(kě)以隻寫一個(gè)。
2、characterId_write 是我已知的想要連接的藍牙設備寫入數據的特征值。
3、characterId_read是我已知的想要連接的藍牙設備讀取數據的特征值。
(以上3個(gè)都是為了做比對,真實的操作按照獲取到的sericeid, characterid為準)。
4、connectedDevice 是已連接了的設備信息對象。
init完成後開始調用連接 startConnect();
startConnect代碼:
startConnect: function () {
var that = this;
if (that.connectedDevice.state) return;
that.connectedDevice.deviceId = "";
that.connectedDevice.state = false;
// 如(rú)果适配器(qì)已經初始化不在調用初始化(重複初始化會報錯)
if (this.adapterHasInit == undefined || this.adapterHasInit) return;
wx.showLoading({
title: '初始化藍牙',
duration: 2000
});
// 開啟藍牙适配器(qì)狀态監聽