Jak połączyć się i wysłać dane do portu szeregowego Bluetooth w systemie Linux?

Próbuję skonfigurować wirtualny port szeregowy za pomocą adaptera USB-Bluetooth w systemie Linux i wysłać do niego wiadomość za pośrednictwem urządzenia z systemem Android. I „m na jądrze 3.6. Mogę pomyślnie sparować się z urządzeniem za pomocą gnome-bluetooth, a także mogę wysyłać do niego pliki.

Aby skonfigurować port szeregowy, najpierw dodaję kanał z profilem SP do mojej karty:

sdptool add --channel=22 SP 

Następnie wywołuję polecenie „Listen” za pomocą rfcomm:

rfcomm listen /dev/rfcomm0 22 

który blokuje

Waiting for connection on channel 22 

Najwyraźniej rfcomm utworzy / dev / rfcomm0 po udanym połączeniu. Gdy to się stanie, chciałbym użyć czegoś takiego jak cutecom do wysyłania wiadomości tam iz powrotem do podłączonego urządzenia.

Na moim urządzeniu z Androidem otwieram terminal Bluetooth SPP (jest ich kilka, wypróbowałem kilka) i próbuję się połączyć. Wszyscy zawodzą.

Biorąc pod uwagę, że mogę pomyślnie sparować i wysyłać pliki bez żadnych problemów, wiem, że parowanie i komunikacja Bluetooth działa.

Nie jestem pewien, czego jeszcze mogę spróbować. Użyłem „sdptool Browse” na moim urządzeniu lokalnym i urządzeniu z Androidem, aby upewnić się, że nie ma żadnych konfliktów kanałów RFCOMM.

Komentarze

Odpowiedź

Wydaje mi się, że teraz to działa. Bluetooth wydaje się nieco skomplikowany. Podsumowuję moje kroki w całości na wypadek, gdyby ktoś inny uznał to za przydatne (chociaż jest to prawie to, co początkowo próbowałem). To jest dla Androida JB (4.2.2) na Nexusie 4 i Arch Linux 3.6.7-1, z bluez 4.101 w Gnome 3.6 (w / gnome-bluetooth).

(ten krok może nie przynieść nic pożytecznego) Wyłącz Bluetooth na Androidzie i odłącz adapter USB / Bluetooth od Komputer z systemem Linux (lub jeśli masz wbudowany, zresetuj go za pomocą resetowania hcitool devname)

Podłącz / włącz adapter bluetooth w systemie Linux. Upewnij się, że adapter jest widoczny (można go ustawić w gnome-bluetooth – – powinieneś zobaczyć ikonę bluetooth w zasobniku systemowym).

Włącz Bluetooth na swoim urządzeniu z Androidem. Użyj Androida, aby sparować z adapterem (nie udało mi się sparować w drugą stronę z Linuksa). pojawi się z prośbą o klucz. Wprowadź dowolny kod PIN. Gnom powinien wyświetlić powiadomienie z prośbą o klucz; wprowadź ten sam kod PIN, który wprowadziłeś wcześniej. Twoje urządzenie z Androidem i klucz powinny być sparowane w tym momencie.

W Linuksie otwórz terminal i sprawdź, jakie usługi Bluetooth są dostępne, wpisując

sdptool browse local 

Jeśli masz już usługę portu szeregowego, zrób zwróć uwagę, jaki to kanał. Jeśli tego nie zrobisz, możesz dodać usługę:

sdptool add --channel=22 SP 

Teraz słuchaj na tym kanale używając rfcomm:

sudo rfcomm listen /dev/rfcomm0 22 

rfcomm zablokuje, nasłuchując połączenia z wiadomością taką jak

Waiting for connection on channel 22 

