- Instalowanie pakietów wymaganych do komunikacji Bluetooth:
- Parowanie urządzeń z Raspberry Pi przez Bluetooth:
- Wybór autka:
- Schemat obwodu i wyjaśnienie:
- Zdalne sterowanie samochodem za pomocą aplikacji na Androida BlueTerm:
- Programowanie w Pythonie:
Raspberry Pi jest bardzo popularne w projektach IoT ze względu na możliwość bezproblemowej komunikacji bezprzewodowej przez Internet. Raspberry Pi 3 ma wbudowane Wi-Fi i Bluetooth, a Bluetooth jest bardzo popularnym protokołem komunikacji bezprzewodowej. Dzisiaj zamierzamy zbudować zdalnie sterowany samochód za pomocą Raspberry Pi 3 i Bluetooth, tutaj użyjemy Smart Phone jako pilota do sterowania samochodem. Wcześniej zbudowaliśmy ten samochód RC za pomocą Arduino.
Tutaj używamy Raspberry Pi 3, które ma wbudowany Bluetooth, więc nie musimy używać zewnętrznego klucza USB Bluetooth. Tutaj używamy protokołu RFCOMM Bluetooth do komunikacji bezprzewodowej.
Programowanie Bluetooth w Pythonie jest zgodne z modelem programowania gniazd, a komunikacja między urządzeniami Bluetooth odbywa się za pośrednictwem gniazda RFCOMM. RFCOMM (komunikacja radiowa) to protokół Bluetooth, który zapewnia emulowane porty szeregowe RS-232, nazywany również emulacją portu szeregowego. Profil portu szeregowego Bluetooth jest oparty na tym protokole. RFCOMM jest bardzo popularny w aplikacjach Bluetooth ze względu na szerokie wsparcie i publicznie dostępne API. Jest powiązany z protokołem L2CAP.
Jeśli masz Raspberry Pi 2, musisz użyć zewnętrznego klucza Bluetooth lub modułu Bluetooth HC-06. Sprawdź nasze poprzednie projekty dotyczące korzystania z tych zewnętrznych urządzeń Bluetooth: Sterowanie GPIO Raspberry Pi za pomocą aplikacji Android przez Bluetooth i urządzeń domowych sterowanych przez Raspberry Pi.
Instalowanie pakietów wymaganych do komunikacji Bluetooth:
Przed rozpoczęciem musimy zainstalować oprogramowanie do konfiguracji komunikacji Bluetooth w Raspberry Pi. Powinieneś mieć zainstalowaną kartę pamięci Raspbian Jessie z Raspberry Pi. Przeczytaj ten artykuł, aby zainstalować Raspbian OS i rozpocząć pracę z Raspberry Pi. Więc teraz musimy najpierw zaktualizować Raspbian za pomocą poniższych poleceń:
sudo apt-get update sudo apt-get upgrade
Następnie musimy zainstalować kilka pakietów związanych z Bluetooth:
sudo apt-get install bluetooth blueman bluez
Następnie uruchom ponownie Raspberry Pi:
sudo reboot
BlueZ to projekt open source i oficjalny stos protokołów Bluetooth w systemie Linux. Obsługuje wszystkie podstawowe protokoły Bluetooth i teraz staje się częścią oficjalnego jądra Linuksa.
Blueman zapewnia interfejs Desktop do zarządzania i sterowania urządzeniami Bluetooth.
Wreszcie potrzebujemy biblioteki Python do komunikacji Bluetooth, abyśmy mogli wysyłać i odbierać dane przez RFCOMM przy użyciu języka Python:
sudo apt-get install python-bluetooth
Zainstaluj także biblioteki obsługujące GPIO dla Raspberry Pi:
sudo apt-get install python-rpi.gpio
Skończyliśmy z instalacją wymaganych pakietów do komunikacji Bluetooth w Raspberry Pi.
Parowanie urządzeń z Raspberry Pi przez Bluetooth:
Parowanie urządzeń Bluetooth, takich jak telefon komórkowy, z Raspberry Pi jest bardzo łatwe. Tutaj sparowaliśmy nasz smartfon z Androidem z Raspberry Pi. Wcześniej zainstalowaliśmy BlueZ w Pi, które udostępnia narzędzie wiersza poleceń o nazwie „bluetoothctl” do zarządzania naszymi urządzeniami Bluetooth.
Teraz otwórz narzędzie bluetoothctl za pomocą poniższego polecenia:
sudo bluetoothctl
Możesz sprawdzić wszystkie polecenia narzędzia bluetoothctl , wpisując „pomoc” . Na razie musimy wprowadzić poniższe komendy w podanej kolejności:
# włączenie # włączenie agenta # wykrywanie podczas # sparowanie podczas # skanowanie włączone
Po ostatnim poleceniu „skanuj” na liście zobaczysz swoje urządzenie Bluetooth (telefon komórkowy). Upewnij się, że Twój telefon komórkowy ma włączony Bluetooth i jest widoczny dla pobliskich urządzeń. Następnie skopiuj adres MAC swojego urządzenia i sparuj go za pomocą polecenia:
para
Następnie zostaniesz poproszony o podanie kodu dostępu lub kodu PIN w konsoli terminala, a następnie wpisz tam hasło i naciśnij klawisz Enter. Następnie po wyświetleniu monitu wpisz to samo hasło w telefonie komórkowym, a teraz pomyślnie sparujesz z Raspberry Pi. Wyjaśniliśmy również cały ten proces w filmie wideo podanym w poprzednim samouczku sterowania GPIO. Oto bezpośredni link do YouTube.
Jak wspomniano wcześniej, do sparowania telefonu komórkowego można również użyć interfejsu pulpitu. Po zainstalowaniu Blueman zobaczysz ikonę Bluetooth po prawej stronie pulpitu Raspberry Pi, jak pokazano poniżej, za pomocą której możesz łatwo wykonać parowanie.
Wybór autka:
W tym projekcie Raspberry Pi Controlled Car użyliśmy zabawkowego samochodu do demonstracji. Tutaj wybraliśmy samochodzik RF z ruchomym kierownicą w lewo iw prawo. Po zakupie tego samochodu zamieniliśmy jego obwód RF na nasz układ Raspberry. Ten samochód ma dwa silniki prądu stałego, jeden do obracania dwóch przednich kół, a drugi do obracania dwóch tylnych kół. Silnik z przodu służy do nadawania kierunku samochodowi, co oznacza skręcanie w lewo lub w prawo (jak w prawdziwym układzie kierowniczym samochodu). Silnik z tyłu służy do napędzania samochodu w kierunku do przodu i do tyłu. Bluetooth Raspberry służy do bezprzewodowego odbierania poleceń z telefonu Android w celu sterowania samochodem.
Możesz użyć dowolnego samochodzika, który ma dwa silniki prądu stałego do obracania przednich i tylnych kół.
Schemat obwodu i wyjaśnienie:
W tym zdalnie sterowanym samochodzie musimy tylko połączyć Raspberry Pi z dwoma silnikami za pomocą modułu L293D. Do zasilania Raspberry Pi i samochodu wykorzystaliśmy mobilny power bank. Mobilny power bank wystarcza do zasilania Raspberry Pi i silników samochodu, ale kiedy zakładamy power bank na samochód, to ze względu na duży ciężar mobilnego powerbanku samochód nie byłby w stanie poprawnie się poruszać. Dlatego zalecamy użycie zasilacza o niewielkiej wadze lub baterii litowych do zasilania systemu. Wszystkie połączenia pokazano na schemacie połączeń poniżej. Sprawdź także naszą sekcję Robotyka, aby dowiedzieć się więcej o sterowaniu silnikami za pomocą różnych technologii.
Uwaga: nie wkładaj więcej niż 5 v do raspberry pi.
Ten obwód został wykonany na płycie Perf Board dla tego projektu, dzięki czemu samochód ma mniejszą wagę.
Zdalne sterowanie samochodem za pomocą aplikacji na Androida BlueTerm:
Teraz po skonfigurowaniu wszystkich rzeczy i pomyślnej próbie sparowania smartfona przez bluetooth, musimy zainstalować aplikację na Androida do komunikacji z Raspberry Pi za pomocą adaptera szeregowego Bluetooth, abyśmy mogli sterować pinami GPIO Raspberry Pi. Jak wspomniano wcześniej, protokół RFCOMM / SPP emuluje komunikację szeregową przez Bluetooth, dlatego zainstalowaliśmy tutaj aplikację BlueTerm, która obsługuje ten protokół.
Możesz także użyć dowolnej innej aplikacji terminala Bluetooth, która obsługuje komunikację przez gniazdo RFCOMM.
Teraz po pobraniu i zainstalowaniu aplikacji BlueTerm uruchom poniższy program w języku Python z terminala i jednocześnie podłącz sparowane urządzenie raspberrypi z aplikacji BlueTerm.
Po udanym połączeniu w prawym górnym rogu aplikacji zobaczysz połączony: raspberrypi, jak pokazano poniżej:
Teraz możesz po prostu wprowadzić następujące polecenia z aplikacji BlueTerm, aby samochód poruszał się w żądanym kierunku. Naciśnij 'q', aby wyjść z programu. Za pomocą klawiatury Google Voice Typing możesz sterować tym samochodem za pomocą Voice. Sprawdź pełną wersję demonstracyjną w filmie podanym na końcu.
Polecenia:
F - Ruch do przodu
B - Ruch do tyłu
S - Stop
L - Ruch do przodu w lewo
R - Ruch do przodu w prawo
A - Ruch do tyłu w lewo
P - ruch do tyłu w prawo
Q - Zakończ
Programowanie w Pythonie:
Program Python do sterowania Raspberry Pi GPIO za pomocą aplikacji na Androida jest bardzo prosty i intuicyjny. Musimy tylko trochę się dowiedzieć o kodzie związanym z komunikacją Bluetooth RFCOMM. W przeciwnym razie to samo, co sterowanie jakimkolwiek robotem lub samochodem poprzez ustawianie sworznia silnika wysoko lub nisko. Pełny program znajduje się poniżej w części Kod.
Najpierw musimy zaimportować bibliotekę gniazd Bluetooth, która pozwoli nam kontrolować Bluetooth za pomocą języka Python; zainstalowaliśmy bibliotekę do tego samego w poprzedniej sekcji.
importuj Bluetooth
Następnie dodaliśmy więcej plików nagłówkowych i zdefiniowaliśmy piny dla silników, ustawiając je domyślnie na niskim poziomie.
importuj czas importu bluetooth importuj RPi.GPIO jako GPIO m11 = 18 m12 = 23 m21 = 24 m22 = 25 GPIO.setwarnings (False) GPIO.setmode (GPIO.BCM) GPIO.setup (m11, GPIO.OUT) GPIO.setup (m12, GPIO.OUT) GPIO.setup (m21, GPIO.OUT) GPIO.setup (m22, GPIO.OUT) GPIO.output (m11, 0) GPIO.output (m12, 0) GPIO.output (m21, 0) Wyjście GPIO (m22, 0)
Poniżej kod odpowiedzialny za komunikację Bluetooth:
server_socket = bluetooth.BluetoothSocket (bluetooth.RFCOMM) port = 1 server_socket.bind (("", port)) server_socket.listen (1) client_socket, address = server_socket.accept () print "Accepted connection from", adres
Tutaj możemy je zrozumieć wiersz po wierszu:
server_socket = bluetooth.BluetoothSocket (bluetooth.RFCOMM): Tworzenie gniazda do komunikacji Bluetooth RFCOMM.
server_socket.bind (("", port): - Serwer wiąże skrypt na hoście '' z portem.
server_socket.listen (1): serwer nasłuchuje, aby zaakceptować jedno połączenie na raz.
client_socket, address = server_socket.accept (): serwer akceptuje żądanie połączenia klienta i przypisuje adres mac do zmiennej adresu, client_socket to gniazdo klienta
Następnie stworzyliśmy kilka funkcji, które są odpowiedzialne za przemieszczanie samochodu w żądanym kierunku: def left_side_forward (), def right_side_forward (), def forward (), def left_side_reverse (), def right_side_reverse (), def reverse () def stop (). Funkcje te zostaną wywołane odpowiednio po naciśnięciu L, R, F, A, P, B, S w aplikacji Mobile blueTerm i samochód odpowiednio się przesunie.
data = "" while 1: data = client_socket.recv (1024) print "Received:% s"% data if (data == "F"): forward () elif (data == "L"): left_side_forward () elif (data == "R"): right_side_forward () elif (data == "B"): reverse () elif (data == "A"): left_side_reverse () elif (data == "P"): right_side_reverse () elif data == "S": stop () elif (data == "Q"): print ("Zakończ") break client_socket.close () server_socket.close ()
data = client_socket.recv (1024): Odbierz dane przez gniazdo klienta client_socket i przypisz je do zmiennej data. Jednocześnie można odebrać maksymalnie 1024 znaki.
Na koniec, po zakończeniu programowania, zamknij połączenie klienta i serwera za pomocą poniższego kodu:
client_socket.close () server_socket.close ()