Red de conocimiento informático - Problemas con los teléfonos móviles - Uniapp se conecta al dispositivo mediante Bluetooth y envía comandos.

Uniapp se conecta al dispositivo mediante Bluetooth y envía comandos.

openBluetoothAdapter() {

uni.openBluetoothAdapter({

Éxito: e = & gt{

// console.log('Inicialización de Bluetooth exitosa:'+ e. errmsg);

this.onBluetoothDeviceFound()

uni.getBluetoothAdapterState({

Éxito: función (res) {

//Comenzar a buscar después de la inicialización

If (recursos disponibles) {

if (res.discovering) {

// console.log('Detener conexión. ');

this.closeBluetooth()

}

uni . start descubrimiento de dispositivos bluetooth({

Éxito: res = & gt {

},

Error: res = & gt{

Onsole.log("¡Dispositivo no encontrado!");

uni.showToast({

Icono: "Ninguno",

Título: "¡Dispositivo no encontrado!",

Duración: 3000,

})

}

})

} De lo contrario {

Console.log("Bluetooth no está disponible en esta máquina ”)

}

}

})

},

Error: e = & gt{

if(e . errcode == 10001){

uni.showModal({

Título: "Preguntar",

Contenido : "Tu Bluetooth no está encendido, enciéndelo",

Éxito: función (res) {

if (res.confirm == true) {

if (uni.getSystemInfoSync(). plataforma == 'ios') {

} else if (uni.getSystemInfoSync().

Plataforma === 'android') {

}

}else{

uni.navigateBack({

URL: '. ./../Detalles 3/Detalles 3 '

})

}

},

});

}

Console.log('Error al inicializar Bluetooth, código de error: '+(e . errcode | | e . errmsg)

}

});

},

onBluetoothDeviceFound() {

// console.log("Escuchando nuevo dispositivo");

uni . onbluetoothdevicefound(devices = & gt; {

// console.log('Comenzar a escuchar eventos cuando se descubran nuevos dispositivos');

// Controlar Taiwan.log(devices.length);

this .getbluetooth devices();

});

},

getBluetoothDevices () {

// console.log("Obtener dispositivos Bluetooth");

uni.getBluetoothDevices({

Éxito: res = & gt{

// console.log('Obtener dispositivo Bluetooth');

this.resdic = res

// console.log(res)

//console . log(' dispositivos . longitud = = = = '+this . resdic . dispositivos . longitud);

for(set I = 0; i<this . resdic . dispositivos . longitud ; i++) {

Supongamos que dispositivos DIC = this . resdic . dispositivos[I];

if(dispositivos DIC . nombre & amp; & ampdevicesDic.name == ' & lt Dobby& gt'& amp& ampdevices DIC . anuncianteviceuuids){

this . dispositivos DIC id de dispositivo)

}

}

}

});

},<. /p>

createBLEConnection(id de dispositivo){

Console.log("Conectar Bluetooth - "+id de dispositivo)

// setTimeout(function(){

//that . closebleconnection();

//that . createbleconnection(ids de dispositivo)

// },5000)

uni.createBLEConnection ({

deviceId: deviceIds.toString(),

Éxito: (RES) = & gt; {

Console.log("Conexión Bluetooth exitosa" );

//this . getbledeviceservices(ID de dispositivo)

this.stopBluetooth()

Cambiar eso = this

uni.getSystemInfo({

Éxito(res) {

if (res.platform == 'ios') {

setTimeout(()= & gt;{

eso. getBLEDeviceServices(id de dispositivo)

}, 2000)

}si no {

setTimeout(()= & gt;{

eso .nogetBLEDeviceServices(identificación del dispositivo)

}, 3000)

}

},

Error (res) {

console.log(77777777777777)

}

})

},

Error: (res) = >{

Console.log('Error de conexión Bluetooth:'+res.errCode)

that . closebleconnection()

that.createBLEConnection(id del dispositivo)

},

});

},

getBLEDeviceServices asincrónico(id de dispositivo){

Cambiar eso =esto

dejar servicios del dispositivo = esperar uni getbledeviceservices({

DeviceId: deviceid

})

if (deviceServices [0] ] == null) {

let services = servicios del dispositivo[1]. Servicios

if (services.length == 0) {

setTimeout(()= & gt; {

that.getBLEDeviceServices(id de dispositivo)

p>

}, 1500)

} De lo contrario, {

console.log(service, 8888888888)

for(Set I = 0; I& ltservice.length; i++) {

Supongamos serviceId = servicios[i]. uuid

//console . log(' id de servicio = = = = '+id de servicio);

dejar caracteres DIC = esperar uni . >DeviceId: ID del dispositivo,

serviceId: serviceId,

})

. Entonces (data = & gt{

//console . log(JSON . stringify(data))

if (data[0] == null) {

Dejar caracteres arr = datos[1]. Características

Dejar propiedades = caracteres arr[0].

Rendimiento

console.log(properties)

if (properties.write == true) {

that.serviceIdStr = serviceId

que .characteristicidstr = data[1]. Características[0]. uuid

ese . notifyblecharacteryvaluechange(ese . caracteristidstr)

// console.log(deviceIds)

//console log(ese . service idstr)<. /p>

//console . log(that . Characteristidstr)

that.writeBLECharacteristic(deviceId, serviceid, that .characteristicIdStr)

}de lo contrario {

p >

Console.log('No editable', datos[1].Carácter[0].uuid)

}

}

} )

}

}

} En caso contrario {

uni.showModal({

Título: "Preguntar " ,

Contenido: "Error al obtener información de servicio del dispositivo, consígala nuevamente",

showCancel: false,

Éxito (res) {

uni.navigateBack({

URL: '../upload/upload'

})

}

} )

}

},

