簡単な答えはイエスです。ペアリングせずにBluetoothを使用することは可能です。ただし、それは常にポイントツーポイントリンクのままです。また、ペアリングを使用しない場合の潜在的な問題もあります(主にセキュリティの欠如と、この操作モードに対する適切なサポートの欠如)。それが可能かどうかは、受信機のBluetoothハードウェアによって異なります。Bluetooth低エネルギーの代わりに「標準」のBluetoothを使用していると仮定しています(これは完全に異なり、携帯電話では特にサポートされていません)。低エネルギーを使用している場合、送信機は低エネルギーデバイスになり、受信機はメッセージをリッスンするデバイスになります。私はこれを使用していませんので、これに関する情報を提供することはできませんので、「通常の」Bluetoothに固執します。
私が見ているように、克服すべき2つの問題があります:
ピンペアリングをオフにする
自動接続開始
これがあなたが本当に興味を持っているものであるという印象を得るので、私は最初に2番をカバーします(これを間違って読んでいるならおifびします)電話または他の「マスター」デバイスからこれを行うには、リモートBluetoothデバイスを継続的に検索する必要があります。該当するものを認識すると、自動的に接続し、必要なアクションを開始するデータなどを送信します。他の人は、このプロセスにBluetoothフレンドリ名を使用することに言及していますが、それは確かにそれを行う1つの方法です。Bluetoothフレンドリ名(特にMicrosoft Bluetoothスタックのみではありません)の私の経験では、それらはそれほど堅牢なスキャン方法ではありません。Bluetoothデバイスクラスを使用する方がはるかに良いでしょう、一意のデバイスアドレスと同時にブロードキャストされます。このデバイスクラスには、携帯電話、ラップトップ、デスクトップなどのようなもののために事前に指定された多数のエントリがあります。非標準のデバイスクラス(たとえば、00:00:00)の1つを使用すると、すぐに大半のBluetoothデバイスを除外します。その後、残りのデバイスに接続し、何らかの要求確認通信を行ってアクションを開始できます。これを適切に曖昧にする(または2番目の考慮事項としてフレンドリ名を確認する)場合、残りの不正なデバイスを暗黙的に除外する必要があります。
番号1に関しては、一時的な接続を作成している場合、ピンペアリングは特に論理的ではありませんが、それでも目的の処理を実現する最良の方法である可能性があります。ピンのペアリングを回避する場合は、ピンをオフにして、ペアリングされていない接続を確立できます。これを行う方法は、Bluetoothレシーバーの実装に依存しますが、ここにいくつかの例を示します。
- Bluegiga WT12:SET BT AUTHコマンドを使用*
- National Semiconductor LMX9838:セキュリティモード1でGAP_SET_SECURITY_MODEコマンドを使用(ペアリングなし)
等
その後、ペアリングせずにデバイスに接続できます。接続を開始するデバイスが受信機と同じ場合、これは非常に簡単です。Windows PCを使用している場合は、面倒な新しい接続プロセスを作成し、「ピンを使用しない」を選択できますが、Windowsはおそらく接続時にピンを要求します(通常は0000ですが、非常に不安定です)。pybluezでpythonを使用している場合、非常に簡単です:
import bluetooth
sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect((<insert MAC address>, <insert port number>))
ただし、携帯電話から接続する場合は、はるかに複雑になります。Android SDKは、ペアになっていない接続を実際にサポートしていないようです。
現在のAndroid Bluetooth APIでは、RFCOMM接続を確立する前にデバイスをペアリングする必要があります。(Bluetooth APIとの暗号化接続を開始すると、ペアリングが自動的に実行されます。)
(http://developer.android.com/guide/topics/connectivity/bluetooth.htmlから)。これを回避する方法はありますが、それらは非常に複雑であり、十分にサポートされていません。iPhoneを使用している場合、Bluetooth接続はまったく異なる種類のワーム(ライセンス供与など)であるため、今のところは残しておきます。
すべてのことを言ったが、私が今まで見たほとんどすべてのAPIは、ペアリングとペアリング解除を実行します(python / pybluezの注目すべき例外はありますが、これはWindows上のMicrosoftスタックの単なるラッパーなので、常に低レベル関数を直接呼び出すことができます)。そのため、適切なデバイスクラスのデバイスを見つけたら、(事前に定義されたペアリングピン番号で)自動的にペアリングし、接続し、必要なデータを送信し、切断してからペアリングを解除します。これはユーザーの介入を必要とせず、何千回も実行していない限り(EEPROMの摩耗の問題を引き起こす可能性があります)、問題を引き起こすことはありません。また、Bluetoothを使用する非標準の方法として認識されている方法でさまざまなAPIをうまく動作させることで、多くの手間を省くことができます。