Jak podłączyć surowy terminal szeregowy do połączenia Bluetooth?

10

Próbuję połączyć się z Totalstation, który nie oferuje sterowników Bluetooth. Ponieważ robię to z powodów czysto diagnostycznych, chciałbym zobaczyć surowe dane wyjściowe z ustanowionego połączenia szeregowego.

Co muszę zrobić, aby przesłać wszystkie dane wyjściowe z połączenia Bluetooth do terminala?

Brian Ballsun-Stanton
źródło
Czy korzystasz z Bluetooth-> Szeregowy, Szeregowy-> Bluetooth, czy dwukierunkowy?
nanofarad
Totalstation Bluetooth <-> Ubuntu Bluetooth. Biorąc pod uwagę, że totalstation ma standardową konfigurację szeregową przez USB, podejrzewam, że nawiązuje połączenie szeregowe przez Bluetooth. Oczywiście mogę się całkowicie mylić, w którym to momencie odpowiedź, że się mylę i Bluetooth używa XYZ jest całkowicie dopuszczalna.
Brian Ballsun-Stanton
Jeśli chodzi o dwukierunkowy dowód, udało mi się ustanowić puste połączenie szeregowe za pośrednictwem „ekranu”, który powoduje sygnał błędu na urządzeniu, gdy nacisnę klawisz na klawiaturze. Podejrzewam, że jestem w połowie drogi, po prostu nie wiem, która połowa.
Brian Ballsun-Stanton
Czy potrafisz sporządzić szybki schemat? Nie rozumiem, czy jest to łącze szeregowe, czy Bluetooth przez łącze szeregowe, a także kto przekazuje dane dokąd. Po prostu zrób to w GIMP lub coś i prześlij to tutaj
nanofarad
Działa bardzo dobrze, ale wpadam na pewne usterki z RFCOMM. Kiedy łączę się z SCREEN, niektóre Sekwencje AT są trzykrotnie automatycznie wpisywane „ATE1 E0” <POWRÓT>. Z tego powodu po stronie Raspi pojawia się komunikat „Logowanie nieudane”. Po tym mogę z powodzeniem zalogować się i korzystać z sesji terminalowej bez żadnych dalszych usterek.
Cody

Odpowiedzi:

5

Jako dodatek do odpowiedzi Briana. Ekran nie działał dla mnie, natychmiast się wyświetlał[screen is terminating]

Więc znalazłem ten skrypt Python Miniterm . Użycie jest podobne:

sudo miniterm.py /dev/rfcomm0
Aleksander Biełow
źródło
12

1) Użyj, hcitool scanaby znaleźć adres Mac urządzenia.

Urządzenie powinno być ustawione w tryb slave ze znanym stykiem. Jeśli nie użyjesz znanego kodu PIN, Ubuntu go wymyśli i na ogół nie będziesz miał czasu, aby wprowadzić go w nieporęczne menu twojego narzędzia pomiarowego.

2) Nie jestem do końca pewien, czy jest to konieczne, ale w menu GUI Bluetooth sparuj urządzenie.

3) w /etc/bluetooth/rfcomm.conf

rfcomm0 {
        bind no;
        device 00:07:80:44:4F:37;
        channel 1;
        comment "Serial Port";
        }

„Nie wiąż” jest ważne, w przeciwnym razie spróbuje się automatycznie powiązać, co stwarza różnego rodzaju problemy z faktycznym dostępem do urządzenia (ponieważ jest dość wybredne, gdy jest skojarzone)

4) sudo rfcomm connect 0

Jeśli masz błędy, uruchom ponownie usługę Bluetooth.

5) screen /dev/rfcomm0

W sprawie rzeczywistych poleceń szeregowych przesyłanych w ten sposób skontaktuj się ze sprzedawcą i błagaj.

Brian Ballsun-Stanton
źródło
3
Gdy próbuję uruchomić „rfcomm connect 0”,
pojawia
Czy poprawnie edytowałeś swój plik conf?
Brian Ballsun-Stanton
5
Spróbuj sudo rfcomm connect rfcomm0 00: 07: 80: 44: 4F: 37
elopio
@ elopia's oneliner bardzo prosty. To zadziałało dla mnie
ptetteh227
10

Oto mój sposób na połączenie się z urządzeniem Bluetooth HC-05 podłączonym do mojego arduino. Nie musi pisać pliku jak w odpowiedzi Briana, ale pomysł jest podobny. Przetestowałem to z ustawieniem prędkości 9600 bodów na urządzeniu HC-05.

