É possível a comunicação Bluetooth sem emparelhamento?


36

Estou trabalhando em um dispositivo que pode ativar um sistema sem fio "instantaneamente". A primeira coisa que veio à mente foi usar a tecnologia RFID, que tem a vantagem de comunicação instantânea e barata. No entanto, estou interessado em usar os recursos bluetooth do meu telefone para realizar essa tarefa.

Portanto, minha pergunta é: para usar a comunicação Bluetooth, existe uma maneira de se comunicar sem parear? Em outras palavras, em um nível muito simplista, suponha que meu receptor Bluetooth esteja esperando um código "abc123". Um dispositivo Bluetooth, como um telefone, está programado para transmitir constantemente esse código. Após o recebimento do código, o sistema começa a fazer o que é suposto quando o acesso é concedido. Esse sistema removeria a barreira de emparelhamento, é claro, à custa da segurança.

Então, esse conceito é uma possibilidade? Eu tenho pouco entendimento dos protocolos de link Bluetooth em um nível muito técnico, mas se alguém puder me dar uma vantagem, posso começar a aprender a partir desse ponto. Não considere meu entendimento limitado uma restrição.


Existe um modo Bluetooth que faz exatamente isso, mas não sei como é chamado. Foi usado para enviar anúncios locais para telefones celulares que passavam.
jippie

2
Existem vários módulos de 433Mhz que transmitem um sinal on / off "instantaneamente"; frequentemente usado em abridores de portas de garagem. Eles também são baratos e fáceis de operar, embora não forneçam segurança inerente.
Pjc50 6/11/12

Respostas:


25

Sim, é inteiramente possível. Eu comentei isso anteriormente e, desde então, analisamos mais a fundo. Você pode fazer com que o dispositivo Bluetooth acionador envie o sinal de ativação por seu nome amigável .

O nome amigável é o nome legível por humanos que aparece na lista quando você procura um dispositivo Bluetooth para emparelhar. A velocidade com que isso é ativado depende da rapidez com que o dispositivo receptor pesquisa nomes amigáveis. Você não mencionou o tipo de dispositivo receptor que está usando, mas encontrei este PDF (página 35) detalhando o processo de atualização dos nomes amigáveis ​​de dispositivos Bluetooth dentro do alcance.

Você pode pesquisar nomes amigáveis ​​quantas vezes precisar. Se o seu dispositivo acionador alterar seu nome amigável para o código de ativação, abc123o dispositivo receptor poderá ver esse nome sem emparelhar e ativar qualquer tarefa que você esteja tentando executar. Isso também permite que você tenha uma infinidade de códigos de ativação, acho que você pode obter até 248 bytes para o nome amigável do Bluetooth.

Você também pode se abrir intencionalmente para o Bluejacking . Não estou familiarizado com isso, mas se a segurança não for um problema, pode funcionar.


2
Perfeito, isso parece ser muito promissor. Gosto da simplicidade do método do nome amigável, e o Bluejacking também parece ser um ótimo candidato.
Capcom

12

A resposta curta é sim, é possível usar o Bluetooth sem emparelhar. No entanto, ainda será sempre um link ponto a ponto. Também há problemas em potencial com o não uso do emparelhamento (principalmente a falta de segurança e a falta de bom suporte para esse modo de operação). Se isso pode ser feito depende do hardware Bluetooth do seu receptor. Suponho que você esteja usando Bluetooth 'padrão' em vez de Bluetooth de baixa energia (que é completamente diferente e não é particularmente bem suportado em telefones celulares). Se você estiver usando baixa energia, seu transmissor seria um dispositivo de baixa energia e seu receptor seria algo que escutaria as mensagens. Eu não usei isso, então não posso fornecer nenhuma informação sobre isso, então vou usar o Bluetooth 'normal'.

A meu ver, há duas questões a serem superadas:

  1. Desativando o emparelhamento de pinos

  2. Iniciação automática da conexão

Vou cobrir o número 2 primeiro, pois tenho a impressão de que é nisso que você está realmente interessado (desculpas se estou lendo isso errado). Para fazer isso em um telefone ou outro dispositivo 'mestre', seria necessário procurar continuamente dispositivos Bluetooth remotos. Quando reconhecesse um que fosse aplicável, ele se conectaria automaticamente a ele e enviaria alguns dados ou outros que iniciariam qualquer ação necessária. Outros mencionaram o uso do nome amigável do Bluetooth para esse processo e essa é certamente uma maneira de fazê-lo. Minhas experiências com nomes compatíveis com Bluetooth (especialmente, mas não exclusivamente, com a pilha Bluetooth da Microsoft) são que eles não são um método tão robusto de digitalização. Você provavelmente faria muito melhor usar a classe de dispositivo Bluetooth, que é transmitido ao mesmo tempo que o endereço exclusivo do dispositivo. Essa classe de dispositivo possui um grande número de entradas pré-especificadas para itens como telefones celulares, laptops, desktops etc. etc. Se você usar uma das classes de dispositivos não padrão (por exemplo, 00:00:00), poderá instantaneamente para filtrar a grande maioria dos dispositivos Bluetooth. Você pode conectar-se ao dispositivo restante e fazer algum tipo de comunicação de confirmação de solicitação para iniciar sua ação. Se você tornar isso adequadamente obscuro (ou verificar o nome amigável como uma segunda consideração), ele deve filtrar implicitamente todos os dispositivos incorretos restantes.


