Connessione Bluetooth 6LoWPAN tra due Raspberry Pis


3

Avevo questa domanda su Stack Overflow, ma mi è stato suggerito di migrare qui. È stato segnalato per l'attenzione del moderatore, ma non sono sicuro di come funzioni e non ho ricevuto alcun feedback, quindi ho pensato di porre la domanda qui:

Sto cercando di stabilire una connessione Bluetooth Smart tra due Raspberry PI dove posso usare IPSP (Internet Protocol Support Profile) in modo da poter comunicare con il protocollo IPv6 utilizzando 6LoWPAN.

Sono stato in grado di stabilire con successo questa comunicazione tra il Raspberry Pis e un kit di sviluppo Nordic nRF51, tuttavia come prova del concetto sto cercando di stabilire questa connessione tra le due scatole Raspberry Pi senza il kit di sviluppo Nordic nRF51.

Quindi il mio primo passo è stato quello di installare il Raspberry Pis. L'ho fatto con i passaggi dell'SDK IoT nRF5 di Nordic ( https://developer.nordicsemi.com ). So che i Raspberry Pis sono impostati correttamente perché entrambi funzionano con la scheda nRF51. Sono in grado di stabilire una connessione tra le schede Raspberry Pi e nRF51 e eseguire il ping della scheda nRF51 da Raspberry Pi.

Ora per stabilire la mia connessione Bluetooth tra Raspberry Pis, eseguo i seguenti passaggi: Sul dispositivo Master eseguo i seguenti comandi:

#need root access
sudo su

#enable 6lowpan over Bluetooth le
echo 1 > /sys/kernel/debug/bluetooth/6lowpan_enable

#start advertising Bluetooth LE service
hciconfig hci0 leadv

Sul dispositivo Slave eseguo i seguenti comandi:

#need root access
sudo su

#enable 6lowpan over Bluetooth le
echo 1 > /sys/kernel/debug/bluetooth/6lowpan_enable

#establish le connection to master
hcitool lecc 5C:F3:70:XX:XX:XX

Il comando hcitool lecc restituisce sempre "Connection Handle 64". A questo punto ho una connessione stabile tra i due dispositivi che posso verificare usando il comando hcitool con .

Ora sono in grado di eseguire il comando seguente sul master o sullo slave in cui l'indirizzo mac è l'indirizzo del dispositivo Bluetooth che sto collegando anch'io:

echo “connect 5C:F3:70:XX:XX:XX 1” > /sys/kernel/debug/bluetooth/6lowpan_control

Qualunque Raspberry Pi su cui eseguo il comando stabilisca una connessione 6lowpan e se eseguo il comando ifconfig vedo un nuovo dispositivo bt0. L'altro Raspberry Pi tuttavia non ottiene un dispositivo bt0. Ho provato a eseguire il comando ifconfig bt0 up e anche a eseguire lo stesso comando echo (cambiando l'indirizzo mac) ma nessuno dei due mi dà il dispositivo bt0.

Il dispositivo bt0 che appare sul Raspberry Pi su cui ho eseguito il comando scompare sempre dopo 39 secondi. Nel file di log / var / log / syslog sembra che il demone ntpd inizi ad ascoltare sull'interfaccia bt0 quando si presenta e poi, esattamente 39 secondi dopo, rilevi che l'interfaccia non c'è più e la rilascia. Ho provato ad assegnare un indirizzo IPv6 al dispositivo quando è attivo utilizzando il seguente comando:

ifconfig bt0 inet6 add 2001:db8::5cf3:70ff:feXX:XXXX/64 

Ho quindi eseguito un ping6 per eseguire il ping ininterrottamente nella speranza di mantenere l'interfaccia per un po 'di tempo, ma l'interfaccia è ancora inattiva dopo 39 secondi.