Pierwszy krok: sparuj urządzenie i podaj kod PIN

Próbowałem skonfigurować z GUI parowanie, ale nie działało. Oto sposób postępowania z wiersza poleceń, który zadziałał dla mnie. Najpierw sparujmy urządzenie z linii poleceń. Biegać :

sudo bluetoothctl

Upewnij się, że urządzenie Bluetooth zostało uruchomione:

# power on

Teraz uruchamiamy agenta, który „zapamięta kod PIN” dla rfcomm:

# agent on

Teraz włączamy tryb skanowania, aby znaleźć nasze urządzenie i móc je sparować:

# scan on

Po kilku sekundach powinien pojawić się adres MAC urządzenia. Oznaczymy to później. Następnie wystarczy sparować urządzenie w następujący sposób:

# pair <MAC>

Zostaniesz poproszony o wpisanie kodu PIN, domyślnie jest on 1234na moim urządzeniu HC-05. Możesz zauważyć, że możliwe jest, że urządzenie połączysz, a następnie rozłączysz z takim komunikatem:

[CHG] Device 20:16:10:24:29:77 UUIDs: 00001101-0000-1000-8000-00805f9b34fb
[CHG] Device 20:16:10:24:29:77 ServicesResolved: yes
[CHG] Device 20:16:10:24:29:77 Paired: yes
Pairing successful
[CHG] Device 20:16:10:24:29:77 ServicesResolved: no
[CHG] Device 20:16:10:24:29:77 Connected: no

ale to nie problem. Nie musisz się łączyć, więc możesz teraz wyjść bluetoothctl, pisząc Ctrl + D.

Podaj przydatny plik /dev/rfcomm0

Po pierwsze, upewnij się, że nie uruchomiłeś wcześniej żadnego polecenia rfcomm. Rzeczywiście, nawet jeśli zamkniesz Ctrl+Cprogram, nadal działa on w tle.

sudo killall rfcomm

Teraz możesz biegać

sudo rfcomm connect /dev/rfcomm0 20:16:10:24:29:77 1 &

Zauważ, że jeśli spróbujesz pisać na wejściu rfcom, nic się nie stanie. Musisz użyć innego programu.

Trzeci i ostatni krok: napisz do /dev/rfcomm0

Plik można zapisać na kilka sposobów, ale należy pamiętać, że wszystkie sposoby postępowania wymagają rootowania. Opisuję tutaj kilka programów, które mogą to zrobić (abyś mógł wybrać w zależności od potrzeb lub na przykład tego, co jest zainstalowane w systemie). Jeśli zapomnisz uruchomić program jako root, możesz mieć błąd:

stty: /dev/rfcomm0: Device or resource busy

Pierwsza opcja: połącz za pomocą screen

Screen to bardzo potężne narzędzie. Możesz go zainstalować (zawsze jest to przydatne), używając:

sudo apt-get install screen

a następnie biegnij

sudo screen /dev/rfcomm0

Jeśli zapomnisz uruchomić go jako root, pojawi się błąd taki, jak Aleksander:

[screen is terminating]

Aby wyjść, wpisz „(CTRL + A) +: quit”

Druga opcja: połącz za pomocą minicom

Zainstaluj to

sudo apt-get install minicom

a następnie biegnij

sudo minicom -D /dev/rfcomm0

Jeśli zapomnisz uruchomić go jako root, wystąpi błąd podobny do tego

minicom: cannot open /dev/rfcomm0: Device or resource busy

Aby wyjść, wpisz „Ctrl + A X”.

Trzecia opcja: miniterm skryptu python

Pobierz ten skrypt i uruchom:

chmod +x miniterm.py
sudo ./miniterm.py /dev/rfcomm0

Napisz bezpośrednio do pliku

Najpierw uruchom następujące polecenie (9600 to prędkość transmisji):

sudo stty -F /dev/rfcomm0 cs8 9600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts 

Teraz możesz pisać w tym pliku jak w klasycznym pliku:

sudo su -c "echo 'message' > /dev/rfcomm0"

i teoretycznie czytam z niego za pomocą

sudo tail -f /dev/rfcomm0

Ale nie wiem, czy czytanie nie działa, jeśli ktoś z was ma pomysł ...

tobiasBora
źródło
/def/rfcomm0powinno być/dev/rfcomm0
stewSquared