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
- para quem está se perguntando por que todas as respostas abaixo não ‘ funcionam: com BlueZ > = 5 você precisa do modo de compatibilidade, veja aqui: raspberrypi.stackexchange.com/questions/41776/…
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
- Boa resposta. Consegui trabalhar com Ubuntu 16 / Bluez 5 e esta informação: bbs.archlinux.org/viewtopic.php?id=201672 .
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 .