¿Es posible la comunicación Bluetooth sin emparejamiento?


36

Estoy trabajando en un dispositivo que puede activar un sistema de forma inalámbrica "al instante". Lo primero que se me ocurrió fue utilizar la tecnología RFID que tiene la ventaja de una comunicación instantánea y económica. Sin embargo, estoy interesado en utilizar las capacidades bluetooth de mi teléfono para realizar esta tarea.

Entonces mi pregunta es, para usar la comunicación Bluetooth, ¿hay alguna manera de comunicarse sin emparejar? En otras palabras, a un nivel muy simplista, supongamos que mi receptor Bluetooth espera un código "abc123". Un dispositivo Bluetooth, como un teléfono, está programado para transmitir constantemente este código. Al recibir el código, el sistema comienza a hacer lo que se supone que debe hacer una vez que se le otorga acceso. Tal sistema eliminaría la barrera de emparejamiento, por supuesto, a costa de la seguridad.

Entonces, ¿es este concepto una posibilidad? Tengo poca comprensión de los protocolos de enlace Bluetooth a un nivel muy técnico, pero si alguien me puede dar una pista, puedo comenzar a aprender desde ese punto. No considere mi comprensión limitada como una restricción.


Hay un modo Bluetooth que hace exactamente eso, pero no sé cómo se llama. Se usaba para enviar anuncios locales a teléfonos móviles que pasaban.
jippie

2
Hay varios módulos de 433Mhz que transmitirán una señal de encendido / apagado "instantáneamente"; de uso frecuente en abridores de puertas de garaje. También son baratos y fáciles de operar, aunque no brindan seguridad inherente.
pjc50

Respuestas:


25

Sí, es completamente posible. Comenté sobre esto anteriormente y desde entonces lo he investigado más a fondo. Puede hacer que el dispositivo Bluetooth que dispara envíe la señal de activación a través de su nombre descriptivo .

El nombre descriptivo es el nombre legible por humanos que aparece en la lista cuando busca un dispositivo Bluetooth para emparejarse. La velocidad a la que esto se activa depende de la rapidez con la que el dispositivo receptor busca nombres amigables. No ha mencionado qué tipo de dispositivo receptor está utilizando, pero encontré este PDF (Pág. 35) que detalla el proceso para actualizar los nombres descriptivos de los dispositivos Bluetooth dentro del alcance.

Puede sondear los nombres descriptivos con la frecuencia que necesite. Si su dispositivo activador cambia su nombre descriptivo al código de activación abc123, entonces el dispositivo receptor podrá ver ese nombre sin emparejar y activar cualquier tarea que esté intentando realizar. Esto también le permite tener una multitud de códigos de activación, creo que puede obtener hasta 248 bytes para el nombre amigable de Bluetooth.

También puede considerar abrirse intencionalmente al Bluejacking . No estoy familiarizado con eso, pero si la seguridad no es un problema, podría funcionar.


2
Perfecto, esto parece ser lo más prometedor. Me gusta la simplicidad del método de nombre amigable, y Bluejacking también parece ser un gran candidato.
capcom

12

La respuesta corta es sí, es posible usar Bluetooth sin emparejamiento. Sin embargo, seguirá siendo siempre un enlace punto a punto. También hay problemas potenciales con el no uso del emparejamiento (principalmente la falta de seguridad y la falta de un buen soporte para este modo de operación). Si se puede hacer depende del hardware Bluetooth de su receptor. Supongo que está utilizando Bluetooth 'estándar' en lugar de Bluetooth de baja energía (que es completamente diferente y no es particularmente compatible con teléfonos móviles). Si usa poca energía, entonces su transmisor sería un dispositivo de baja energía y su receptor sería algo que escuche los mensajes. No he usado esto, así que no puedo darle ninguna información sobre esto, así que me quedaré con Bluetooth 'normal'.

A mi entender, hay dos problemas que superar:

  1. Desactivar el emparejamiento de pines

  2. Inicio de conexión automática

Cubriré el número 2 primero, ya que tengo la impresión de que esto es lo que realmente te interesa (disculpas si estoy leyendo esto mal). Para hacer esto desde un teléfono u otro dispositivo 'maestro', tendría que buscar continuamente dispositivos Bluetooth remotos. Cuando reconocía uno que era aplicable, se conectaba automáticamente a él y enviaba algunos datos u otros que iniciarían cualquier acción requerida. Otros han mencionado el uso del nombre amigable de Bluetooth para este proceso y esa es ciertamente una forma de hacerlo. Mi experiencia con los nombres compatibles con Bluetooth (especialmente pero no exclusivamente con la pila Bluetooth de Microsoft) es que no son un método de escaneo tan robusto. Probablemente sea mucho mejor usar la clase de dispositivo Bluetooth, que se transmite al mismo tiempo que la dirección de dispositivo única. Esta clase de dispositivo tiene una gran cantidad de entradas predeterminadas para cosas como teléfonos móviles, computadoras portátiles, computadoras de escritorio, etc. Si usa una de las clases de dispositivos no estándar (por ejemplo, 00:00:00), podrá instantáneamente para filtrar la gran mayoría de los dispositivos Bluetooth. Luego puede conectarse al dispositivo restante y hacer algún tipo de comunicación de confirmación de solicitud para iniciar su acción. Si hace esto adecuadamente oculto (o verifica el nombre descriptivo como una segunda consideración), debería filtrar implícitamente cualquier dispositivo incorrecto restante.


