La comunicazione Bluetooth è possibile senza associazione?


36

Sto lavorando su un dispositivo che può attivare un sistema "istantaneamente" in modalità wireless. La prima cosa che mi è venuta in mente è stata l'uso della tecnologia RFID che ha il vantaggio di una comunicazione istantanea ed economica. Tuttavia, sono interessato a utilizzare le funzionalità bluetooth del mio telefono per eseguire questa operazione.

Quindi la mia domanda è, per usare la comunicazione Bluetooth, c'è un modo per comunicare senza accoppiamento? In altre parole, a un livello molto semplicistico, supponiamo che il mio ricevitore Bluetooth si aspetti un codice "abc123". Un dispositivo Bluetooth, come un telefono, è programmato per trasmettere costantemente questo codice. Dopo aver ricevuto il codice, il sistema inizia a fare tutto ciò che dovrebbe una volta concesso l'accesso. Un tale sistema eliminerebbe la barriera di accoppiamento, ovviamente, a scapito della sicurezza.

Quindi questo concetto è una possibilità? Ho una scarsa comprensione dei protocolli di collegamento Bluetooth a livello molto tecnico, ma se qualcuno può darmi un vantaggio, posso iniziare a imparare da quel punto. Non considerare la mia comprensione limitata un vincolo.


C'è una modalità Bluetooth che fa proprio questo, ma non so come si chiama. È stato utilizzato per l'invio di pubblicità locali al passaggio di telefoni cellulari.
jippie,

2
Esistono vari moduli 433Mhz che trasmettono un segnale on / off "istantaneamente"; spesso usato negli apriporta del garage. Sono anche economici e facili da usare, anche se non offrono sicurezza intrinseca.
pjc50,

Risposte:


25

Sì, è del tutto possibile. Ho commentato questo in precedenza e da allora ho esaminato ulteriormente. È possibile fare in modo che il dispositivo Bluetooth di attivazione invii il segnale di attivazione tramite il suo nome descrittivo .

Il nome descrittivo è il nome leggibile che appare nell'elenco quando si cerca un dispositivo Bluetooth da abbinare. La velocità con cui si attiva dipende dalla velocità con cui il dispositivo ricevente esegue il polling per i nomi descrittivi. Non hai menzionato il tipo di dispositivo di ricezione che stai utilizzando, ma ho trovato questo PDF (P.35) che illustra in dettaglio il processo di aggiornamento dei nomi descrittivi dei dispositivi Bluetooth nel raggio d'azione.

Puoi eseguire il polling per i nomi descrittivi tutte le volte che lo desideri. Se il dispositivo di attivazione cambia il suo nome descrittivo nel codice di attivazione, abc123il dispositivo ricevente sarà in grado di vedere quel nome senza associazione e attivare qualsiasi attività che si sta tentando di eseguire. Questo ti consente anche di avere una moltitudine di codici di attivazione, penso che puoi ottenere fino a 248 byte per il nome Bluetooth amichevole.

Puoi anche cercare di aprirti intenzionalmente al Bluejacking . Non ne ho familiarità, ma se la sicurezza non è un problema potrebbe funzionare.


2
Perfetto, questo sembra essere il più promettente. Mi piace la semplicità del metodo del nome amichevole, e anche il Bluejacking sembra un ottimo candidato.
capcom

12

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:

  1. Disattivazione dell'associazione dei pin

  2. 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:

  1. Bluegiga WT12: utilizzare il comando SET BT AUTH *
  2. 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.


1
Grazie per una risposta superba! Molto da esaminare ora.
capcom

10

Ciò può essere realizzato con una tecnologia del marchio Bluetooth chiamata Bluetooth Smart (o Bluetooth Low Energy / Bluetooth 4.0) e anche a seconda del telefono in uso.

Il vantaggio principale di Low Energy rispetto al normale Bluetooth è che consuma molta meno energia e la durata prevista di un dispositivo potrebbe essere di anni a seconda dell'intervallo di connessione e di quanto pubblicizza su una batteria a bottone.

Per risolvere questo problema è possibile inserire il codice in questione all'interno dei dati pubblicitari del chip. ( Bluetooth 4.0 Core Spec. Volume 3, Parte C, Sezione 11.1.4 o 11.1.10)

Esistono 3 principali produttori di chip che producono chip a bassa energia (TI, CSR e Nordic Semiconductor)

Nordic ha un chip di connettività chiamato nRF8001 (un chip di connettività, dispositivo completo) e un SoC nRF51822 . Il vantaggio dell'utilizzo di nRF8001 è che è possibile utilizzare il processore preferito e non doversi preoccupare delle specifiche Bluetooth in quanto gestite dal chip. Il vantaggio di nRF51822 è che è un sistema su chip e riduce la distinta base, è in esecuzione Cortex-M0 e dovrebbe essere pienamente qualificato quando rilasciato.

Ho il chip SoC 8025 cc2540 e CSR il chip SoC CSR µEnergy

Tutto si riduce alle tue necessità e preferenze in termini di processore e funzionalità / costo



1

Il risultato di un'associazione riuscita è la chiave di collegamento, il segreto che i dispositivi associati condividono e consentono loro di comunicare.

Se è possibile impostare la chiave di collegamento sul sistema, sì, non è necessario alcun accoppiamento. Basta impostare la stessa chiave di collegamento su entrambi i dispositivi. Dopo che questa connessione può essere aperta correttamente, come se i due dispositivi fossero stati accoppiati.

Ad esempio su Linux dopo l'associazione, il infofile viene archiviato per ogni dispositivo abbinato in / var / lib / bluetooth / indirizzo-dispositivo locale / indirizzo-dispositivo remoto /

Dopo che la Generalsezione contiene il seguente: [LinkKey] Key=FF00112233445566778899AABBCCDDEE Type=5 PINLength=0

Questo può essere impostato direttamente senza associazione. Se lo stesso è scritto sul dispositivo remoto. I dispositivi sono associati.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.