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

Estou tentando configurar uma porta serial virtual através de um adaptador USB-Bluetooth no Linux e enviar uma mensagem para ela por meio de um dispositivo Android. no kernel 3.6. Consigo emparelhar o dispositivo com sucesso usando gnome-bluetooth e também 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 “escutar” com rfcomm:

rfcomm listen /dev/rfcomm0 22 

que bloqueia em

Waiting for connection on channel 22 

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

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

Visto que consigo emparelhar e enviar arquivos sem problemas, sei que o emparelhamento e a comunicação via bluetooth funcionam.

Não tenho certeza do que mais posso tentar. Usei “sdptool browse” em meu dispositivo local e no dispositivo Android para garantir que não haja nenhum conflito de canal RFCOMM.

Comentários

Resposta

Parece que agora estou fazendo isso funcionar. Bluetooth parece um pouco meticuloso. Estou recapitulando minhas etapas na íntegra para o caso de alguém achar útil (embora seja praticamente o que tentei inicialmente). Isso é para 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).

(esta etapa pode não fazer nada de útil) Desligue o Bluetooth no Android e desconecte o adaptador USB / Bluetooth do seu Máquina Linux (ou se você tiver uma integrada, redefina-a usando hcitool devname reset)

Conecte / ligue seu adaptador bluetooth no Linux. Certifique-se de que o adaptador está visível (pode ser configurado no gnome-bluetooth – – você deverá ver um ícone de bluetooth na bandeja do sistema).

Ligue o bluetooth em seu dispositivo Android. Use o Android para emparelhar com o adaptador (não consegui emparelhar ao contrário no Linux). Uma caixa de diálogo irá aparecer pedindo uma chave. Insira o PIN que desejar. O Gnome deve exibir uma notificação solicitando uma chave; insira o mesmo PIN que você inseriu anteriormente. Seu dispositivo Android e a chave devem estar emparelhados neste momento.

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

sdptool browse local 

Se você já tem um serviço de porta serial, crie um observe de que canal é. Se não o fizer, pode adicionar o serviço:

sdptool add --channel=22 SP 

Agora ouça neste canal usando rfcomm:

sudo rfcomm listen /dev/rfcomm0 22 

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

Waiting for connection on channel 22 

De volta ao Android, usei o aplicativo BlueTerm ( http://pymasde.es/blueterm/ , também disponível gratuitamente na google play store), embora qualquer aplicativo semelhante deva funcionar. Abra o BlueTerm, vá para opções> Conectar dispositivo: selecione o adaptador emparelhado.

Esperançosamente, o aplicativo conseguiu se conectar. Você verá uma verificação adicional no terminal onde 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 as coisas que aparecem enquanto você digita abrindo um novo terminal e fazendo algo como:

cat /dev/rfcomm0 

Comentários

Resposta

As etapas abaixo funcionaram para mim:

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

Você deve 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, para abrir 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 irá ser criado e associado ao servidor /dev/recomm0. Isso representa o link serial entre ambos

O último comando do servidor: rfcomm watch …. irá “escutar” as conexões de entrada. Na conexão perdida, o comando reiniciará um novo estado de “escuta”.

Comentários

  • A resposta fornecida por ismaia quase leva você lá.Você precisa se lembrar, porém, que a pilha bluez mais recente precisa da opção especial --compat, caso contrário, adicionar um SP pode falhar. Veja aqui . Portanto, ajuste / corrija seus scripts de inicialização do systemd / initd para que --compat esteja lá.

Resposta

Eu resolvi isso com uma ligeira variação nos comandos de Pris. Experimente-os se alguém ainda estiver tendo problemas para configurar uma conexão rfcomm.

sudo service bluetooth restart 

Isto ^ garante que você está começando do zero 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 atribuído atualmente.

(OPCIONAL) Para verificar os canais:

sdptool browse local | grep Channel 

Não tenho certeza de por que este próximo comando é necessário, mas funcionou para mim.

rfcomm release 0 

Em seguida, para ouvir conexões incomming:

rfcomm watch 0 <a_channel_#> 

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

Depois de fazer tudo isso, eu uso da bt terminal emulator no meu telefone para verificar tudo.

Answer

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

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

Procure dispositivos bluetooth:

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

Vincular usando rfcomm

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

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

Em seguida, use o 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 .

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *