# 블루투스 연결 과정에서 일부 API는 약 1~2초의 타이머 지연을 두고 실행해야 합니다. 애플릿에 이러한 요구 사항이 있다는 것을 왜 모르시나요?
#1. 먼저, Bluetooth:openBluetoothAdapter()를 초기화해야 합니다.
` ` js
if (wx.openBluetoothAdapter) {
wx.openBluetoothAdapter({
Success:function(res) {
/*로컬 머신의 블루투스 상태를 가져옵니다 */
setTimeout(()= & gt;{
getBluetoothAdapterState()
}, 1000)
},
Failure:function(error){
///초기화 실패
}
})
} otherwise{
}
```
#2. 로컬 블루투스를 사용할 수 있는지 확인:
#? 블루투스 초기화에 성공하면 위의 콜백에서 호출됩니다.
` ` js
getBluetoothAdapterState() {
var that = this
That.toastTitle= '블루투스 상태 확인 중'
wx.getBluetoothAdapterState() {
wx. {
Success:function(res) {
startBluetoothDevicesDiscovery()
},
Failure(res) {
console.log(res)
}
})
}
```
#3. 블루투스 장치 검색 시작:
`` js
start bluetooth devices discovery(){
var that = this
setTimeout(()= & gt;{
< p>wx . start bluetooth devices discovery({Success:function(res) {
/**블루투스 장치 목록 가져오기*/
that.getBluetoothDevices()
},
Failure(res) {
}
})
}, 1000)
}
```
#4. 검색된 블루투스 장치 목록 가져오기
# /* that.deviceName은 가져온 블루투스 장치의 이름입니다. 블루투스 장치에 표시되는 블루투스 주소는 안드로이드와 애플 폰에서 다르기 때문입니다. bluetooth*
` ` js
getBluetoothDevices() {
var that = this
setTimeout(()= & gt;{
wx. getBluetoothDevices({
Service:[],
allowDuplicatesKey: false,
interval:0,
success:function(res) {
if(RES . devices . length & gt; 0) {
if (JSON.stringify(res.devices). indexOf(that.deviceName)! == -1) {
for(set I = 0; I& lt resource, device, length; i++) {
if(that . device name = = = = RES . devices[I]. Name){
/* 지정된 블루투스 장치 이름에 따라 장치 ID 일치 */
that.deviceId = that.devices[i]. deviceId
setTimeout(() = & gt;{
that . connect to();
}, 2000);
};
};
}else{
} else{
}else{
}
},
failure(res) {
Console.log(res. 'Unable to get list of Bluetooth devices = = = = = ')
}
})
},
``
#5. 블루투스 연결
#블루투스 장치 ID와 일치하면 블루투스 연결 요청을 보냅니다. 연결에 성공하면 블루투스 검색용 API 연결을 끊은 다음 연결된 블루투스 장치의 서비스를 가져옵니다.
` ` js
connectTO() {
wx.createBLEConnection({
DeviceId:DeviceId,
Success:Function (res) {
그 . 연결된 디바이스 ID = 디바이스 ID;
/* 4. 연결된 디바이스의 서비스 서비스를 가져옵니다 */
that . getbledeviceservices();
wx . 중지 블루투스 장치 검색({
성공:함수(res) {
콘솔.로그(res, "검색 중지")
},
실패(res) {
}
})
},
Failure:function(res) {
}
})
}
``
#6. 블루투스 장치에 대한 서비스 가져오기. 여러 서비스 ID에 연결을 시도하고 어떤 것이 안정적인 서비스 버전인지 확인합니다. 서비스를 받은 후 장치 서명 값을 가져옵니다.
` ` js
getBLEDeviceServices() {
setTimeout(() = & gt;{
wx.getBLEDeviceServices({
device id:that . 연결된 장치 id,
success:function(res) {
services=researchServices
/*연결된 장치의 모든 특성 값을 가져옵니다 */
that . getbledevicecharacteristics()
},
fail:(res) = >{
}
})
}, 2000)
},
``
#7.
#취득할 특성 값이 많을 경우, 읽기-쓰기-모니터링 가능한 값의 uuid가 특성 값 id로 사용됩니다.
`` js
getBLEDeviceCharacteristics() {
setTimeout(() = & gt;{
wx . getbledevicecharacteristics({
DeviceId: connectedDeviceId,
ServiceId:service[2]. uuid,
success:function(res) {
for(var I = 0; I& lt resolution, characteristics, Length; i++) {
if((RES . characters[I]. properties . notify | | RES . characters[I]. properties . indicate)& amp; & amp
(RES . characters[I]. properties . read & amp;& ampRES . characters[I]. properties . 쓰기)){
Console.log (Res. characters [I].uuid, '블루투스 기능 값 = = = = = = = ')
/*블루투스 기능 값 가져오기**
that . 알림 문자 id = RES . characters[I]. uuid
//저전력 블루투스 장치의 기능 값이 변경될 때 알림을 활성화합니다.
그 . notifyblecharactervaluechange()
}
}
},
fail:function(res) {
}
})
}, 1000)
},
``
#8. 블루투스 모니터 알림 기능을 시작한 다음 wx. onblecharacteristicValueChange를 사용하여 블루투스 장치에서 전송되는 데이터를 모니터링합니다.
#수신 및 전송 데이터는 이진 데이터여야 하며, 페이지가 표시될 때 변환해야 합니다.
` ` js
notifyblectric value change(){// 저전력 블루투스 장치의 기능 값이 변경될 때 알림을 활성화합니다.
var that = this
Console.log('6. 저전력 Bluetooth 장치의 기능 값이 변경될 때 알림을 활성화합니다')
wx . notifyblecharacteryvaluechange({
state:true,
device id:that . 연결된 장치 ID,
서비스 ID:해당 . notifyservicweid,
feature id:that . notify characteristic id,
completion(remaining){
/*휴대폰의 블루투스 장치의 데이터 변경 사항을 모니터링하는 데 사용 */
wx . onblecharacteristicvaluechange(function(RES){
/**/
that . balancedata+= that . buf 2 문자열(RES . value)
that . hex str+= that . receive data(RES . value)
})
},
fail(res) {
Console.log(res, "저전력 블루투스 장치 모니터링을 활성화할 수 없습니다.")
that . 측정 힌트(res)
}
})
},
/**원하는 형식으로 변환 */
buf2string(buffer){
var arr = array . prototype . map . call(new uint 8 array(buffer), x = & gtx)
return arr.map((char, I) = & gt;{
return string . from charcode(char);
}). join("");
},
수신 데이터 (버퍼){
반환 이 . 헥스카르코데토스트르(this . ab 2 hex(buf))
},
/**변환 바이너리로*/
ab2hex(buffer){
?var hexArr = array . prototype . map . call(
? new uint 8 array (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& ltleni = i+ 2) {
?curCharCode = parse int(raw str . substr(I, 2), 16);
?resultstr . push(string . from charcode(curCharCode));
}
? resultstr을 반환합니다. join("");
},
``
#블루투스 장치로 데이터 보내기
` ` js
데이터 보내기 (문자열){
Let that = this;
데이터 보내기 buffer = 새 배열 buffer(str . length)
let dataView = new dataView(data buffer)
for(var I = 0; I& lt string length; i++) {
dataView.setUint8(i, str.charAt(i). charCodeAt())
}
데이터 헥스 = 그 . ab 2 헥스(데이터 버퍼);
this . 쓰기 데이터 = 그 . 헥스카르코데토스트르(데이터 헥스);
wx . writeblecharacteryvalue({
장치 id:that . 연결된 장치 ID,
서비스 ID:그 . notifyservicweid,
feature id:that . notify 기능 id,
value:데이터 버퍼,
success:function(res) {
Console.log('Data sent:'+that.writeDatas)
Console.log("메시지를 성공적으로 보냈습니다! ")
},
Failure:Function(res) {
},
Completion:Function(res) {
}
})
,
``
#블루투스에 연결할 필요가 없는 경우 블루투스를 끄고 블루투스 모듈을 끕니다.
` ` js
//장치 연결을 해제합니다.
closeConnect() {
if (that.connectedDeviceId) {
wx.closeBLEConnection({
device id:that . 연결된 장치 id,
success:function(res) {
that.closeBluetoothAdapter()
},
failure(res) {
}
})
} otherwise {
that.closeBluetoothAdapter()
}
},
>
/블루투스 모듈 닫기
closeBluetoothAdapter() {
wx.closeBluetoothAdapter({
성공:함수(res) {
},
실패:함수(오류){
}
})
,
``
#블루투스 장치와 데이터를 주고받는 동안 읽기 API를 사용하지 않아 문제가 발생할 가능성이 있는지 알 수 없습니다. 현재 온라인에서 실행하여 문제가 있는지 확인 중입니다.
##오늘의 블루투스 체험은 이것으로 마치겠습니다.