Como conectar um terminal serial bruto a uma conexão bluetooth?

10

Estou tentando conectar-me a um Totalstation que não oferece drivers bluetooth. Como faço isso por razões puramente de diagnóstico, gostaria de ver a saída bruta da conexão serial estabelecida.

O que devo fazer para canalizar toda a saída de uma conexão bluetooth para um terminal?

Brian Ballsun-Stanton
fonte
Você está usando Bluetooth-> Serial, Serial-> Bluetooth ou bidirecional?
Nanofarad
Totalstation Bluetooth <-> Ubuntu Bluetooth. Dado que o totalstation possui a configuração serial padrão via USB, suspeito que esteja estabelecendo uma conexão serial via Bluetooth. Claro, eu posso estar completamente errado, quando a resposta é errada e o bluetooth usa XYZ é completamente permitido.
Brian Ballsun-Stanton
Em termos de prova bidirecional, eu consegui estabelecer uma conexão serial em branco via "tela" que causa um bipe de erro no dispositivo quando pressiono uma tecla no teclado. Então, suspeito que estou no meio do caminho, só não sei qual metade.
Brian Ballsun-Stanton
Você pode elaborar um diagrama rápido? Não consigo entender se é serial over ou bluetooth over serial, bem como quem está passando os dados para onde. Basta fazê-lo no GIMP ou algo assim e enviá-lo aqui
nanofarad
Funciona muito bem, mas encontro algumas falhas com o RFCOMM. Quando eu me conecto com a TELA, algumas Sequências AT são digitadas automaticamente "ATE1 E0" <RETURN> três vezes. Por isso, alguns "Falha no login" aparecem no lado do Raspi. Depois disso, posso efetuar login com êxito e usar a sessão do terminal sem outras falhas.
Cody

Respostas:

5

Como complemento à resposta de Brian. A tela não funcionou para mim, exibindo imediatamente[screen is terminating]

Então, eu encontrei este script python miniterm . O uso é semelhante:

sudo miniterm.py /dev/rfcomm0
Aleksander Belov
fonte
12

1) Use hcitool scanpara encontrar o endereço Mac do dispositivo.

O dispositivo deve ser definido no modo escravo com um pino conhecido. Se você não usa um pino conhecido, o ubuntu cria um e você geralmente não terá tempo para inseri-lo nos menus desajeitados da sua ferramenta de medição.

2) Não tenho certeza absoluta de que isso seja necessário, mas no menu da guia bluetooth, emparelhe o dispositivo.

3) em /etc/bluetooth/rfcomm.conf

rfcomm0 {
        bind no;
        device 00:07:80:44:4F:37;
        channel 1;
        comment "Serial Port";
        }

O "vincular não" é importante, caso contrário, tentará vincular automaticamente, o que apresenta todos os tipos de problemas para acessar o dispositivo (como é bastante exigente quando associado)

4) sudo rfcomm connect 0

Se você tiver erros, reinicie o serviço bluetooth.

5) screen /dev/rfcomm0

Para comandos seriais reais transmitidos dessa maneira, entre em contato com seu fornecedor e implore.

Brian Ballsun-Stanton
fonte
3
Eu recebo "Faltando parâmetro dev" quando tento executar "rfcomm connect 0"
someonewithpc
Você editou seu arquivo conf corretamente?
Brian Ballsun-Stanton
5
Tentar sudo rfcomm rfcomm0 connect 00: 07: 80: 44: 4F: 37
elopio
@ oneliner da elopia muito simples. Funcionou para mim #
31518 ptetteh227
10

Aqui está o meu caminho para prosseguir com a conexão a um dispositivo Bluetooth HC-05 conectado ao meu arduino. Não é necessário escrever um arquivo como na resposta de Brian, mas a ideia é semelhante. Testei-o com uma configuração de taxa de transmissão 9600 no dispositivo HC-05.

