Red de conocimiento informático - Conocimiento informático - Código fuente de Xiaomi 2

Código fuente de Xiaomi 2

La era del Internet de las cosas ha llegado y el desarrollo de Bluetooth juega un papel fácil en ella. He estado libre recientemente, así que me tomé el tiempo para recopilar algunos conocimientos sobre este tema.

Implica todo el proceso de comunicación Bluetooth entre el cliente (iniciar, escanear, conectar, enviar y recibir datos, empaquetar y desempaquetar) y el servidor (iniciar datos de transmisión, iniciar la transmisión, configurar servicios, operaciones de devolución de llamada del servidor). Y algunos problemas comunes, es decir, algunos escollos que se han pisado.

Por ejemplo

1. Debido a problemas de adaptación con diferentes versiones de Android o diferentes teléfonos móviles, los dispositivos Bluetooth no pueden escanear.

2. ¿Cómo evitar el error 133 en la conexión Bluetooth?

3. El tamaño de los datos escritos al mismo tiempo está limitado a 20 bytes. ¿Cómo enviar datos largos?

El Bluetooth se puede dividir en Bluetooth tradicional (clásico) y Bluetooth Ble (Bluetooth Low Energy) de bajo consumo, y sus API de desarrollo son diferentes. Este artículo se centra en el desarrollo de BLE Bluetooth. El Bluetooth tradicional está poco desarrollado. Puede aprenderlo usted mismo si es necesario.

En comparación con el Bluetooth tradicional y el Bluetooth BLE de bajo consumo, sus características principales son búsqueda rápida, conexión rápida, consumo de energía ultrabajo y transmisión de datos.

Cliente

Servidor de red informática

Android 4.3 (nivel de API 18) comenzó a introducir las funciones principales de BLE y proporcionar las API correspondientes. Las aplicaciones escanean dispositivos Bluetooth, consultan servicios y leen y escriben características del dispositivo a través de estas API.

El protocolo BLE Bluetooth es el protocolo GATT. No hay muchas clases relacionadas con BLE, todas están en varias clases del paquete android.bluetooth y del paquete android.bluetooth.le:

android.Bluetooth.

. BluetoothGattService contiene múltiples características (valores de características de atributos), identificadas por un UUID único.

. BluetoothGattCharacteristic contiene un valor único y varios descriptores, identificados por un UUID único.

. BluetoothGattDescriptor describe las características y contiene un UUID único como identificación.

. Relacionado con el cliente Bluetooth Gatt

. Devolución de llamada de conexión del cliente BluetoothGattCallback

. Relacionado con el servidor BluetoothGattServer

. BluetoothGattServerCallback devolución de llamada de conexión del servidor

android.Bluetooth.le. Devolución de llamada de transmisión de

. Datos de transmisión del servidor de devolución de llamada de publicidad. Publicar el servidor de datos. Configuración de transmisión de

. Servidor de configuración de publicidad.

transmisión. Servidor Bluetooth

. Relacionado con el escaneo del cliente del escáner Bluetooth (agregado en Android 5.0)

. Devolución de llamada de escaneo del cliente ScanCallback

. Filtro de análisis del cliente ScanFilter

Transmitir datos de los resultados del análisis. Cliente ScanRecord.

. Resultado del análisis del cliente ScanResult

. Configuración de escaneo Configuración de escaneo del cliente

Los dispositivos BLE se dividen en dos tipos: cliente (también llamado host/dispositivo central/central) y servidor (también llamado esclavo/periférico/periférico).

La clase principal del cliente es BluetoothGatt.

Las clases principales del servidor son BluetoothGattServer y BluetoothLeAdvertiser.

Las categorías principales de datos BLE son el tipo de carácter GATT de bluetooth y el tipo de descriptor GATT de bluetooth.

Los pasos de desarrollo del cliente y del servidor se explican en detalle a continuación.

Los teléfonos Android implican permisos de Bluetooth. El desarrollo de Bluetooth necesita agregar una declaración de permiso en el archivo AndroidManifest.xml:

Antes de buscar un dispositivo, debe solicitar abrir el Bluetooth del teléfono. :

Nota: Las direcciones de los dispositivos BLE son dinámicas (cambian de vez en cuando), mientras que los dispositivos Bluetooth clásicos vienen fijos de fábrica.

Al escanear dispositivos BLE, el dispositivo de destino se distingue según el nombre del dispositivo. El siguiente paso es conectarse al dispositivo de destino, por lo general toma algo de tiempo detener la búsqueda. tiempo. Es mejor llamar a la función de detener búsqueda con un retraso de 100 ms para garantizar que el sistema pueda dejar de buscar dispositivos Bluetooth por completo. Inicie el proceso de conexión después de detener la búsqueda;

El método de conexión de BLE Bluetooth es relativamente simple, simplemente llame al método connectGatt;

Descripción del parámetro

Después de establecer una conexión con el dispositivo, comunicarse con el dispositivo y todo el proceso de comunicación se completa en la función de devolución de llamada asíncrona de BluetoothGattCallback;

Las principales funciones de devolución de llamada en BluetoothGattCallback son las siguientes:

Las funciones de devolución de llamada anteriores son indispensables en el desarrollo de ble.

