짧은 대답은 그렇습니다. 페어링없이 블루투스를 사용할 수 있습니다. 그러나 여전히 포인트-투-포인트 링크가 될 것입니다. 페어링을 사용하지 않는 데에도 잠재적 인 문제가 있습니다 (주로 보안 부족 및이 작동 모드에 대한 지원이 부족함). 수행 할 수 있는지 여부는 수신기의 Bluetooth 하드웨어에 따라 다릅니다. 나는 당신이 블루투스 저에너지 대신 '표준'블루투스를 사용하고 있다고 가정합니다. 저에너지를 사용하는 경우 송신기는 저에너지 장치이고 수신기는 메시지를 수신하는 장치입니다. 나는 이것을 사용하지 않았으므로 이에 대한 정보를 줄 수 없으므로 '일반적인'블루투스를 고수하겠습니다.
내가 알듯이 극복해야 할 두 가지 문제가 있습니다.
핀 페어링 끄기
자동 연결 시작
나는 이것이 당신이 정말로 관심이 있다는 인상을 받으면서 2 번을 다룰 것입니다 (이 글을 읽는다면 사과합니다). 전화 나 다른 '마스터'장치에서이 작업을 수행하려면 원격 Bluetooth 장치를 지속적으로 검색해야합니다. 적용 가능한 것을 인식하면 자동으로 연결되어 필요한 조치를 시작하는 데이터 또는 기타 데이터를 보냅니다. 다른 사람들은이 과정에서 블루투스 이름을 사용한다고 언급했으며, 그렇게하는 것이 확실한 방법입니다. Bluetooth 친숙한 이름에 대한 나의 경험 (특히 Microsoft Bluetooth 스택에서만 독점적이지는 않음)은 강력한 스캔 방법이 아니라는 것입니다. 블루투스 장치 클래스 를 사용하는 것이 훨씬 낫습니다.고유 기기 주소와 동시에 브로드 캐스트됩니다. 이 디바이스 클래스에는 휴대 전화, 랩톱, 데스크탑 등과 같은 많은 사전 지정 항목이 있습니다. 비표준 디바이스 클래스 중 하나 (예 : 00:00:00)를 사용하면 즉시 사용할 수 있습니다. 대부분의 Bluetooth 장치를 걸러냅니다. 그런 다음 나머지 장치에 연결하고 일종의 요청 승인 통신을 수행하여 작업을 시작할 수 있습니다. 이를 적절하게 모호하게하거나 (또는 친숙한 이름을 두 번째 고려 사항으로 확인) 남은 잘못된 장치를 암시 적으로 필터링해야합니다.
1 번과 관련하여 일시적인 연결을 만드는 경우 핀 페어링은 특히 논리적이지 않지만 여전히 원하는 작업을 수행하는 가장 좋은 방법 일 수 있습니다. 핀 페어링을 피하려면 핀을 끄고 연결되지 않은 상태로 연결할 수 있습니다. 이를 수행하는 방법은 Bluetooth 수신기 구현에 따라 다르지만 몇 가지 예가 있습니다.
- Bluegiga WT12 : SET BT AUTH 명령 사용 *
- National Semiconductor LMX9838 : 보안 모드 1 (페어링 없음)으로 GAP_SET_SECURITY_MODE 명령 사용
기타
그런 다음 페어링하지 않고 장치에 연결할 수 있습니다. 연결을 시작하는 장치가 수신기와 동일하면 매우 간단합니다. Windows PC를 사용하는 경우 힘든 연결을 통해 새 연결 프로세스를 만들고 "핀을 사용하지 않음"을 선택할 수 있지만 Windows는 연결할 때 여전히 핀을 요구하지만 (0000은 일반적으로 작동하지만 매우 벗겨집니다). pybluez와 함께 파이썬을 사용하는 경우 매우 간단합니다.
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는 페어링 및페어링 해제 (파이썬 / pybluez는 주목할 만하지 만 Windows의 Microsoft 스택을 감싸는 래퍼이므로 항상 저수준 함수를 직접 호출 할 수 있음). 따라서 올바른 장치 클래스를 가진 장치를 발견했을 때 자동으로 (사전 정의 된 페어링 핀 번호로) 페어링하고, 연결하고, 필요한 데이터를 전송하고, 연결을 끊었다가 페어링 해제하지 않는 이유는 무엇입니까? 이 중 어느 것도 사용자 개입이 필요하지 않으며 수천 번 수행하지 않는 한 (EEPROM 마모에 문제를 일으킬 수 있음) 문제를 일으키지 않아야합니다. 또한 블루투스를 사용하는 비표준 방법으로 인식되는 것과 다른 API를 사용하려고 노력하면 많은 번거 로움을 덜 수 있습니다.