Het korte antwoord is ja, het is mogelijk om Bluetooth te gebruiken zonder te koppelen. Het blijft echter altijd een point-to-point-link. Er zijn ook mogelijke problemen als u geen koppeling gebruikt (voornamelijk het gebrek aan beveiliging en het gebrek aan goede ondersteuning voor deze modus). Of dit mogelijk is, hangt af van de Bluetooth-hardware van uw ontvanger. Ik neem aan dat je 'standaard' Bluetooth gebruikt in plaats van Bluetooth low-energy (wat totaal anders is en niet bijzonder goed wordt ondersteund in mobiele telefoons). Als u energiezuinig gebruikt, is uw zender een energiezuinig apparaat en is uw ontvanger iets dat naar de berichten luistert. Ik heb dit niet gebruikt, dus ik kan je hier geen informatie over geven, dus ik blijf bij 'normale' Bluetooth.
Zoals ik het zie, zijn er twee problemen die moeten worden opgelost:
-
Pin pairing uitschakelen
-
Automatische verbinding tot stand brengen
Ik zal eerst nummer 2 behandelen omdat ik de indruk krijg dat dit is waar je echt in geïnteresseerd bent (excuses als ik dit verkeerd lees). Om dit vanaf een telefoon of ander 'master'-apparaat te kunnen doen, zou het continu moeten zoeken naar externe Bluetooth-apparaten. Wanneer het er een herkende die van toepassing was, zou het er automatisch verbinding mee maken en enkele of andere gegevens verzenden die de vereiste actie zouden initiëren. Anderen hebben het gebruik van de Bluetooth-vriendelijke naam voor dit proces genoemd en dat is zeker een manier om het te doen. Mijn ervaringen met Bluetooth-vriendelijke namen (vooral maar niet uitsluitend met de Microsoft Bluetooth-stack) is dat ze niet zo'n robuuste scanmethode zijn. Het is waarschijnlijk veel beter om de Bluetooth-apparaatklasse te gebruiken, die tegelijkertijd met het unieke apparaatadres wordt uitgezonden. Deze apparaatklasse heeft een groot aantal vooraf gespecificeerde items voor zaken als mobiele telefoons, laptops, desktops enz. Als u een van de niet-standaard apparaatklassen gebruikt (bijv. 00:00:00), kunt u direct om de overgrote meerderheid van Bluetooth-apparaten eruit te filteren. U kunt dan verbinding maken met het overgebleven apparaat en een soort verzoek-bevestiging-communicatie uitvoeren om uw actie te starten. Als je dit voldoende onduidelijk maakt (of controleer de beschrijvende naam als een tweede overweging), dan zou het impliciet alle resterende onjuiste apparaten eruit moeten filteren.
Met betrekking tot nummer 1 is pinparing niet bijzonder logisch als je creëert tijdelijke verbindingen, maar het is misschien nog steeds de beste manier om te bereiken wat je wilt doen. Als u pinparing wilt vermijden, kan deze worden uitgeschakeld en kan er een niet-gepaarde verbinding worden gemaakt. Hoe u dit doet, hangt af van de implementatie van de Bluetooth-ontvanger, maar hier zijn een paar voorbeelden:
- Bluegiga WT12: gebruik het commando SET BT AUTH *
- National Semiconductor LMX9838: gebruik GAP_SET_SECURITY_MODE commando met beveiligingsmodus 1 (geen koppeling)
enz.
U kunt dan verbinding maken met het apparaat zonder te koppelen. Als het apparaat dat de verbinding tot stand brengt hetzelfde is als de ontvanger, is dit heel eenvoudig. Als u een Windows-pc gebruikt, kunt u het moeizame proces van het maken van een nieuwe verbinding doorlopen en 'geen pincode gebruiken' kiezen, hoewel Windows u waarschijnlijk nog steeds om een pincode zal vragen wanneer u verbinding maakt (0000 werkt meestal, maar het is erg schilferig). Als je python met pybluez gebruikt, is het heel eenvoudig:
import bluetoothsock = bluetooth.BluetoothSocket (bluetooth.RFCOMM) sock.connect ((<insert MAC-adres>, <insert poortnummer>))
Als u echter verbinding wilt maken vanaf een mobiele telefoon, wordt het veel gecompliceerder. De Android SDK lijkt niet echt ongepaarde verbindingen te ondersteunen:
De huidige Android Bluetooth API's vereisen dat apparaten worden gekoppeld voordat een RFCOMM-verbinding tot stand kan worden gebracht. (Het koppelen wordt automatisch uitgevoerd wanneer u een gecodeerde verbinding met de Bluetooth-API's tot stand brengt.)
(van http://developer.android.com/guide/topics/connectivity/bluetooth .html). Er zijn manieren om dit te omzeilen, maar ze zijn erg ingewikkeld en worden niet goed ondersteund. Als je een iPhone gebruikt, is Bluetooth-connectiviteit een heel ander blik wormen (licenties enz.), Dus dat laat ik voorlopig staan.
Dit alles gezegd hebbende, maakt vrijwel elke API die ik ooit heb bekeken het mogelijk om het koppelen en ontkoppelen uit te voeren (met de opmerkelijke uitzondering van python / pybluez, maar dat is slechts een omhulsel rond de Microsoft-stack op Windows, dus je kunt de low-level-functie altijd rechtstreeks aanroepen). Dus als je een apparaat met de juiste apparaatklasse hebt gezien, waarom niet gewoon automatisch koppelen (met een vooraf gedefinieerde koppelingspincode), de verbinding tot stand brengen, de vereiste gegevens verzenden, de verbinding verbreken en vervolgens ontkoppelen. Niets van dit alles zou enige tussenkomst van de gebruiker vereisen en zolang u het niet duizenden keren doet (wat mogelijk problemen met EEPROM-slijtage zou kunnen veroorzaken), zou het u geen problemen moeten bezorgen. Het bespaart u ook veel gedoe met het proberen om verschillende API's goed te laten werken met wat wordt gezien als een niet-standaardmethode voor het gebruik van Bluetooth.