Después de llamar al dispositivo de destino. ConnectGATT (contexto, falso, gattcallback), el sistema iniciará activamente una conexión con el dispositivo Bluetooth BLE. Si se conecta correctamente al dispositivo, volverá a llamar al método onConnectionStateChange y el proceso de procesamiento es el siguiente:

Juzga el nuevo estado == Bluetooth gatt. state_connected indica que el dispositivo se ha conectado correctamente en este momento;

mbluetoothgatt. discover services();

Escanear los servicios del dispositivo BLE es un paso importante en el desarrollo de BLE Bluetooth en Android. sistemas. Generalmente se llama después de que el dispositivo se conecta correctamente, la función onServicesDiscovered() se vuelve a llamar después de escanear los servicios del dispositivo. El prototipo funcional es el siguiente:

El desarrollo de BLE Bluetooth lo completa principalmente BluetoothGattService, que es responsable de la comunicación. Cuando y llamó al servicio de comunicación. Los servicios de comunicación se obtienen a través del UUID proporcionado por el ingeniero de hardware. El método de recopilación es el siguiente:

El método de operación específico es el siguiente:

Iniciar el monitoreo, es decir, establecer el primer canal de datos para comunicarse con el dispositivo. En el desarrollo BLE, solo cuando el cliente activa con éxito el monitoreo, puede enviar y recibir datos con el servidor. El método para activar la supervisión es el siguiente:

El tamaño de los datos escritos por BLE al mismo tiempo es limitado, normalmente 20 bytes. Puede intentar aumentarlo mediante requestMTU, pero el éxito no está garantizado. La subcontratación es una solución que requiere la definición de un acuerdo de subcontratación. Suponiendo que el tamaño de cada paquete es de 20 bytes, existen dos tipos de paquetes, paquetes y no paquetes. Para un paquete, los primeros dos bytes representan el número de secuencia del paquete y el resto está lleno de datos. Para paquetes que no son de datos, se envía principalmente cierta información de control.

Después de un monitoreo exitoso, la comunicación con el servidor se puede lograr escribiendo datos en writeCharacteristic. El método de escritura es el siguiente:

Donde: el valor es generalmente un comando en formato hexadecimal y su contenido está especificado por el protocolo de comunicación Bluetooth para la comunicación del dispositivo;

Si el comando es escrito correctamente, la devolución de llamada está en BluetoothGattCallback El método onCharacteristicWrite() indica que los datos se han enviado a la computadora inferior;

Si los datos enviados cumplen con el protocolo de comunicación, el servidor responderá al cliente con los datos correspondientes. Los datos enviados se obtienen a través del método de devolución de llamada onCharacteristicChanged() y el método de procesamiento es el siguiente:

Al enviar instrucciones al servidor y obtener los datos de respuesta del servidor, se puede completar el proceso de comunicación con el dispositivo. ;

Después de completar la comunicación con el dispositivo, asegúrese de desconectarlo. Llame al siguiente método para desconectarse del dispositivo:

El código fuente se carga en CSDN, puede consultarlo si es necesario.

= = = = = = & gt; Código fuente de muestra de demostración para la comunicación Bluetooth Ble de Android: escaneo, conexión, envío y recepción de datos, paquetización y desembalaje.

El tamaño de los datos escritos por BLE al mismo tiempo es limitado, normalmente 20 bytes. Puede intentar aumentarlo mediante requestMTU, pero el éxito no está garantizado. La subcontratación es una solución que requiere la definición de un acuerdo de subcontratación. Suponiendo que el tamaño de cada paquete es de 20 bytes, existen dos tipos de paquetes, paquetes y no paquetes. Para un paquete, los primeros dos bytes representan el número de secuencia del paquete y el resto está lleno de datos. Para paquetes que no son de datos, se envía principalmente cierta información de control.

Todo el proceso es el siguiente:

1. Definir el protocolo de comunicación de la siguiente manera (esto es solo un ejemplo y se puede ampliar según las necesidades del proyecto).

2. Encapsular la interfaz universal de transmisión de datos (descomprimir)

La interfaz divide los datos en un máximo de bytes (generalmente 20 bytes) según el contenido de la cola de datos a enviar. . Después de dividirlo, se toma de la cola y se envía secuencialmente.

3. Encapsular la interfaz de recepción de datos universal (empaquetado)

En función de los datos recibidos, la interfaz analiza si la longitud de los datos es un paquete completo de acuerdo con la definición del protocolo. no, se acumula por mensaje.

4. Analizar el paquete de datos completo y realizar el procesamiento de lógica de negocios.

5. También se puede introducir en el protocolo el cifrado y descifrado. Al seleccionar los parámetros del algoritmo, la longitud del cifrado debe ser coherente con la longitud de los datos originales sin afectar el descompresión y la agrupación.

Generalmente es la adaptación de la versión de Android y los permisos de diferentes modelos de ROM (Xiaomi/Redmi, Huawei/Honor, etc.) (EMUI, MIUI, ColorOS, etc.).

Bluetooth Hay muchos problemas en el desarrollo de China. Si nos calmamos y analizamos los problemas, definitivamente se pueden resolver. Vamos.