Bluez en modo periférico BLE: Android no puede recuperar la lista de servicios, está bien con iPhone y Win10

Bluez en modo periférico BLE: Android no puede recuperar la lista de servicios, está bien con iPhone y Win10

Intento hacer que una Raspberry Pi 3B+ actúe como un periférico BLE.

Descargué la última versión (5.50) de bluez stack aquí:https://git.kernel.org/pub/scm/bluetooth/bluez.git. Ejecuto los ejemplos proporcionados en el directorio /test/.

Cuando ejecuto "example-advertisement" y "example-gatt-server" al mismo tiempo bajo la raíz con python 2.7 o python 3.5, puedo ver el nuevo periférico BLE con dispositivos Linux Mint, Win10, IOS y Android. Sin embargo, aunque Linux, IOS y Win10 logran conectarse y recuperar la lista de servicios y características, Android (4.4, 5.1 o 7.0, probado con 5 marcas diferentes de teléfonos inteligentes y tabletas) no puede conectarse al dispositivo.

Vi este tema:https://raspberrypi.stackexchange.com/questions/90696/bluetooth-low-energy-gatt-services-not-found-on-androidpero no estoy usando mi propia aplicación por el momento. Incluso varias aplicaciones de escaneo BLE que podemos encontrar en Play Store no logran conectarse y recuperar la lista de servicios.

Parece que no está relacionado con el hardware o software específico de Raspberry Pi porque también lo probé con otra computadora de placa única (Variscite DART-6UL,https://www.variscite.com/product/system-on-module-som/cortex-a7/dart-6ul-freescale-imx-6ul) y obtengo exactamente el mismo comportamiento.

¿Alguien tiene una idea?

Gracias.

Respuesta1

Me rindo después de mucha investigación. La aplicación "nRF Connect" logra conectarse a mi dispositivo y recuperar la lista de características, pero no todo el tiempo: - En algunos dispositivos Android, solo necesito hacer clic en "Conectar" - En otros, debo hacer clic en "Autoconexión" en el Submenú de 3 puntos.

Sin embargo, muchas otras aplicaciones no se conectan en absoluto, incluida la mía, con o sin Autoconexión.

Agregar algunos retrasos (100 ms entre el descubrimiento de periféricos y la conexión y 100 ms entre el estado de conexión y el descubrimiento de servicios) hace que algunos dispositivos se conecten correctamente, pero no todos.

información relacionada