Pracuję na urządzeniu, które może bezprzewodowo aktywować system „natychmiast”. Pierwszą rzeczą, jaka przyszła mi do głowy, było zastosowanie technologii RFID, która ma zaletę natychmiastowej i taniej komunikacji. Jestem jednak zainteresowany wykorzystaniem funkcji Bluetooth mojego telefonu do wykonania tego zadania.
Więc moje pytanie brzmi: aby korzystać z komunikacji Bluetooth, czy istnieje sposób na komunikację bez parowania? Innymi słowy, na bardzo uproszczonym poziomie, załóżmy, że mój odbiornik Bluetooth oczekuje kodu „abc123”. Urządzenie Bluetooth, takie jak telefon, jest zaprogramowane do ciągłego przesyłania tego kodu. Po otrzymaniu kodu system zaczyna robić wszystko, co powinien, po udzieleniu dostępu. Taki system usunąłby oczywiście barierę parowania kosztem bezpieczeństwa.
Czy to możliwe? Nie rozumiem protokołów Bluetooth na bardzo technicznym poziomie, ale jeśli ktoś może dać mi przewagę, mogę zacząć uczyć się od tego momentu. Nie uważaj mojego ograniczonego rozumienia za ograniczenie.
Odpowiedzi:
Tak, to całkowicie możliwe. Skomentowałem to wcześniej i od tego czasu zajrzałem dalej. Możliwe, że wyzwalające urządzenie Bluetooth wyśle sygnał aktywacyjny za pomocą przyjaznej nazwy .
Przyjazna nazwa to czytelna dla człowieka nazwa, która pojawia się na liście podczas wyszukiwania urządzenia Bluetooth do sparowania. Szybkość aktywacji zależy od tego, jak szybko urządzenie odbierające odpytuje przyjazne nazwy. Nie wspomniałeś, jakiego rodzaju urządzenia odbiorczego używasz, ale znalazłem ten plik PDF (str. 35) szczegółowo opisujący proces aktualizacji przyjaznych nazw urządzeń Bluetooth znajdujących się w zasięgu.
Możesz wyszukiwać przyjazne nazwiska tak często, jak potrzebujesz. Jeśli urządzenie wyzwalające zmieni przyjazną nazwę na kod aktywacyjny,
abc123
urządzenie odbierające będzie mogło zobaczyć tę nazwę bez parowania i aktywować dowolne zadanie, które próbujesz wykonać. Pozwala to również na posiadanie wielu kodów aktywacyjnych, myślę, że możesz uzyskać do 248 bajtów na przyjazną nazwę Bluetooth.Możesz także celowo otworzyć się na Bluejacking . Nie znam tego, ale jeśli bezpieczeństwo nie jest problemem, może działać.
źródło
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:
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:
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:
(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.
źródło
Można to osiągnąć dzięki technologii marki Bluetooth o nazwie Bluetooth Smart (lub Bluetooth Low Energy / Bluetooth 4.0), a także w zależności od posiadanego telefonu.
Główną zaletą Low Energy w porównaniu ze zwykłym Bluetooth jest to, że zużywa znacznie mniej energii, a oczekiwany czas życia urządzenia może wynosić lata w zależności od interwału połączenia i tego, ile reklamuje na baterii pastylkowej.
Aby rozwiązać ten problem, możesz umieścić ten kod w danych reklamowych mikroukładu. ( Bluetooth 4.0 Core Spec. Volume 3, Part C, Section 11.1.4 or 11.1.10)
Jest 3 głównych producentów układów, którzy produkują układy o niskiej energii (TI, CSR i Nordic Semiconductor)
Nordic ma układ łączności o nazwie nRF8001 (układ łączności, w pełni kwalifikowane urządzenie) i SoC nRF51822 . Zaletą korzystania z nRF8001 jest to, że możesz korzystać z wybranego procesora i nie musisz przejmować się specyfikacją Bluetooth, ponieważ jest to obsługiwane przez układ. Zaletą nRF51822 jest to, że jest to układ na chipie i zmniejsza on BOM, działa Cortex-M0 i powinien być w pełni kwalifikowany po wydaniu.
Mam układ 8051 SoC cc2540, a CSR układ SoC CSR µEnergy
Wszystko sprowadza się do twoich potrzeb i preferencji procesora oraz funkcjonalności / kosztu
źródło
Tak, komunikacja Bluetooth jest możliwa bez parowania urządzeń. Użyj
insecureRfcom
szacunku bezpiecznego RFCOM. Przesyłanie danych nie wymaga parowania.źródło
Skutkiem udanego parowania jest klucz połączenia, sekret, który sparowane urządzenia udostępniają i umożliwiają im komunikację.
Jeśli można ustawić klucz połączenia w systemie, to tak, nie jest wymagane parowanie. Wystarczy ustawić ten sam klucz linku na obu urządzeniach. Po tym połączeniu można pomyślnie otworzyć, tak jakby dwa urządzenia zostały sparowane.
Na przykład w systemie Linux po sparowaniu
info
plik jest zapisywany dla każdego sparowanego urządzenia pod / var / lib / bluetooth / local-device-address / remote-device-address /Po
General
sekcji zawiera następujące:[LinkKey] Key=FF00112233445566778899AABBCCDDEE Type=5 PINLength=0
Można to ustawić bezpośrednio bez parowania. Jeśli to samo jest zapisane na zdalnym urządzeniu. Urządzenia są sparowane.
źródło