- Installation af nødvendige pakker til Bluetooth-kommunikation:
- Parring af enheder med Raspberry Pi via Bluetooth:
- Valg af legetøjsbil:
- Kredsløbsdiagram og forklaring:
- Fjernstyring af bil med Android App BlueTerm:
- Python-programmering:
Raspberry Pi er meget populær til IoT-projekter på grund af sin problemfri evne til trådløs kommunikation over internettet. Raspberry Pi 3 har indbygget Wi-Fi og Bluetooth, og Bluetooth er en meget populær trådløs kommunikationsprotokol. I dag skal vi bygge en fjernstyret bil ved hjælp af Raspberry Pi 3 og Bluetooth, her bruger vi Smart Phone som fjernbetjening til at styre bilen. Vi har tidligere bygget oprettet denne RC-bil ved hjælp af Arduino.
Her bruger vi Raspberry Pi 3, som har indbygget Bluetooth, så vi behøver ikke bruge nogen ekstern USB Bluetooth-dongle. Her bruger vi RFCOMM Bluetooth-protokol til trådløs kommunikation.
Programmering af Bluetooth i Python følger sokkelprogrammeringsmodellen, og kommunikation mellem Bluetooth-enhederne sker via RFCOMM-stikket. RFCOMM (Radio Frequency Communication) er en Bluetooth-protokol, der leverede emulerede RS-232 serielle porte og også kaldet Serial Port Emulation. Bluetooth-seriel portprofil er baseret på denne protokol. RFCOMM er meget populær i Bluetooth-applikationer på grund af sin brede support og offentligt tilgængelige API. Det er bundet til L2CAP-protokollen.
Hvis du har Raspberry Pi 2, skal du enten bruge ekstern Bluetooth-dongle eller Bluetooth-modul HC-06. Tjek vores tidligere projekter for brug af disse eksterne Bluetooth-enheder: Styring af Raspberry Pi GPIO ved hjælp af Android-appen via Bluetooth og Raspberry Pi-styrede Hvidevarer.
Installation af nødvendige pakker til Bluetooth-kommunikation:
Før vi starter, skal vi installere noget software til opsætning af Bluetooth-kommunikation i Raspberry Pi. Du skal have et Raspbian Jessie-installeret hukommelseskort klar med Raspberry Pi. Tjek denne artikel for at installere Raspbian OS og komme i gang med Raspberry Pi. Så nu skal vi først opdatere Raspbian ved hjælp af nedenstående kommandoer:
sudo apt-get opdater sudo apt-get upgrade
Derefter skal vi installere få Bluetooth-relaterede pakker:
sudo apt-get install bluetooth blueman bluez
Genstart derefter Raspberry Pi:
sudo genstart
BlueZ er et open source-projekt og officiel Linux Bluetooth-protokolstak. Det understøtter alle de centrale Bluetooth-protokoller og bliver nu en del af den officielle Linux-kerne.
Blueman leverer Desktop-interface til at styre og kontrollere Bluetooth-enheder.
Endelig har vi brug for python-bibliotek til Bluetooth-kommunikation, så vi kan sende og modtage data via RFCOMM ved hjælp af Python-sprog:
sudo apt-get install python-bluetooth
Installer også GPIO-supportbibliotekerne til Raspberry Pi:
sudo apt-get install python-rpi.gpio
Nu er vi færdige med at installere nødvendige pakker til Bluetooth-kommunikation i Raspberry Pi.
Parring af enheder med Raspberry Pi via Bluetooth:
Parring af Bluetooth-enheder, som mobiltelefon, med Raspberry Pi er meget let. Her har vi parret vores Android Smart-telefon med Raspberry Pi. Vi har tidligere installeret BlueZ i Pi, som giver et kommandolinjeprogram kaldet "bluetoothctl" til at styre vores Bluetooth-enheder.
Åbn nu bluetoothctl- hjælpeprogrammet ved nedenstående kommando:
sudo bluetoothctl
Du kan kontrollere alle kommandoerne i bluetoothctl- værktøjet ved at skrive 'hjælp' . For nu skal vi indtaste nedenstående kommandoer i den angivne rækkefølge:
# tænd for # agent til # synlig på # parring på # scanning til
Efter den sidste kommando "scan on" vil du se din Bluetooth-enhed (mobiltelefon) på listen. Sørg for, at Bluetooth er slået til og synlig på din enhed i nærheden af din mobil. Kopier derefter MAC-adressen på din enhed, og par den ved hjælp af den givne kommando:
par
Derefter bliver du bedt om adgangskode eller pin i din terminalkonsol, skriv derefter adgangskode der og tryk enter. Skriv derefter den samme adgangskode i din mobiltelefon, når du bliver bedt om det, og du er nu parret med succes med Raspberry Pi. Vi har også forklaret hele denne proces i videoen, der blev givet i tidligere GPIO-kontrolvejledning. Her er det direkte YouTube-link.
Som tidligere fortalt kan du også bruge Desktop-interface til at parre mobiltelefonen. Efter installation af Blueman vil du se et Bluetooth-ikon i højre side af dit Raspberry Pi-skrivebord som vist nedenfor, ved hjælp af hvilket du nemt kan udføre parringen.
Valg af legetøjsbil:
I dette Raspberry Pi Controlled Car-projekt har vi brugt en legetøjsbil til demonstration. Her har vi valgt en RF- legetøjsbil med bevægelig venstre-højre styringsfunktion. Efter at have købt denne bil har vi udskiftet dens RF-kredsløb med vores Raspberry-kredsløb. Denne bil har to jævnstrømsmotorer, den ene til at dreje to forhjul og den anden er at dreje to baghjulene. Frontmotoren bruges til at give retning til bilen, dvs. dreje til venstre eller højre side (som ægte bilstyringsfunktion). Og bagmotoren bruges til at køre bilen fremad og bagud. En Bluetooth af hindbær bruges til at modtage kommando trådløst fra Android-telefonen til at styre bilen.
Du kan bruge en hvilken som helst legetøjsbil, der har to DC-motorer til at rotere for- og baghjul.
Kredsløbsdiagram og forklaring:
I denne fjernstyrede bil behøver vi kun at forbinde Raspberry Pi med to motorer ved hjælp af L293D-modulet. Til at drive Raspberry Pi og bilen har vi brugt en mobil powerbank. Den mobile powerbank er nok til at drive Raspberry Pi og bilens motorer, men når vi lægger powerbank over bilen, ville den mobile vægtbank ikke være i stand til at bevæge sig korrekt på grund af den tunge vægt. Så vi anbefaler at bruge strømforsyningen med lav vægt eller lithiumbatterier til at drive systemet. Alle forbindelser er vist i kredsløbsdiagrammet nedenfor. Se også vores sektion Robotics for at lære mere om styring af motorer med forskellige teknologier.
Bemærk: læg ikke mere end 5v til hindbær pi.
Dette kredsløb er lavet på Perf Board til dette projekt, så der er mindre vægt på bilen.
Fjernstyring af bil med Android App BlueTerm:
Efter at have konfigureret alle tingene og forsøgt at parre smarttelefonen via Bluetooth, skal vi installere en Android-app til kommunikation med Raspberry Pi ved hjælp af en Bluetooth-seriel adapter, så vi kan styre GPIO-benene på Raspberry Pi. Som tidligere fortalt emulerer RFCOMM / SPP-protokol seriel kommunikation via Bluetooth, så vi installerede her BlueTerm App, der understøtter denne protokol.
Du kan også bruge enhver anden Bluetooth Terminal App, der understøtter kommunikation via RFCOMM-stikket.
Efter download og installation af BlueTerm-appen skal du køre nedenstående givne Python-program fra terminalen og tilslutte den parrede raspberrypi- enhed fra BlueTerm-appen på samme tid.
Efter vellykket forbindelse ser du tilsluttet: raspberrypi øverst til højre i appen som vist nedenfor:
Nu kan du bare indtaste følgende kommandoer fra BlueTerm-appen for at få bilen til at bevæge sig i den ønskede retning. Tryk på 'q' for at afslutte programmet. Du kan bruge Google Voice Typing Keyboard til at kontrollere denne bil ved hjælp af din Voice. Tjek den komplette demo i videoen til sidst.
Kommandoer:
F - Fremadgående bevægelse
B - Bevægelse bagud
S - Stop
L - Fremad Venstre bevægelse
R - Fremad Højre bevægelse
A - Baglæns venstre bevægelse
P - Baglæns højre bevægelse
Q - Afslut
Python-programmering:
Python-programmet til styring af Raspberry Pi GPIO med Android App er meget simpelt og selvforklarende. Kun vi har brug for at lære lidt om koden relateret til Bluetooth RFCOMM-kommunikation. Ellers er det samme som at kontrollere enhver robot eller bil ved at gøre motorens pin høj eller lav. Det komplette program er angivet nedenfor i afsnittet Kode.
Først skal vi importere Bluetooth-stikkontaktbiblioteket, som gør det muligt for os at kontrollere Bluetooth med Python-sprog; vi har installeret biblioteket til det samme i det foregående afsnit.
importer Bluetooth
Derefter inkluderede vi nogle flere headerfiler og definerede stifter til motorer sætte dem som standard lave.
importere Bluetooth importtid import RPi.GPIO som 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) GPIO.output (m22, 0)
Nedenfor er koden, der er ansvarlig for Bluetooth-kommunikation:
server_socket = bluetooth.BluetoothSocket (bluetooth.RFCOMM) port = 1 server_socket.bind (("", port)) server_socket.listen (1) client_socket, adresse = server_socket.accept () print "Accepteret forbindelse fra", adresse
Her kan vi forstå dem linje for linje:
server_socket = bluetooth.BluetoothSocket (bluetooth.RFCOMM): Opretter stikkontakt til Bluetooth RFCOMM-kommunikation.
server_socket.bind (("", port): - Server binder scriptet på værten '' til porten.
server_socket.listen (1): Server lytter til at acceptere en forbindelse ad gangen.
client_socket, address = server_socket.accept (): Server accepterer klientens forbindelsesanmodning og tildeler mac-adressen til den variable adresse, client_socket er klientens socket
Herefter har vi oprettet nogle funktioner, der er ansvarlige for at køre bil i den ønskede retning: def venstre_side_forward (), def højre_side_forward (), def fremad (), def venstre_side_revers (), def højre_side_revers (), def baglæns () def stop (). Disse funktioner kaldes henholdsvis når vi trykker på L, R, F, A, P, B, S fra Mobile blueTerm-appen, og bilen bevæger sig i overensstemmelse hermed.
data = "" mens 1: data = client_socket.recv (1024) udskriver "Modtaget:% s"% data hvis (data == "F"): fremad () elif (data == "L"): venstre_side_forward () elif (data == "R"): højre_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 ("Quit") pause client_socket.close () server_socket.close ()
data = client_socket.recv (1024): Modtag data gennem client-socket client_socket og tildel dem til de variable data. Der kan maksimalt modtages 1024 tegn ad gangen.
Endelig luk klient- og serverforbindelsen efter al programmering ved hjælp af nedenstående kode:
client_socket.close () server_socket.close ()