nogetBLEDeviceServices(id del dispositivo){

Cambiar eso=esto

console .log(777777)

uni.getBLEDeviceServices({

DeviceId: ID del dispositivo,

Éxito (res) {

Dejar Servicios = Servicios de recursos

console.log(services, 55555)

if (services.length == 0) {

setTimeout(()= & gt ; {

that.nogetBLEDeviceServices(identificación del dispositivo)

}, 3000)

} De lo contrario {

for(set I = 0 ;i<service.length; i++) {

Supongamos serviceId = services[i]. uuid

//Esto compara serviceId, los fabricantes de dispositivos hablarán de ello, debido a las características de Android. El valor no se puede escribir, pero lo que obtiene iOS se puede escribir, por lo que Android determina directamente si el serviceId es el serviceId enviado por el fabricante.

if (serviceId == '') {

uni getbledevicecharacteristics({

DeviceId: ID del dispositivo,

serviceId: serviceId ,

Éxito(resultado){

let propiedades DIC = resultado caracteres[0]

console.log(propertiesDic, 55555)

//if(properties DIC . properties . write == true){

that.serviceIdStr = serviceId

that . Characteristidstr = propiedades DIC ;

ese . notifyblecharacteryvaluechange(ese . caracteristidstr)

setTimeout(()= >{

ese.writeBLECharacteristic(deviceId, serviceid, ese .characteristicIdStr)

}, 2000)

// }Otro{

// console.log('not editable', propertiesDic.uuid)

// }

},

Error (resultado){

console.log(resultado, 2222222)

}

})

}

}

}

},

Error (res ) {

console.log(res, 8888888)

}

})

},

Este método debe llamarse De lo contrario, los datos devueltos por el dispositivo no se podrán monitorear. Siempre pensé que podría obtener el valor de retorno en la devolución de llamada de la universidad. valor de carácter grabable. Este método no funcionó, lo intenté durante varios días pero no funcionó.

notifyblecharacteryvaluechange(characteristid){

console.log(CharacteristicId, 'CharacteristicId')

uni . true, //Habilitar la función de notificación.

ID de dispositivo: this.deviceIdStr,

ID de servicio: this.serviceIdStr,

ID de característica: este .characteristidstr,

Éxito: ( RES)= & gt;{

// console.log(res)

//console . log(this . ID de caracter)

console log. ('notifyblecharacteryvaluechange exitoso', res)

//that .writeblecharacterization(id de dispositivo, serviceId, that.characteristicsIdStr)?

this.onBLECharacteristicValue()

},

Error: (res) = >{

console .log(' notifyblecharacteryvaluechange Success. 2 ', res.errMsg)

}

})

},

onBLECharacteristicValue() {

Cambiar eso=this

uni . onblecharacteristicvaluechange(function(RES){

//console . log(` caracterización ${ RES . carácter izid } ha cambiado, ahora es $ { RES . value } `)

let resultStr = that . buffer string(RES . value)

// console.log(resultStr, 111)

if(resultStr & ampresultStr!= '') {

//resultStr son los datos devueltos por el dispositivo. Dependiendo del dispositivo, el formato del dispositivo obtenido también es diferente.

}

})

},

writeBLECharacteristic(deviceId, serviceId, featureId) {

Cambiar that = this

console . log(1111111111)

let sgInt = that . string 2 buffer('<sAg>')

// console. log(sgInt.byteLength)

uni . writeblecharacteryvalue({

deviceId: that.deviceIdStr,

serviceId: that.serviceIdStr,

Id. de característica: that .IdStr de característica,

Valor: sgInt,

Éxito: función (res) {

console.log( Tipo de (res) )

console . log(' writeblecharacteryvalue Success ', res.errMsg)

// that.closeBluetooth()

},

Error: función (res) {

console.log(tipo de(res))

console . log(' writeblecharactervalue fail = = ', res. errCode, res.errMsg )

}

})

},

//Cadena a arraybuffer

string2buffer: función ( str) {

//Primero convierte la cadena a 16 hexadecimales.

Let val = " "

for(let I = 0; i & lt longitud de cadena; i++) {

if (val === ' ' ) {

val = str.charCodeAt(i). toString(16)

}else {

val += ', '+ str.charCodeAt(i). toString(16)

}

}

//Console. log(val)

//Convierte 16 en ArrayBuffer.

Devuelve new uint 8 array(val . match(/[\da-f]{ 2 }/gi).map(function(h) {

Devuelve parseInt(h , 16)

})).Buffer

},

//arraybuffer a cadena

bufferString: función (str ) {

Ejemplo de ArrayBuffer a 16 cadenas de progreso

Función ab2hex(buffer){

const hexArr = array prototipo call(

Nuevo Uint8Array(búfer),

Función(bit){

return(' 00 '+bit . tostring(16)).

segmento(-2)

}

)

return hexArr.join(' ')

}

//16 hexadecimal

Supongamos systemStr = ab2hex(str)

//console . log(hexCharCodeToStr(systemStr), 99)

Función hexCharCodeToStr(hexCharCodeStr ){

var trimedStr = hexcharcodestr . trim();

var rawStr =

trimedStr.substr(0, 2). toLowerCase() === "0x"?

trimedStr.substr(2):

trimedStr

var len = rawStr.length

if (len % 2!== 0) {

alert("¡Código ASCII de formato ilegal!");

Return "";

}

var curCharCode

var resultStr =[];

for(var I = 0; i & ltleni = i + 2) {

curCharCode = parse int(raw str . substr(I, 2), 16); // valor del código ASCII

Supongamos str 5 = cadena de charcode(curCharCode)

if(str 5 . comienza con(' \ n ')= = false){

resultstr . push(string . from charcode(curCharCode));

}

}

Devuelve resultadostr . join(" ");

}

//console .log(hexCharCodeToStr(systemStr), 888)

Devuelve hexCharCodeToStr(systemStr)

},

//Monitorear el evento de cambio del estado de la conexión Bluetooth Low Energy.

onBLEConnectionStateChange() {

uni . onbleconnectionstatechange(función(RES){

if (!res.connected) {

/ / console.log('Bluetooth desconectado')

this.closeBluetooth()

}

})

},

Detener Bluetooth(){

uni. Detener el descubrimiento de dispositivos bluetooth({

Éxito: e = & gt{

// console. log('Dejar de buscar dispositivos Bluetooth:'+e . errmsg);

},

Error: e = & gt{

// console. log('No se puede dejar de buscar dispositivos Bluetooth, código de error: '+e . errcode

}

});

},

//Cerrar módulo Bluetooth

closeBluetooth() {

uni.closeBluetoothAdapter({

Éxito(res) {

console.log(res)

}

})

}

},