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:
Desactivar el emparejamiento de pines
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:
- Bluegiga WT12: use el comando SET BT AUTH *
- 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.