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
- dla tych, którzy się zastanawiają dlaczego wszystkie poniższe odpowiedzi nie ' nie działają: z BlueZ > = 5 potrzebujesz trybu zgodności, zobacz tutaj: raspberrypi.stackexchange.com/questions/41776/…
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
- Dobra odpowiedź. Mam to do pracy z Ubuntu 16 / Bluez 5 i te informacje: bbs.archlinux.org/viewtopic.php?id=201672 .
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 .