Zaprezentowany projekt może wydawać się bezsensowny. Do wykonania klawiatury z Bluetooth użyto zwykłej klawiatury USB, komputera Raspberry Pi z kartą pamięci i zasilaczem oraz interfejs Bluetooth na USB. Koszt komponentów znacząco przewyższa cenę zakupu nawet całkiem dobrej klawiatury Bluetooth, a wykonany w ten sposób „produkt”, o ile pozwala bezprzewodowo komunikować się np. ze smartfonem, to i tak w sumie musi być dołączony na stałe kablem do zasilania.
Projekt ten ma jednak bardzo dużą wartość dydaktyczną, gdyż zastosowany w nim mechanizm można łatwo zreplikować i wykorzystać do bezprzewodowego sterowania np. aplikacją mobilną przez miniaturowy komputer. Kluczowe jest tu użycie profilu HID, który natywnie obsługują praktycznie wszystkie urządzenia komputerowe z interfejsem Bluetooth. Co więcej, domyślnie jest on automatycznie interpretowany jako dane wprowadzane z klawiatury, co oznacza że Raspberry Pi lub dowolny inny minikomputer może bezprzewodowo symulować wprowadzanie znaków na dowolnym urządzeniu mobilnym. Sekwencja przesyłanych znaków może reprezentować dowolne zdarzenia. Można w ten sposób przekazywać odczyty z czujników lub wykonać nietypowy interfejs człowiek-maszyna. Co więcej, by pozyskiwać odczyty nie trzeba nawet tworzyć aplikacji na urządzeniu mobilnym – wystarczy włączyć program notatnika i tam czekać na pojawiające się dane. Oczywiście, w praktyce byłoby to niewygodne, ale dla kreatywnego twórcy taki interfejs prawdopodobnie znajdzie zastosowanie, czy też przyda się na etapie prototypowania.
Problemy
Wykonanie omówionego projektu mogłoby wydawać się całkiem łatwe – wystarczyłoby napisać program sczytujący odpowiednie dane i przesyłający je przez interfejs Bluetooth z użyciem gotowych bibliotek programowych. Problem jednak w tym, że przynajmniej pod kontrolą systemu Linux, wsparcie dla Bluetooth jest ograniczone.
Najbardziej popularnym zestawem bibliotek Bluetooth jest BlueZ, przy czym przez niektórych użytkowników jest on określany mianem „najskrzętniej pilnowanej tajemnicy Linuksa”. Dotyczy to przede wszystkim dostępności dokumentacji, która nie tylko jest skąpa, co zawiera błędy. Sama biblioteka też dopracowana nie jest i nierzadko bywa, że gotowe przykłady z Internetu nie działają.
Na przestrzeni lat powstało wiele poradników pokazujących jak korzystać z Bluetootha pod Linuksem, a w tym także – jak używać BlueZ z poziomu języka Python. Niestety, kolejne wersje BlueZ sprawiły, że wiele z tych rad straciło na aktualności. Kluczowe jest rozróżnienie dwóch grup wersji BlueZ. Wraz z wprowadzeniem BlueZ 5.0 drastycznie zmodyfikowano dostępne API, usuwając wiele podstawowych funkcji. Zamiast tego zaimplementowano kilka innych, przy czym celem twórców BlueZ było wyeliminowanie zaszłości historycznych oraz dublujących się mechanizmów. Choć zamysł ten wydaje się bardzo szczytny, efektem takiego działania jest całkowity brak kompatybilności wstecznej BlueZ 5.0 i nowszych bibliotek. Co więcej, pomimo że najnowszą w tej chwili wersją BlueZ jest 5.37, wielu błędów wciąż nie udało się wyeliminować. W efekcie, ten sam interfejs USB Bluetooth na tym samym urządzeniu, z tym samym systemem operacyjnym może działać bezproblemowo z BlueZ starszym niż 5.0, podczas gdy aktualizacja narzędzi BlueZ zupełnie popsuje funkcjonowanie komunikacji. I dotyczy to nie tylko dostępnego API, które jest po prostu różne i niekompatybilne wstecz, ale także oficjalnych, skompilowanych na daną platformę narzędzi uruchamianych z linii poleceń.
Problem ten od niedawna dotyczy także użytkowników Raspberry Pi. Wprowadzony we wrześniu Raspbian Jessie zawiera jądro Linuxa w wersji 4.1 i BlueZ 5.23. Natomiast oficjalnie dostępny na stronach Raspberry Pi jeszcze do około połowy lutego, Raspbian Wheezy korzysta ze starszego jądra i z BlueZ 4.99. Starsze aplikacje, napisane pod kątem BlueZ 4.x nie będą więc poprawnie działały w Raspbianie Jessie.
Archiwalne wersje Raspbiana można znaleźć tu http://downloads.raspberrypi.org/raspbian/images/.