La communication Bluetooth est-elle possible sans couplage?

36

Je travaille sur un appareil qui peut activer sans fil un système "instantanément" sans fil. La première chose qui m'est venue à l'esprit était d'utiliser la technologie RFID, qui présente l'avantage d'une communication instantanée et peu coûteuse. Toutefois, je souhaite utiliser les fonctionnalités Bluetooth de mon téléphone pour accomplir cette tâche.

Ma question est donc la suivante: pour utiliser la communication Bluetooth, existe-t-il un moyen de communiquer sans couplage? En d'autres termes, à un niveau très simpliste, supposons que mon récepteur Bluetooth attend un code "abc123". Un périphérique Bluetooth, comme un téléphone, est programmé pour transmettre ce code en permanence. Dès réception du code, le système commence à faire ce qu’il est censé faire une fois l’accès accordé. Un tel système supprimerait évidemment la barrière d'appariement au détriment de la sécurité.

Ce concept est-il donc une possibilité? Je connais peu les protocoles de liaison Bluetooth à un niveau très technique, mais si quelqu'un peut me donner une piste, je peux commencer à apprendre à partir de ce point. Ne considérez pas ma compréhension limitée comme une contrainte.

capcom
la source
C'est le cas du mode Bluetooth, mais je ne sais pas comment il s'appelle. Il était utilisé pour envoyer des publicités locales sur des téléphones mobiles.
jippie
2
Il existe différents modules de 433 MHz qui transmettent un signal marche / arrêt "instantanément"; souvent utilisé dans les ouvre-portes de garage. Ils sont également peu coûteux et faciles à utiliser, même s'ils n'offrent pas une sécurité intrinsèque.
pjc50

Réponses:

25

Oui, c'est tout à fait possible. Je l'avais déjà commenté et j'ai depuis approfondi la question. Vous pouvez faire en sorte que le périphérique Bluetooth déclenchant envoie le signal d'activation par son nom convivial .

Le nom convivial est le nom lisible par l'homme qui apparaît dans la liste lorsque vous recherchez un appareil Bluetooth avec lequel vous établir une liaison. La vitesse à laquelle cela s'active dépend de la rapidité avec laquelle le périphérique destinataire recherche des noms conviviaux. Vous n'avez pas mentionné le type de périphérique de réception que vous utilisez, mais j'ai trouvé ce PDF (page 35) détaillant le processus de mise à jour des noms conviviaux des périphériques Bluetooth à portée de main.

Vous pouvez rechercher des noms conviviaux aussi souvent que vous le souhaitez. Si votre périphérique de déclenchement modifie son nom convivial en code d'activation, abc123le périphérique de réception sera en mesure de voir ce nom sans être jumelé et d'activer la tâche que vous tentez d'effectuer. Cela vous permet également d'avoir une multitude de codes d'activation. Je pense que vous pouvez obtenir jusqu'à 248 octets pour le nom Bluetooth convivial.

Vous pouvez également envisager de vous ouvrir intentionnellement au Bluejacking . Je ne le connais pas bien, mais si la sécurité n’est pas un problème, cela pourrait fonctionner.

Samuel
la source
2
Parfait, cela semble être le plus prometteur. J'aime la simplicité de la méthode du nom convivial, et Bluejacking semble également être un excellent candidat.
capcom
12

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:

  1. Désactiver le couplage des broches

  2. 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:

  1. Bluegiga WT12: utilisez la commande SET BT AUTH *
  2. 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.

DrAl
la source
1
Merci pour cette superbe réponse! Beaucoup pour moi à regarder maintenant.
capcom
10

Cela peut être accompli avec une technologie de la marque Bluetooth appelée Bluetooth Smart (ou Bluetooth Low Energy / Bluetooth 4.0) et aussi selon le téléphone que vous avez.

Le principal avantage de Low Energy par rapport au Bluetooth classique est qu’il consomme beaucoup moins d’énergie et que la durée de vie attendue d’un périphérique peut durer des années en fonction de l’intervalle de connexion et de la quantité de publicité qu’il génère sur une pile bouton.

Pour résoudre ce problème, vous pouvez insérer le code en question dans les données publicitaires de la puce. ( Spécifications de base Bluetooth 4.0, Volume 3, Partie C, Section 11.1.4 ou 11.1.10)

Trois principaux fabricants de puces produisent des puces basse consommation (TI, CSR et Nordic Semiconductor).

Nordic possède une puce de connectivité appelée nRF8001 (une puce de connectivité, périphérique pleinement qualifié) et un SoC nRF51822 . L'avantage d'utiliser le nRF8001 est que vous pouvez utiliser le processeur de votre choix sans avoir à vous soucier de la spécification Bluetooth car celle-ci est gérée par la puce. L’avantage de nRF51822 est qu’il s’agit d’un système sur puce qui réduit la nomenclature, il exécute Cortex-M0 et doit être pleinement qualifié à sa sortie.

TI ont la puce SoC 8051 cc2540 et CSR ont la puce SoC CSR µEnergy

Tout dépend de vos besoins et de vos préférences en matière de processeur, de fonctionnalité et de coût.

Palhaland
la source
3

Oui, la communication Bluetooth est possible sans coupler les appareils. Utilisez le insecureRfcomrespect de RFCOM sécurisé. Il ne nécessite pas d'appariement pour le transfert de données.

Rahil Ali
la source
Plus d'infos: stackoverflow.com/questions/5308373/…
Erik Kaplun
1

Le résultat d’un couplage réussi est la clé de liaison, le secret que les périphériques couplés partagent et leur permet de communiquer.

S'il est possible de définir la clé de liaison sur le système, oui, aucun couplage n'est nécessaire. Il suffit de définir la même clé de liaison sur les deux appareils. Après cette connexion peut être ouvert avec succès comme si les deux appareils avaient été appariés.

Par exemple, sous Linux, après l’appariement, le infofichier est stocké pour chaque périphérique paré sous / var / lib / bluetooth / adresse-périphérique-local / adresse-périphérique-distant /

Après la Generalsection contient le suivant: [LinkKey] Key=FF00112233445566778899AABBCCDDEE Type=5 PINLength=0

Ceci peut être réglé directement sans couplage. Si le même est écrit sur le périphérique distant. Les appareils sont jumelés.

shpc
la source