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:
Desativando o emparelhamento de pinos
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:
- Bluegiga WT12: use o comando SET BT AUTH *
- 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.