Em relação ao número 1, o emparelhamento de pinos não é particularmente lógico se você estiver criando conexões transitórias, mas ainda pode ser a melhor maneira de conseguir o que deseja fazer. Se você deseja evitar o emparelhamento de pinos, ele pode ser desativado e uma conexão não emparelhada pode ser feita. Como você faz isso depende da implementação do receptor Bluetooth, mas aqui estão alguns exemplos:

  1. Bluegiga WT12: use o comando SET BT AUTH *
  2. National Semiconductor LMX9838: use o comando GAP_SET_SECURITY_MODE com o modo de segurança 1 (sem emparelhamento)

etc.

A conexão ao dispositivo pode ser feita sem emparelhamento. Se o dispositivo que inicia a conexão é o mesmo que o receptor, isso é muito simples. Se você estiver usando um PC com Windows, poderá criar um novo processo de conexão e escolher "não usar um alfinete", embora o Windows provavelmente ainda peça um alfinete quando você se conectar (0000 geralmente funciona, mas é muito esquisito). Se você estiver usando python com pybluez, é muito simples:

import bluetooth
sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect((<insert MAC address>, <insert port number>))

Se, no entanto, você deseja se conectar a partir de um telefone celular, isso fica muito mais complicado. O SDK do Android não parece realmente suportar conexões não emparelhadas:

As APIs Bluetooth Android atuais exigem que os dispositivos sejam emparelhados antes que uma conexão RFCOMM possa ser estabelecida. (O emparelhamento é realizado automaticamente quando você inicia uma conexão criptografada com as APIs do Bluetooth.)

(em http://developer.android.com/guide/topics/connectivity/bluetooth.html ). Existem maneiras de contornar isso, mas são muito complicadas e não são bem suportadas. Se você estiver usando um iPhone, a conectividade Bluetooth é uma lata totalmente diferente de worms (licenciamento etc.), então deixarei isso por enquanto.


Dito tudo isso, praticamente todas as APIs que já vi permitem emparelhamento edesemparelhamento a ser realizado (com a exceção notável de python / pybluez, mas isso é apenas um invólucro em torno da pilha da Microsoft no Windows, para que você sempre possa chamar diretamente a função de baixo nível). Portanto, quando você avistou um dispositivo com a classe correta, por que não apenas emparelhar automaticamente (com um número de pino de emparelhamento predefinido), fazer a conexão, enviar os dados necessários, desconectar e desemparelhar. Nada disso exigiria qualquer intervenção do usuário e, desde que você não esteja fazendo isso milhares de vezes (o que pode causar problemas com o desgaste da EEPROM), isso não deve causar problemas. Isso também poupa muito trabalho ao tentar fazer com que APIs diferentes funcionem bem com o que é percebido como um método não padrão de uso do Bluetooth.


11
Obrigado por uma excelente resposta! Muito para eu olhar agora.
Capcom

10

Isso pode ser conseguido com uma tecnologia da marca Bluetooth chamada Bluetooth Smart (ou Bluetooth Low Energy / Bluetooth 4.0) e também dependendo do telefone que você possui.

O principal benefício do Low Energy em relação ao Bluetooth comum é que ele consome muito menos energia, e a vida útil esperada de um dispositivo pode levar anos, dependendo do intervalo de conexão e quanto anuncia em uma bateria de célula tipo moeda.

Para resolver esse problema, você pode colocar o código em questão nos dados de publicidade do chip. ( Bluetooth 4.0 Core Spec. Volume 3, Parte C, Seção 11.1.4 ou 11.1.10)

Existem três principais fabricantes de chips que produzem chips de baixa energia (TI, CSR e Nordic Semiconductor)

Os nórdicos têm um chip de conectividade chamado nRF8001 (um chip de conectividade, dispositivo totalmente qualificado) e um SoC nRF51822 . O benefício de usar o nRF8001 é que você pode usar o processador de sua escolha e não precisa se preocupar com a especificação Bluetooth, pois isso é tratado pelo chip. O benefício do nRF51822 é que ele é um sistema no chip e reduz a lista técnica, está executando o Cortex-M0 e deve ser totalmente qualificado quando lançado.

A TI possui o chip SoC 8051 cc2540 e o CSR possui o chip SoC CSR µEnergy

Tudo se resume a sua necessidade e preferência no processador e na funcionalidade / custo



1

O resultado de um emparelhamento bem-sucedido é a chave do link, o segredo que os dispositivos emparelhados compartilham e permitem que eles se comuniquem.

Se for possível definir a chave de link no sistema, sim, não é necessário emparelhamento. Basta definir a mesma chave de link nos dois dispositivos. Após esta conexão pode ser aberta com êxito, como se os dois dispositivos tivessem emparelhado.

Por exemplo, no Linux, após o emparelhamento, o infoarquivo é armazenado para cada dispositivo pareado em / var / lib / bluetooth / endereço do dispositivo local / endereço do dispositivo remoto /

Após a Generalseção conter o seguinte: [LinkKey] Key=FF00112233445566778899AABBCCDDEE Type=5 PINLength=0

Isso pode ser definido diretamente sem emparelhamento. Se o mesmo estiver escrito no dispositivo remoto. Os dispositivos estão emparelhados.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.