Sto cercando di configurare una porta seriale virtuale tramite un adattatore USB-Bluetooth su Linux e di inviarle un messaggio tramite un dispositivo Android. I “m nel kernel 3.6. Sono in grado di accoppiarmi con successo al dispositivo utilizzando gnome-bluetooth e anche di inviargli file.
Per configurare la porta seriale aggiungo prima un canale con un profilo SP al mio adattatore:
sdptool add --channel=22 SP
Quindi chiamo “ascolta” con rfcomm:
rfcomm listen /dev/rfcomm0 22
che si blocca su
Waiting for connection on channel 22
Apparentemente rfcomm creerà / dev / rfcomm0 dopo una connessione riuscita. Una volta che ciò accade, mi piacerebbe usare qualcosa come cutecom per inviare messaggi avanti e indietro al dispositivo connesso.
Sul mio dispositivo Android apro un terminale SPP Bluetooth (ce ne sono diversi là fuori, ne ho provati alcuni diversi) e provo a connettermi. Tutti falliscono.
Dato che posso accoppiare correttamente e inviare file senza problemi, so che laccoppiamento e la comunicazione Bluetooth funzionano.
Non sono sicuro di cosaltro posso provare. Ho usato “sdptool browse” sul mio dispositivo locale e sul dispositivo Android per assicurarmi che non ci siano conflitti di canale RFCOMM.
Commenti
- per coloro che si chiedono perché tutte le risposte seguenti non funzionano ‘: con BlueZ > = 5 è necessaria la modalità di compatibilità, vedere qui: raspberrypi.stackexchange.com/questions/41776/…
Risposta
Mi sembra di averlo fatto funzionare ora. Il Bluetooth sembra un po complicato. Ricapitolo completamente i miei passaggi nel caso in cui qualcun altro lo trovi utile (anche se è più o meno quello che ho provato inizialmente). Questo è per Android JB (4.2.2) su un Nexus 4 e Arch Linux 3.6.7-1, con bluez 4.101 su Gnome 3.6 (con gnome-bluetooth).
(questo passaggio potrebbe non fare nulla di utile) Disattiva il Bluetooth su Android e scollega ladattatore USB / Bluetooth dal tuo Macchina Linux (o se ne hai una incorporata, ripristinala utilizzando hcitool devname reset)
Collega / attiva il tuo adattatore Bluetooth su Linux. Assicurati che ladattatore sia visibile (può essere impostato in gnome-bluetooth – – dovresti vedere unicona Bluetooth nella barra delle applicazioni.
Attiva il Bluetooth sul tuo dispositivo Android. Utilizza Android per accoppiare ladattatore (non sono riuscito ad accoppiare il contrario da Linux). Verrà visualizzata una finestra di dialogo viene da chiederti una chiave. Inserisci il PIN che desideri. Gnome dovrebbe far apparire una notifica che ti chiede una chiave; inserisci lo stesso PIN che hai inserito in precedenza. Il tuo dispositivo Android e la chiave dovrebbero essere accoppiati a questo punto.
In Linux, apri un terminale e controlla quali servizi Bluetooth sono disponibili digitando
sdptool browse local
Se hai già un servizio di porta seriale, crea un nota di che canale si tratta. Se non lo fai, puoi aggiungere il servizio:
sdptool add --channel=22 SP
Ora ascolta su questo canale usando rfcomm:
sudo rfcomm listen /dev/rfcomm0 22
rfcomm si bloccherà, in attesa di una connessione con un messaggio come
Waiting for connection on channel 22
Tornando ad Android, ho utilizzato lapplicazione BlueTerm ( http://pymasde.es/blueterm/ , disponibile anche gratuitamente su Google Play Store) sebbene qualsiasi applicazione simile dovrebbe funzionare. Apri BlueTerm, vai a opzioni> Connetti dispositivo: seleziona ladattatore accoppiato.
Si spera che lapplicazione sia stata in grado di connettersi. Vedrai una verifica aggiuntiva nel terminale in cui hai bloccato lascolto con un messaggio del tipo:
Waiting for connection on channel 22 Connection from 22:22:22:22:22:22 to /dev/rfcomm0 Press CTRL-C for hangup
Tutto ciò che digiti nellapp BlueTerm dovrebbe andare in / dev / rfcomm0. Puoi vedere il contenuto visualizzato durante la digitazione aprendo un nuovo terminale e facendo qualcosa come:
cat /dev/rfcomm0
Commenti
- Ottima risposta. Ho funzionato con Ubuntu 16 / Bluez 5 e queste informazioni: bbs.archlinux.org/viewtopic.php?id=201672 .
Risposta
I passaggi seguenti hanno funzionato per me:
Per prima cosa devi accoppiare i dispositivi. Laccoppiamento è relativamente facile. Chiamerò il client (che inizia a parlare) e il server (che risponde)
Devi prima configurare il server: Lato server (come root):
sdptool add --channel=3 SP mknod -m 666 /dev/rfcomm0 c 216 0 rfcomm watch /dev/rfcomm0 3 /sbin/agetty rfcomm0 115200 linux
Lato client (come root):
sdptool add --channel=3 SP rfcomm connect /dev/rfcomm0 [SERVER_ADDR] 3
Ora per aprire un terminale seriale sul client:
screen /dev/rfcomm0 115200
Commenti:
Quando chiami lultimo comando rfcomm connect … nel client, un dispositivo /dev/rfcomm0
lo farà essere creato e associato al server /dev/recomm0
. Questo rappresenta il collegamento seriale tra entrambi
Lultimo comando del server: rfcomm watch
…. “ascolterà” le connessioni in entrata. In caso di connessione persa, il comando riavvierà un nuovo stato di “ascolto”.
Commenti
- La risposta fornita da ismaia ti ci porta quasi.È necessario ricordare però che lo stack bluez più recente necessita della speciale opzione
--compat
, altrimenti laggiunta di un SP potrebbe non riuscire. Vedi qui . Quindi modifica / modifica gli script di avvio di systemd / initd in modo che--compat
sia presente.
Rispondi
Ho risolto questo problema con una leggera variazione ai comandi di Pris. Provali se qualcuno ha ancora problemi a configurare una connessione rfcomm.
sudo service bluetooth restart
Questo ^ assicura che inizi con una lavagna pulita ogni volta che provi a configurare una connessione.
rfcomm add --channel=<a_channel_#> SP
Questo numero di canale dovrebbe essere diverso da qualsiasi canale attualmente assegnato.
(FACOLTATIVO) Per controllare i canali:
sdptool browse local | grep Channel
Non sono sicuro del motivo per cui questo prossimo comando è necessario, ma per me ha funzionato.
rfcomm release 0
Quindi per ascoltare le connessioni in entrata:
rfcomm watch 0 <a_channel_#>
NOTA: lindirizzo MAC bt in /etc/bluetooth/rfcomm.conf ma essere il MAC bt del telefono. Anche il canale in questo file deve essere lo stesso di quello scelto per a_channel_ #.
Una volta fatto tutto questo, uso emulatore di terminale da bt sul mio telefono per controllare tutto.
Rispondi
Ho provato diversi strumenti Bluetooth ed è stato difficile per trovare la corretta sequenza di comandi per connettersi e scambiare dati con un modulo bluetooth. Prova a usare rfcomm e minicom:
Questo è il mio /etc/bluetooth/rfcomm.conf
rfcomm0 { # Automatically bind the device at startup bind no; # Bluetooth address of the device device 11:22:33:44:55:66; # RFCOMM channel for the connection channel 3; # Description of the connection comment "This is Device 1"s serial port."; }
Cerca dispositivi bluetooth:
hcitool scan Scanning ... 20:15:12:08:62:95 HC-06
Bind utilizzando rfcomm
sudo rfcomm bind 0 20:15:12:08:62:95 1
NB: bind 0 si riferisce al dispositivo numero 0 (rfcomm0 ) e 1 è il canale.
Quindi usa minicom con sudo e salva una configurazione in cui specifichi il baudrate e la porta. Puoi trovare ulteriori informazioni qui .