W Androidzie użyłem aplikacji BlueTerm ( http://pymasde.es/blueterm/ , również dostępne bezpłatnie w sklepie Google Play), chociaż każda podobna aplikacja powinna działać. Otwórz BlueTerm, przejdź do opcje> Połącz urządzenie: wybierz sparowany adapter.

Miejmy nadzieję, że aplikacja była w stanie się połączyć. Zobaczysz dodatkową weryfikację w terminalu, w którym zablokowałeś nasłuchiwanie z komunikatem:

Waiting for connection on channel 22 Connection from 22:22:22:22:22:22 to /dev/rfcomm0 Press CTRL-C for hangup 

Wszystko, co wpisujesz w aplikacji BlueTerm, powinno trafiać do / dev / rfcomm0. Możesz zobaczyć rzeczy pojawiające się podczas pisania, otwierając nowy terminal i wykonując coś takiego:

cat /dev/rfcomm0 

Komentarze

Odpowiedź

Poniższe kroki zadziałały dla mnie:

Najpierw musisz sparować urządzenia. Parowanie jest stosunkowo łatwe. Zadzwonię do klienta (który zaczyna mówić) i serwera (który odpowiada)

Serwer musisz skonfigurować wcześniej: Strona serwera (jako root):

sdptool add --channel=3 SP mknod -m 666 /dev/rfcomm0 c 216 0 rfcomm watch /dev/rfcomm0 3 /sbin/agetty rfcomm0 115200 linux 

Po stronie klienta (jako root):

sdptool add --channel=3 SP rfcomm connect /dev/rfcomm0 [SERVER_ADDR] 3 

Teraz, aby otworzyć terminal szeregowy na kliencie:

screen /dev/rfcomm0 115200 

Komentarze:

Kiedy wywołasz ostatnie polecenie rfcomm connect … w kliencie, urządzenie /dev/rfcomm0 zostać utworzony i powiązany z serwerem /dev/recomm0. To reprezentuje łącze szeregowe pomiędzy obydwoma.

Ostatnie polecenie serwera: rfcomm watch …. będzie „nasłuchiwać” połączeń przychodzących. W przypadku utraty połączenia polecenie uruchomi ponownie nowy stan „nasłuchiwania”.

Komentarze

  • Odpowiedź udzielona przez ismaia prawie Cię tam prowadzi.Musisz jednak pamiętać, że nowszy stos bluez wymaga specjalnej opcji --compat, w przeciwnym razie dodanie SP może się nie powieść. Zobacz tutaj . Więc dostosuj / popraw skrypty startowe systemd / initd, tak aby --compat tam było.

Odpowiedz

Rozwiązałem to z niewielką różnicą w poleceniach Pris. Daj im szansę, jeśli ktoś nadal ma problemy ze skonfigurowaniem połączenia rfcomm.

sudo service bluetooth restart 

To ^ zapewnia, że zaczynasz z czystym kontem za każdym razem, gdy próbujesz skonfigurować połączenie.

rfcomm add --channel=<a_channel_#> SP 

Ten numer kanału powinien być inny niż jakikolwiek aktualnie przypisany kanał.

(OPCJONALNIE) Aby sprawdzić kanały:

sdptool browse local | grep Channel 

Nie wiem, dlaczego to następne polecenie jest potrzebne, ale zadziałało.

rfcomm release 0 

Następnie, aby nasłuchiwać połączeń przychodzących:

rfcomm watch 0 <a_channel_#> 

UWAGA: adres MAC bt w /etc/bluetooth/rfcomm.conf, ale to adres MAC bt twojego telefonu. Również kanał w tym pliku musi być taki sam, jak ten wybrany dla a_channel_ #.

Kiedy już to wszystko zrobiłem, używam emulator terminala da bt w moim telefonie, aby to wszystko sprawdzić.

Odpowiedź

Próbowałem różnych narzędzi Bluetooth i było to trudne aby znaleźć właściwą sekwencję poleceń do połączenia i wymiany danych z modułem bluetooth. Spróbuj użyć rfcomm i minicom:

To jest mój /etc/bluetooth/rfcomm.conf

rfcomm0 { # Automatically bind the device at startup bind no; # Bluetooth address of the device device 11:22:33:44:55:66; # RFCOMM channel for the connection channel 3; # Description of the connection comment "This is Device 1"s serial port."; } 

Wyszukaj urządzenia bluetooth:

hcitool scan Scanning ... 20:15:12:08:62:95 HC-06 

Bind using rfcomm

sudo rfcomm bind 0 20:15:12:08:62:95 1 

Uwaga: bind 0 odnosi się do urządzenia numer 0 (rfcomm0 ), a 1 to kanał.

Następnie użyj minicom z sudo i zapisz konfigurację, w której określasz szybkość transmisji i port. Możesz znaleźć więcej informacji tutaj .

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *