Krótka odpowiedź brzmi: tak, można używać Bluetooth bez parowania. Jednak nadal będzie to zawsze połączenie punkt-punkt. Istnieją również potencjalne problemy z niestosowaniem parowania (głównie brak bezpieczeństwa i brak dobrego wsparcia dla tego trybu działania). To, czy da się to zrobić, zależy od sprzętu Bluetooth odbiornika. Zakładam, że używasz „standardowego” Bluetooth zamiast Bluetooth o niskim zużyciu energii (który jest zupełnie inny i nie jest szczególnie dobrze obsługiwany w telefonach komórkowych). Jeśli używasz niskoenergetycznego, nadajnik byłby urządzeniem niskoenergetycznym, a odbiornik byłby czymś, co nasłuchuje wiadomości. Nie korzystałem z tego, więc nie mogę podać żadnych informacji na ten temat, więc pozostanę przy „normalnym” Bluetooth.
Moim zdaniem do rozwiązania są dwa problemy:
Wyłączanie parowania pinów
Automatyczne inicjowanie połączenia
Najpierw zajmę się numerem 2, ponieważ mam wrażenie, że to naprawdę Cię interesuje (przepraszam, jeśli źle to czytam). Aby to zrobić za pomocą telefonu lub innego „głównego” urządzenia, musiałby stale wyszukiwać zdalne urządzenia Bluetooth. Gdy rozpozna taki, który ma zastosowanie, automatycznie się z nim połączy i wyśle dane lub inne, które zainicjują wszelkie wymagane działania. Inni wspominali o użyciu przyjaznej nazwy Bluetooth w tym procesie i jest to z pewnością jeden ze sposobów na to. Moje doświadczenia związane z przyjaznymi nazwami Bluetooth (szczególnie, ale nie wyłącznie ze stosem Microsoft Bluetooth) są takie, że nie są one tak niezawodną metodą skanowania. Prawdopodobnie lepiej by było użyć Klasy urządzeń Bluetooth, który jest nadawany w tym samym czasie co unikalny adres urządzenia. Ta klasa urządzeń ma dużą liczbę wstępnie określonych pozycji, takich jak telefony komórkowe, laptopy, komputery stacjonarne itp. Jeśli użyjesz jednej z niestandardowych klas urządzeń (np. 00:00:00), natychmiast będziesz w stanie aby odfiltrować ogromną większość urządzeń Bluetooth. Następnie możesz połączyć się z pozostałym urządzeniem i wykonać komunikację potwierdzającą żądanie w celu zainicjowania akcji. Jeśli uczynisz to odpowiednio niejasnym (lub sprawdzisz przyjazną nazwę jako drugą kwestię), powinno ono domyślnie odfiltrować wszelkie pozostałe nieprawidłowe urządzenia.
Jeśli chodzi o numer 1, parowanie pinów nie jest szczególnie logiczne, jeśli tworzysz przejściowe połączenia, ale nadal może być najlepszym sposobem na osiągnięcie tego, co chcesz zrobić. Aby uniknąć parowania pinów, można je wyłączyć i nawiązać niesparowane połączenie. Jak to zrobić, zależy od implementacji odbiornika Bluetooth, ale oto kilka przykładów:
- Bluegiga WT12: użyj polecenia SET BT AUTH *
- National Semiconductor LMX9838: użyj polecenia GAP_SET_SECURITY_MODE z trybem bezpieczeństwa 1 (bez parowania)
itp.
Podłączenie do urządzenia można wtedy wykonać bez parowania. Jeśli urządzenie inicjujące połączenie jest takie samo jak odbiornik, jest to bardzo proste. Jeśli używasz komputera z systemem Windows, możesz przejść przez żmudne tworzenie nowego procesu połączenia i wybrać opcję „nie używaj kodu PIN”, chociaż system Windows prawdopodobnie nadal poprosi o kod PIN podczas łączenia (0000 zwykle działa, ale jest bardzo łuszcząca się). Jeśli używasz Pythona z pybluez, jest to bardzo proste:
import bluetooth
sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect((<insert MAC address>, <insert port number>))
Jeśli jednak chcesz połączyć się z telefonu komórkowego, staje się to znacznie bardziej skomplikowane. Wygląda na to, że zestaw Android SDK nie obsługuje połączeń niesparowanych:
Obecne interfejsy API Androida Bluetooth wymagają sparowania urządzeń przed nawiązaniem połączenia RFCOMM. (Parowanie odbywa się automatycznie po zainicjowaniu szyfrowanego połączenia z interfejsami API Bluetooth.)
(z http://developer.android.com/guide/topics/connectivity/bluetooth.html ). Można to obejść na wiele sposobów, ale są one bardzo skomplikowane i nie są dobrze obsługiwane. Jeśli używasz iPhone'a, łączność Bluetooth to zupełnie inna puszka robaków (licencjonowanie itp.), Więc zostawię to na razie.
Powiedziawszy to wszystko, prawie każdy interfejs API, na jaki kiedykolwiek spojrzałem, pozwala na parowanie isparowanie do wykonania (z godnym uwagi wyjątkiem python / pybluez, ale to tylko opakowanie wokół stosu Microsoft w systemie Windows, więc zawsze możesz bezpośrednio wywołać funkcję niskiego poziomu). Tak więc, jeśli zauważysz urządzenie z odpowiednią klasą urządzenia, dlaczego nie po prostu automatycznie sparować (ze wstępnie zdefiniowanym numerem PIN parowania), nawiązać połączenie, wysłać wymagane dane, rozłączyć, a następnie sparować. Nie wymagałoby to żadnej interwencji użytkownika i dopóki nie robisz tego tysiące razy (co może potencjalnie powodować problemy z zużyciem pamięci EEPROM), nie powinno to powodować żadnych problemów. Zaoszczędzi ci to również wielu kłopotów z próbą uzyskania różnych interfejsów API, aby działały dobrze z czymś, co postrzegane jest jako niestandardowa metoda korzystania z Bluetooth.