Como faço para conectar e enviar dados para uma porta serial bluetooth no Linux?

28

Eu estou tentando configurar uma porta serial virtual através de um adaptador USB-Bluetooth no Linux e enviar uma mensagem para ele através de um dispositivo Android. Eu estou no kernel 3.6. Eu sou capaz de emparelhar com o dispositivo com sucesso usando o gnome-bluetooth e também capaz de enviar arquivos para ele.

Para configurar a porta serial, primeiro adiciono um canal com um perfil SP ao meu adaptador:

sdptool add --channel=22 SP

Então eu chamo 'listen' com rfcomm:

rfcomm listen /dev/rfcomm0 22

quais blocos em

Waiting for connection on channel 22

Aparentemente, o rfcomm criará / dev / rfcomm0 após uma conexão bem-sucedida. Quando isso acontecer, eu gostaria de usar algo como cutecom para enviar mensagens para o dispositivo conectado.

No meu dispositivo Android, eu abro um terminal Bluetooth SPP (há vários por aí, tentei alguns diferentes) e tento conectar. Todos eles falham.

Dado que consigo emparelhar com sucesso e enviar ficheiros sem quaisquer problemas, sei que o emparelhamento e a comunicação Bluetooth funcionam.

Não sei muito bem o que mais posso experimentar. Eu usei 'sdptool browse' no meu dispositivo local e no dispositivo Android para garantir que não haja conflitos de canais RFCOMM.

    
por Pris 25.09.2013 / 07:37

4 respostas

18

Eu pareço ter conseguido isso funcionar agora. Bluetooth parece um pouco meticuloso. Estou recapitulando meus passos no caso de alguém achar útil (embora seja basicamente o que eu tentei inicialmente). Isso é para o Android JB (4.2.2) em um Nexus 4 e Arch Linux 3.6.7-1, com bluez 4.101 no Gnome 3.6 (com gnome-bluetooth).

(este passo pode não fazer nada de útil) Desligue o Bluetooth no Android e desconecte seu adaptador USB / Bluetooth da sua máquina Linux (ou se você tiver um no built-in, redefina-o usando reset do hcitool devname)

Conecte / ligue seu adaptador bluetooth no Linux. Certifique-se de que seu adaptador esteja visível (pode ser configurado em gnome-bluetooth - você deve ver um ícone da bandeja do sistema bluetooth).

Ligue o Bluetooth no seu dispositivo Android. Use o Android para emparelhar com o adaptador (não consegui fazer o par oposto ao Linux). Uma caixa de diálogo aparecerá perguntando por uma chave. Coloque em qualquer PIN que você quiser. O Gnome deve exibir uma notificação solicitando uma chave; coloque o mesmo PIN que você digitou anteriormente. Seu dispositivo Android e a chave devem ser pareados neste momento.

No Linux, abra um terminal e verifique quais serviços de bluetooth estão disponíveis digitando

sdptool browse local

Se você já tem um serviço de porta serial, anote qual canal é. Se você não fizer isso, você pode adicionar o serviço:

sdptool add --channel=22 SP

Agora ouça neste canal usando o rfcomm:

sudo rfcomm listen /dev/rfcomm0 22

o rfcomm irá bloquear, escutando uma conexão com uma mensagem como

Waiting for connection on channel 22

De volta ao Android, usei o aplicativo BlueTerm ( link , também disponível gratuitamente na loja do Google Play), embora qualquer aplicativo semelhante deva trabalhos. Abra o BlueTerm, vá para as opções > Connect Device: selecione o adaptador emparelhado.

Espero que o aplicativo possa se conectar. Você verá uma verificação adicional no terminal em que você bloqueou a escuta com uma mensagem como:

Waiting for connection on channel 22
Connection from 22:22:22:22:22:22 to /dev/rfcomm0
Press CTRL-C for hangup

Qualquer coisa que você digitar no aplicativo BlueTerm deve ir para / dev / rfcomm0. Você pode ver coisas aparecerem ao digitar abrindo um novo terminal e fazendo algo como:

cat /dev/rfcomm0
    
por 25.09.2013 / 08:42
9

Os passos abaixo funcionaram para mim:

Primeiramente, você precisa emparelhar os dispositivos. O emparelhamento é relativamente fácil. Vou chamar cliente (quem começa a falar) e servidor (quem responde)

Você precisa configurar o servidor antes: Lado do servidor (como root):

sdptool add --channel=3 SP
mknod -m 666 /dev/rfcomm0 c 216 0
rfcomm watch /dev/rfcomm0 3 /sbin/agetty rfcomm0 115200 linux

Lado do cliente (como root):

sdptool add --channel=3 SP
rfcomm connect /dev/rfcomm0 [SERVER_ADDR] 3

Agora, abra um terminal serial no cliente:

screen /dev/rfcomm0 115200

Comentários:

Quando você chamar o último comando rfcomm connect ... no cliente, um dispositivo /dev/rfcomm0 será criado e associado ao servidor /dev/recomm0 . Isso representa o link serial entre os dois

O último comando do servidor: rfcomm watch .... irá 'escutar' as conexões de entrada. Em conexão perdida, o comando irá reiniciar um novo estado 'listen'.

    
por 04.09.2014 / 01:21
3

Eu resolvi isso com uma pequena variação nos comandos do Pris. Dê a eles uma chance se alguém ainda tiver problemas para configurar uma conexão rfcomm.

sudo service bluetooth restart

Isso ^ garante que você esteja iniciando com um slate limpo toda vez que tentar configurar uma conexão.

rfcomm add --channel=<a_channel_#> SP

Este número de canal deve ser diferente de qualquer canal atualmente atribuído.

(OPCIONAL) Para verificar canais:

sdptool browse local | grep Channel

Não sei por que esse próximo comando é necessário, mas funcionou para mim.

rfcomm release 0

Em seguida, ouça as conexões incomming:

rfcomm watch 0 <a_channel_#>

NOTA: o endereço MAC bt em /etc/bluetooth/rfcomm.conf mas seja o MAC do seu telefone. Além disso, o canal neste arquivo deve ser o mesmo escolhido para a_channel _ #.

Depois que fiz tudo isso, usei um emulador de terminal bt no meu telefone para verificar tudo.

    
por 09.11.2015 / 18:06
0

Eu tentei diferentes ferramentas bluetooth e tem sido difícil encontrar a seqüência correta de comandos para conectar e trocar dados com um módulo bluetooth. Tente usar o rfcomm e o minicom:

Este é o meu /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.";
}

Verificar dispositivos bluetooth:

hcitool scan
Scanning ...
    20:15:12:08:62:95   HC-06

Vincular usando o rfcomm

sudo rfcomm bind 0 20:15:12:08:62:95 1

NB: bind 0 refere-se ao número do dispositivo 0 (rfcomm0) e 1 é o canal.

Em seguida, use minicom com sudo e salve uma configuração na qual você especifica a taxa de transmissão e a porta. Você pode encontrar mais informações aqui .

Espero que ajude!

    
por 16.08.2016 / 22:15

Tags