Sto usando due Raspberry Pi 2 modello B ed entrambi gli adattatori Bluetooth sono dispositivi Broadcom Corp BCM20702A0 Bluetooth 4.0 (usato lsusb per ottenere le informazioni sull'adattatore). Anche se gli adattatori sono elencati come Bluetooth 4.0, sono stato in grado di usarli con successo con il kit di sviluppo Nordic nRF51 per stabilire una connessione 6LoWPAN.

Dopo tutti i miei esperimenti, ecco le domande che ho:

  • È possibile fare quello che sto cercando di fare?
  • Qualcuno è stato in grado di stabilire con successo una connessione 6LoWPAN tra due dispositivi Linux che potrebbe dirmi cosa mi sto perdendo nei miei passi?
  • È necessario che uno dei dispositivi Bluetooth sia compatibile con Bluetooth Smart 4.2 per stabilire correttamente questa connessione?
  • Chiunque abbia familiarità con Bluez che può consigliare ulteriori passaggi da provare?

Qualsiasi aiuto sarebbe molto apprezzato.

Jon

MODIFICA 1:

Sono stato in grado di far funzionare questa connessione tra una scatola Ubuntu 14.04 e un Raspberry Pi installando il kernel precompilato 3.19 scaricato da qui: http://kernel.ubuntu.com/~kernel-ppa/mainline/linux-3.19. YZ-coda / 2016/01/07-vivido /

Continuo a non capire perché non funziona tra i due Raspberry Pis ma se trovo una soluzione la posterò qui.

MODIFICA 2:

Ubuntu 14.04 esegue Bluez 4 mentre Raspberry Pis esegue Bluez 5. dato che non ero in grado di connettere i due Raspberry Pis (con Bluez 5), ho pensato che avrei provato a connettere due istanze di Fedora 23 con Bluez 5 per vedere se c'è qualcosa che non va Bluez o il Raspberry Pis. Nei miei esperimenti sto sperimentando gli stessi comportamenti con le due istanze di Fedora 23 che ho fatto con i due Pis Raspberry (in cui la connessione 6lowpan si interrompe in meno di 30 secondi dopo la connessione).

La versione bluez in esecuzione sulle istanze Fedora 23 è 5.35 e la versione bluez in esecuzione su Raspberry Pis è 5.23.

Qualcuno ha idea del perché questo accada con Bluez 5.x?

Grazie,

Risposte:


2

Soluzione

Ho appena risolto il problema. il problema era con il kernel. Ho installato Ubuntu 15 ma ho avuto lo stesso problema di Raspberry Pis, quindi ho scaricato il sorgente per il kernel 4.4, configurato e creato un nuovo kernel. Una volta installato il nuovo kernel, tutto ha funzionato alla grande. Non sono sicuro se fosse il livello di patch del kernel o della configurazione, ma ora funziona.


1

Grazie per il tuo post. L'anno scorso stavo lavorando su IPv6 su BTLE e ho dovuto affrontare lo stesso identico problema. Dopo circa 39 secondi, il collegamento IPv6 su BLE tra il mio dispositivo master e quello secondario viene disconnesso. Questo è successo a me nel kernel Linux v4.1.x (sia per master che per slave). Sia il master che lo slave utilizzano le stesse piattaforme (mi dispiace non poter rivelare alcun dettaglio delle piattaforme a causa della riservatezza). Tutto quello che posso dire è che si tratta di una piattaforma x86_64 che esegue un sistema operativo Linux costruito utilizzando la piattaforma Yocto.

Quindi, abbastanza interessante, sono riuscito a ottenere risultati più promettenti sul kernel 3.19. In realtà ho usato uBuntu 14.04 LTS su entrambe le mie piattaforme. Sono stato in grado di aggiornare manualmente la versione BlueZ da BlueZ v4.101 a BlueZ v5.x. Non ricordo esattamente quale versione di BlueZ 5 stavo usando. Quindi, ho seguito i passaggi simili ai tuoi e sono stato in grado di trattenerlo con successo per un lungo periodo di tempo. Ricordo di essere andato a cena dopo e dura ancora dopo 30 minuti. Quindi ho continuato a eseguire il test per tutta la notte e la connessione è rimasta attiva!

Grazie per avermi fornito queste informazioni su quale versione del kernel Linux usare. Per quanto riguarda la patch che è stata applicata, forse potrebbe essere correlata a una di queste patch applicate: https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/log/?id= refs / tag / v4.4.27 & qt = grep & q = 6LoWPAN


Non sono in grado di aggiungere commenti poiché al momento non ho 50 reputazione. Quindi volevo solo condividere quello che so.
anandan111,
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.