Con respecto al número 1, el emparejamiento de pines no es particularmente lógico si está creando conexiones transitorias, pero aún así puede ser la mejor manera de lograr lo que desea hacer. Si desea evitar el emparejamiento de pines, se puede desactivar y se puede establecer una conexión no emparejada. La forma de hacerlo depende de la implementación del receptor Bluetooth, pero aquí hay algunos ejemplos:

  1. Bluegiga WT12: use el comando SET BT AUTH *
  2. National Semiconductor LMX9838: use el comando GAP_SET_SECURITY_MODE con el modo de seguridad 1 (sin emparejamiento)

etc.

La conexión al dispositivo se puede hacer sin emparejar. Si el dispositivo que inicia la conexión es el mismo que el receptor, esto es muy sencillo. Si está utilizando una PC con Windows, puede pasar por el laborioso crear un nuevo proceso de conexión y elegir "no usar un pin", aunque Windows probablemente aún le pedirá un pin cuando se conecte (0000 generalmente funciona, pero Es muy escamosa). Si está utilizando python con pybluez, es muy simple:

import bluetooth
sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect((<insert MAC address>, <insert port number>))

Sin embargo, si desea conectarse desde un teléfono móvil, se vuelve mucho más complicado. El SDK de Android no parece admitir realmente conexiones no emparejadas:

Las API de Android Bluetooth actuales requieren que los dispositivos se emparejen antes de que se pueda establecer una conexión RFCOMM. (El emparejamiento se realiza automáticamente cuando inicia una conexión cifrada con las API de Bluetooth).

(de http://developer.android.com/guide/topics/connectivity/bluetooth.html ). Hay formas de evitar esto, pero son muy complicadas y no están bien soportadas. Si está utilizando un iPhone, entonces la conectividad Bluetooth es una lata completamente diferente de gusanos (licencias, etc.), así que lo dejaré por ahora.


Habiendo dicho todo eso, casi todas las API que he visto permiten el emparejamiento ydesemparejamiento para llevarse a cabo (con la notable excepción de python / pybluez, pero eso es solo una envoltura alrededor de la pila de Microsoft en Windows, por lo que siempre puede llamar directamente a la función de bajo nivel). Entonces, cuando haya detectado un dispositivo con la clase de dispositivo correcta, ¿por qué no simplemente emparejar automáticamente (con un número de pin de emparejamiento predefinido), realizar la conexión, enviar los datos necesarios, desconectar y luego desvincular. Nada de esto requeriría ninguna intervención del usuario y siempre que no lo esté haciendo miles de veces (lo que podría causar problemas con el desgaste de EEPROM), no debería causarle ningún problema. También le ahorrará muchos problemas al tratar de hacer que diferentes API funcionen bien con lo que se percibe como un método no estándar de uso de Bluetooth.


1
Gracias por una excelente respuesta! Mucho para mí ahora.
capcom

10

Esto se puede lograr con una tecnología dentro de la marca Bluetooth llamada Bluetooth Smart (o Bluetooth Low Energy / Bluetooth 4.0) y también dependiendo del teléfono que tenga.

El principal beneficio de Low Energy sobre Bluetooth normal es que consume mucha menos energía, y la vida útil esperada de un dispositivo podría ser de años, dependiendo del intervalo de conexión y de cuánto se anuncia en una batería de celda de moneda.

Para resolver este problema, puede poner el código en cuestión dentro de los datos publicitarios del chip. ( Bluetooth 4.0 Core Spec. Volumen 3, Parte C, Sección 11.1.4 o 11.1.10)

Hay 3 fabricantes principales de chips que producen chips de baja energía (TI, CSR y Nordic Semiconductor)

Nordic tiene un chip de conectividad llamado nRF8001 (un chip de conectividad, dispositivo totalmente calificado) y un SoC nRF51822 . El beneficio de usar el nRF8001 es que puede usar el procesador que prefiera y no tener que preocuparse por la especificación Bluetooth, ya que el chip lo maneja. El beneficio de nRF51822 es que es un sistema en chip y reduce la lista de materiales, ejecuta Cortex-M0 y debe estar completamente calificado cuando se lance.

TI tiene el chip 8025 SoC cc2540 y CSR tiene el chip SoC CSR µEnergy

Todo se reduce a su necesidad y preferencia en procesador y funcionalidad / costo



1

El resultado de un emparejamiento exitoso es la clave de enlace, el secreto que comparten los dispositivos emparejados y les permite comunicarse.

Si es posible establecer la clave de enlace en el sistema, entonces sí, no se necesita emparejamiento. Simplemente configure la misma clave de enlace en ambos dispositivos. Después de que esta conexión se pueda abrir con éxito como si los dos dispositivos se hubieran emparejado.

Por ejemplo, en Linux después del emparejamiento, el infoarchivo se almacena para cada dispositivo cortado en / var / lib / bluetooth / local-device-address / remote-device-address /

Después de la Generalsección contiene lo siguiente: [LinkKey] Key=FF00112233445566778899AABBCCDDEE Type=5 PINLength=0

Esto se puede configurar directamente sin emparejamiento. Si lo mismo está escrito en el dispositivo remoto. Los dispositivos están emparejados.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.