Primeira etapa: parear o dispositivo e fornecer o PIN

Tentei configurar da GUI o emparelhamento, mas não estava funcionando. Aqui está a maneira de prosseguir a linha de comando que funcionou para mim. Primeiro, vamos emparelhar o dispositivo na linha de comando. Corre :

sudo bluetoothctl

Verifique se o dispositivo bluetooth foi iniciado:

# power on

Iniciamos agora o agente que "lembrará o pino" para rfcomm:

# agent on

Agora, habilitamos o modo de digitalização para encontrar nosso dispositivo e poder emparelhá-lo:

# scan on

Após alguns segundos, o MAC do seu dispositivo deve aparecer. Vamos denotá-lo como depois. Então, você só precisa emparelhar o dispositivo assim:

# pair <MAC>

Você será solicitado a digitar um PIN, por padrão, ele está 1234no meu dispositivo HC-05. Você pode observar que é possível que você conecte o dispositivo e desconecte-o com uma mensagem como esta:

[CHG] Device 20:16:10:24:29:77 UUIDs: 00001101-0000-1000-8000-00805f9b34fb
[CHG] Device 20:16:10:24:29:77 ServicesResolved: yes
[CHG] Device 20:16:10:24:29:77 Paired: yes
Pairing successful
[CHG] Device 20:16:10:24:29:77 ServicesResolved: no
[CHG] Device 20:16:10:24:29:77 Connected: no

mas não é um problema. Você não precisa se conectar, então você pode sair bluetoothctldigitando Ctrl + D.

Forneça um arquivo utilizável /dev/rfcomm0

Primeiro, verifique se você não executou nenhum comando rfcomm antes. De fato, mesmo se você fechar Ctrl+Co programa, ele ainda será executado em segundo plano.

sudo killall rfcomm

Agora você pode executar

sudo rfcomm connect /dev/rfcomm0 20:16:10:24:29:77 1 &

Observe que, se você tentar escrever na entrada do rfcom, nada aconteceu. Você precisa usar outro programa.

Terceiro e último passo: escreva no /dev/rfcomm0

Existem várias maneiras de escrever no arquivo, mas observe que todas as formas de prosseguir envolvem raiz. Descrevo aqui vários programas que podem fazer isso (para que você possa escolher dependendo da sua necessidade ou do que está instalado no seu sistema, por exemplo). Se você esquecer de executar o programa como root, poderá ter um erro:

stty: /dev/rfcomm0: Device or resource busy

Primeira opção: conectar usando screen

A tela é uma ferramenta muito poderosa. Você pode instalá-lo (é sempre mais útil) usando:

sudo apt-get install screen

e depois corra

sudo screen /dev/rfcomm0

Se você esquecer de executá-lo como root, receberá um erro como o Aleksander:

[screen is terminating]

Para sair, digite "(CTRL + A) +: sair"

Segunda opção: conectar usando minicom

Instale-o

sudo apt-get install minicom

e depois corra

sudo minicom -D /dev/rfcomm0

Se você esquecer de executá-lo como root, você terá um erro como

minicom: cannot open /dev/rfcomm0: Device or resource busy

Para sair, digite "Ctrl + A X".

Terceira opção: miniterm de script python

Faça o download deste script e execute:

chmod +x miniterm.py
sudo ./miniterm.py /dev/rfcomm0

Escreva diretamente no arquivo

Primeiro, execute o seguinte comando (9600 é a taxa de transmissão):

sudo stty -F /dev/rfcomm0 cs8 9600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts 

Agora você pode escrever neste arquivo como em um arquivo clássico:

sudo su -c "echo 'message' > /dev/rfcomm0"

e, em teoria, ler dele usando

sudo tail -f /dev/rfcomm0

Mas eu não sei, ler não funciona, se algum de vocês tem uma idéia ...

tobiasBora
fonte
/def/rfcomm0deve ser/dev/rfcomm0
stewSquared