La réponse courte est oui, il est possible d'utiliser Bluetooth sans être jumelé. Cependant, il restera toujours un lien point à point. La non utilisation du couplage peut également poser des problèmes (principalement le manque de sécurité et le manque de support pour ce mode de fonctionnement). Cela dépend du matériel Bluetooth de votre récepteur. Je suppose que vous utilisez le Bluetooth «standard» au lieu du Bluetooth à faible énergie (ce qui est complètement différent et n'est pas particulièrement bien pris en charge dans les téléphones mobiles). Si vous utilisez une faible consommation d'énergie, votre émetteur sera un dispositif à faible consommation d'énergie et votre récepteur sera quelque chose qui écoute les messages. Je n'ai pas utilisé cela, je ne peux donc vous donner aucune information à ce sujet, je vais donc rester avec le Bluetooth «normal».
Selon moi, il y a deux problèmes à surmonter:
Désactiver le couplage des broches
Connexion automatique
Je vais aborder le numéro 2 en premier, car j’ai l’impression que c’est ce qui vous intéresse vraiment (excuses si je lis mal). Pour ce faire, à partir d'un téléphone ou d'un autre appareil «maître», le système doit rechercher en permanence des appareils Bluetooth distants. Lorsqu'il en reconnaissait un qui était applicable, il se connectait automatiquement à celui-ci et envoyait des données ou autres qui déclencheraient toute action requise. D'autres ont mentionné l'utilisation du nom convivial Bluetooth pour ce processus et c'est certainement une façon de le faire. Mon expérience des noms conviviaux Bluetooth (en particulier mais pas exclusivement avec la pile Bluetooth de Microsoft) est qu’ils ne constituent pas une méthode de numérisation aussi robuste. Vous feriez probablement mieux d'utiliser la classe de périphérique Bluetooth, qui est diffusé en même temps que l’adresse unique du périphérique. Cette classe d'appareils comporte un grand nombre d'entrées prédéfinies pour les téléphones mobiles, ordinateurs portables, ordinateurs de bureau, etc. Si vous utilisez l'une des classes d'appareils non standard (par exemple, 00:00:00), vous pourrez instantanément pour filtrer la grande majorité des appareils Bluetooth. Vous pouvez ensuite vous connecter au périphérique restant et effectuer une sorte de communication d'accusé de réception pour lancer votre action. Si vous masquez ce caractère de manière appropriée (ou vérifiez le nom convivial comme une seconde considération), il devrait implicitement filtrer tous les périphériques incorrects restants.
En ce qui concerne le numéro 1, la paire de broches n’est pas particulièrement logique si vous créez des connexions transitoires, mais c’est peut-être le meilleur moyen de réaliser ce que vous voulez faire. Si vous souhaitez éviter le couplage des broches, vous pouvez le désactiver et établir une connexion non couplée. La procédure à suivre dépend de l’implémentation du récepteur Bluetooth, mais voici quelques exemples:
- Bluegiga WT12: utilisez la commande SET BT AUTH *
- National Semiconductor LMX9838: utilisez la commande GAP_SET_SECURITY_MODE avec le mode de sécurité 1 (pas de couplage)
etc.
La connexion à l'appareil peut alors être effectuée sans couplage. Si le périphérique qui établit la connexion est le même que le récepteur, la procédure est très simple. Si vous utilisez un PC Windows, vous pouvez créer un nouveau processus de connexion très laborieux et choisir "ne pas utiliser d'épingle", bien que Windows vous demande probablement quand même une épingle lorsque vous vous connectez (0000 fonctionne normalement, mais c'est très feuilleté). Si vous utilisez du python avec pybluez, c'est très simple:
import bluetooth
sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect((<insert MAC address>, <insert port number>))
Si, toutefois, vous souhaitez vous connecter à partir d'un téléphone portable, cela devient beaucoup plus compliqué. Le SDK Android ne semble pas vraiment prendre en charge les connexions non appariées:
Les API Bluetooth Android actuelles exigent que les périphériques soient jumelés avant qu'une connexion RFCOMM puisse être établie. (Le couplage est automatiquement effectué lorsque vous établissez une connexion cryptée avec les API Bluetooth.)
( http://developer.android.com/guide/topics/connectivity/bluetooth.html ). Il y a plusieurs façons de contourner ce problème, mais elles sont très compliquées et mal supportées. Si vous utilisez un iPhone, la connectivité Bluetooth est une boîte de Pandore complètement différente (licence, etc.), je vais donc la laisser pour le moment.
Cela dit, à peu près toutes les API que j'ai jamais vues permettent l’appariement et lanon apparié à effectuer (à l’exception notable de python / pybluez, mais ce n’est qu’un simple encapsuleur autour de la pile Microsoft sur Windows, de sorte que vous pouvez toujours appeler directement la fonction de bas niveau). Ainsi, lorsque vous avez repéré un périphérique avec la classe de périphérique appropriée, pourquoi ne pas simplement coupler automatiquement (avec un numéro de broche de couplage prédéfini), établir la connexion, envoyer les données requises, déconnecter puis dissocier. Rien de tout cela ne nécessite l'intervention de l'utilisateur et tant que vous ne le faites pas des milliers de fois (ce qui pourrait potentiellement causer des problèmes d'usure de mémoire EEPROM), cela ne devrait pas vous causer de problèmes. Cela vous évitera également beaucoup de tracas en essayant de faire fonctionner différentes API avec ce qui est perçu comme une méthode non standard d’utilisation de Bluetooth.