La risposta breve è sì, è possibile utilizzare il Bluetooth senza associazione. Tuttavia, sarà sempre un collegamento punto a punto. Esistono anche potenziali problemi con il mancato utilizzo dell'associazione (principalmente la mancanza di sicurezza e la mancanza di un buon supporto per questa modalità operativa). La possibilità di farlo dipende dall'hardware Bluetooth del ricevitore. Suppongo che tu stia utilizzando Bluetooth "standard" anziché Bluetooth a basso consumo (che è completamente diverso e non particolarmente ben supportato nei telefoni cellulari). Se stai usando a basso consumo, allora il tuo trasmettitore sarebbe un dispositivo a basso consumo e il tuo ricevitore sarebbe qualcosa che ascolta i messaggi. Non l'ho usato, quindi non posso darti alcuna informazione al riguardo, quindi mi atterrerò con un Bluetooth "normale".
A mio avviso, ci sono due problemi da superare:
Disattivazione dell'associazione dei pin
Avvio automatico della connessione
Coprirò prima il numero 2 dato che ho l'impressione che questo sia ciò a cui sei veramente interessato (mi scuso se sto leggendo questo male). Per fare ciò da un telefono o da un altro dispositivo "master", dovrebbe cercare continuamente dispositivi Bluetooth remoti. Quando ne riconosceva uno che era applicabile, si connetteva automaticamente ad esso e inviava alcuni dati o altro che avvierebbe qualsiasi azione fosse richiesta. Altri hanno menzionato l'uso del nome descrittivo Bluetooth per questo processo e questo è certamente un modo per farlo. La mia esperienza con nomi compatibili con Bluetooth (specialmente ma non esclusivamente con lo stack Microsoft Bluetooth) è che non sono un metodo di scansione così robusto. Probabilmente faresti molto meglio a utilizzare la classe di dispositivi Bluetooth, che viene trasmesso contemporaneamente all'indirizzo univoco del dispositivo. Questa classe di dispositivi ha un gran numero di voci predefinite per cose come telefoni cellulari, laptop, desktop ecc. Se usi una delle classi di dispositivi non standard (ad es. 00:00:00), sarai immediatamente in grado per filtrare la stragrande maggioranza dei dispositivi Bluetooth. È quindi possibile connettersi al dispositivo rimanente ed eseguire una sorta di comunicazione di conferma della richiesta per avviare l'azione. Se lo rendi adeguatamente oscuro (o controlla il nome descrittivo come seconda considerazione), dovrebbe implicitamente filtrare eventuali dispositivi errati rimanenti.
Per quanto riguarda il numero 1, l'associazione dei pin non è particolarmente logica se si stanno creando connessioni transitorie, ma può comunque essere il modo migliore per ottenere ciò che si desidera fare. Se si desidera evitare l'associazione dei pin, può essere disattivato e può essere stabilita una connessione non accoppiata. Il modo in cui lo fai dipende dall'implementazione del ricevitore Bluetooth, ma ecco alcuni esempi:
- Bluegiga WT12: utilizzare il comando SET BT AUTH *
- National Semiconductor LMX9838: utilizzare il comando GAP_SET_SECURITY_MODE con la modalità di sicurezza 1 (nessuna associazione)
eccetera.
La connessione al dispositivo può quindi essere eseguita senza associazione. Se il dispositivo che avvia la connessione è lo stesso del ricevitore, questo è molto semplice. Se stai usando un PC Windows, puoi passare attraverso la laboriosa creazione di un nuovo processo di connessione e scegliere "non utilizzare un pin", anche se Windows ti chiederà probabilmente ancora un pin quando ti connetti (0000 di solito funziona, ma è molto traballante). Se stai usando Python con Pybluez, è molto semplice:
import bluetooth
sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect((<insert MAC address>, <insert port number>))
Se, tuttavia, vuoi connetterti da un telefono cellulare, diventa molto più complicato. L'SDK di Android non sembra davvero supportare connessioni non accoppiate:
Le attuali API Bluetooth Android richiedono che i dispositivi siano associati prima di poter stabilire una connessione RFCOMM. (L'associazione viene eseguita automaticamente quando si avvia una connessione crittografata con le API Bluetooth.)
(da http://developer.android.com/guide/topics/connectivity/bluetooth.html ). Ci sono modi per aggirare questo, ma sono molto complicati e non ben supportati. Se stai usando un iPhone, la connettività Bluetooth è una lattina completamente diversa di worm (licenze ecc.), Quindi per ora lo lascerò.
Detto questo, praticamente tutte le API che io abbia mai visto consentono l'accoppiamento enon accoppiabile da eseguire (con la notevole eccezione di python / pybluez, ma questo è solo un wrapper attorno allo stack Microsoft su Windows, quindi puoi sempre chiamare direttamente la funzione di basso livello). Quindi, quando hai individuato un dispositivo con la giusta classe di dispositivi, perché non accoppiare automaticamente (con un numero pin di accoppiamento predefinito), effettuare la connessione, inviare i dati richiesti, disconnettersi e quindi annullare l'abbinamento. Niente di tutto ciò richiederebbe l'intervento dell'utente e fintanto che non lo stai facendo migliaia di volte (che potrebbe potenzialmente causare problemi con l'usura della EEPROM), non dovrebbe causare alcun problema. Ti risparmierà anche molta seccatura nel cercare di far funzionare bene diverse API con quello che viene percepito come un metodo non standard di utilizzo del Bluetooth.