Eksperymenty z Beaconami Bluetooth w Pythonie

iBeacon to system, jaki zadebiutował w urządzeniach mobilnych Apple i powoli rozprzestrzenia się na Androida, czy inne platformy. W klasycznym układzie beacony wysyłają identyfikatory informujące urządzenia o swojej obecności. Dzięki aplikacjom urządzenie mobilne może np. określić swoje położenie w budynku, pokazać informacje o promocji dostępnej metr obok, czy wskazać drogę dojścia do danego miejsca w budynku.

Beacony można też używać w projektach internetu rzeczy wykorzystując np. Raspberry Pi i adapter Bluetooth 4.0 na USB. W tym artykule postaram się nieco opisać tą technologię i możliwości wykorzystania bez konieczności tworzenia aplikacji iOS/Android.

Adapter Bluetooth 4.0 może służyć za Beacon tak jak chińskie beacony

Co to jest Beacon?

Beacon to radio Bluetooth 4.0 i obsługujący go układ - czy to z procesorem, czy mikroprocesorem. Zwykły adapter Bluetooth 4.0 po podłączeniu do komputera można ustawić by pracował jako taki beacon. Urządzenia końcowe nie wymagają podłączania do komputera, i mieszczą się na małych płytkach drukowanych. Niektóre mogą wykorzystywać proste procesory ARM, a niektóre nawet mikroprocesory - wszystko po to by zapewnić długi czas pracy na baterii i niski koszt.

Możliwość wykorzystania zwykłego adaptera Bluetooth na USB jako beacona sprawiła że pomysł ten wykorzystują użytkownicy np. Raspberry Pi. W takich projektach Raspberry może być beaconem informując o swojej obecności urządzenie mobilne, lub też na odwrót -może skanować w poszukiwaniu beaconów i podejmować akcje, gdy wykryje znany beacon (np. włączyć światło). W odróżnieniu od NFC beacony pracują na większych odległościach - kilku, kilkunastu metrów.

Gotowe ibeacony można kupić od jednego z producentów . Do testów/eksperymentów można użyć też adapterów USB. Oprócz tego dostępne są chińskie wynalazki.

Jak zabrać się za Beacony?

Zacznijmy może od wykrywania iBeaconów. Mając kompatybilne urządzenie iOS/Android można zrobić to za pomocą aplikacji z marketu. W przypadku Linuksa można użyć pybluez. Gotowy skrypt dostępny jest w repozytorium iBeacon-Scanner. Działa nie tylko na Raspberry Pi. Wystarczy w miarę nowa wersja bluez i pybluez. Wystarczy odpalić sudo python testblescanner.py żeby rozpocząć ciągłe skanowanie. Przykładowy wynik:

88:33:14:de:b3:fe,b3de1433880f020106030220fe07fffe,46046,5171,-120,-45

Dane to: MAC-Adres Beacona, UUID Beacona, Major Number (używana do grupowania beaconów), Minor Number (do identyfikacja beacona w grupie), moc TX dla 1m, RSSI (wskaźnik mocy odebranego sygnału).

UUID powinien być unikalnym identyfikatorem jednego konkretnego iBeacona (lub grupy, gdy np. chcemy zrobić beacony z promocją w różnych punkach sieci sklepów itd.). UUIDy można generować za pomocą Pythona:

python -c 'import uuid;print(uuid.uuid4().hex)'

Za pomocą linux-ibeacon można skonfigurować dany adapter Bluetooth do pracy jako beacon. On również wykorzystuje pybluez.

Korzystając z laptopa posiadającego Bluetooth 4.0 i po podłączeniu adaptera na USB można jednym radiem wysyłać, a drugim odbierać. Ważne jest by określić które radio ma jaki numer. sudo hciconfig list je wylistuje. U mnie wylistował adapter na USB jako hci0, więc w testblescan.py ustawiłem dev_id na 1 tak by odbierać drugim radiem, a hci0 skonfigurowałem jako beacon: sudo ./ibeacon -u random -d hci0. W efekcie radio odbierające wyłapało Beacona:

f8:16:54:64:ac:b6,eb2b7a3048b04debb6943f2ab0df6485,0,0,-56,-52

Na koniec polecam też awesome-ibeacon - listę materiałów dotyczących Beaconów.

Chiński niebieski beacon

Na dx.com beacony nazywane są urządzeniami przeciw-zagubieniu. Aplikacja mobilna alarmuje użytkownika, gdy odległość od beacona za bardzo wzrośnie (np. przypiętego do kluczy, czy torebki.). Urządzenie, które kupiłem ładuje się przez USB. Posiada jeden przycisk, który przytrzymany włączy lub wyłączy urządzenie (dłuższy lub krótki pisk). Włączony był wykrywalny z laptopa za pomocą skryptu pybluez.

Locly

locly to platforma obsługi Beaconów. Jeżeli masz zainstalowaną aplikację locly na iOS to twoje urządzenie będzie wykrywać i obsługiwać Beacony podpięte do jej systemu. Zamiast odbierania UUID, czy określania odległości skanemer pozwala ona wyświetlić jakąś ładną treść - a wszystko to wyklikując na prostych formularzach. Wygląda to na szybki sposób do stworzenia dema prezentującego pomysł na wykorzystanie Beaconów.

Na zakończenie

System Beaconów Bluetooth może pomóc w tworzeniu fajnych projektów. Jak na razie technologia ta jest bardziej dostępna dla użytkowników iOS, niż Android, ale powoli idzie do przodu. Możliwe że podobnie jak NFC, czy RFID pozostanie wyspecjalizowaną technologią, z jakiej korzystać będą tylko wtajemniczeni. Podobnie chyba wygląda to w projektach Internetu Rzeczy, choć tutaj łatwiej o zastosowanie zbliżania się beacona do jednostki centralnej odpowiedzialnej za np. sterowanie domem.

Z drugiej strony możemy pochwalić się polskimi startupami, czy firmami oferującymi kompleksowe rozwiązania z wykorzystaniem Beaconów. Ich rozwój i oferta świadczy o istnieniu zapotrzebowania (przynajmniej na razie) na taką technologię.

RkBlog

Programowanie Sieciowe, 2 March 2015

Comment article
Comment article RkBlog main page Search RSS Contact