- Vereiste pakketten voor Bluetooth-communicatie installeren:
- Apparaten koppelen met Raspberry Pi via Bluetooth:
- De speelgoedauto selecteren:
- Schakelschema en uitleg:
- Auto op afstand besturen met Android App BlueTerm:
- Python-programmering:
Raspberry Pi is erg populair voor IoT-projecten vanwege het naadloze vermogen van draadloze communicatie via internet. Raspberry Pi 3 heeft ingebouwde Wi-Fi en Bluetooth, en Bluetooth is een zeer populair protocol voor draadloze communicatie. Vandaag gaan we een op afstand bestuurbare auto bouwen met Raspberry Pi 3 en Bluetooth, hier zullen we Smart Phone gebruiken als afstandsbediening om de auto te besturen. We hebben deze RC-auto eerder gebouwd met Arduino.
Hier gebruiken we Raspberry Pi 3 met ingebouwde Bluetooth, dus we hoeven geen externe USB Bluetooth-dongle te gebruiken. Hier gebruiken we het RFCOMM Bluetooth-protocol voor draadloze communicatie.
Programmering voor Bluetooth in Python volgt het socket-programmeermodel en de communicatie tussen de Bluetooth-apparaten verloopt via de RFCOMM-aansluiting. RFCOMM (Radio Frequency Communication) is een Bluetooth-protocol dat voorziet in geëmuleerde RS-232 seriële poorten en wordt ook wel seriële poortemulatie genoemd. Het Bluetooth-seriële poortprofiel is gebaseerd op dit protocol. RFCOMM is erg populair in Bluetooth-toepassingen vanwege de brede ondersteuning en de openbaar beschikbare API. Het is gebonden aan het L2CAP-protocol.
Als je Raspberry Pi 2 hebt, moet je ofwel een externe Bluetooth-dongle of Bluetooth-module HC-06 gebruiken. Bekijk onze eerdere projecten voor het gebruik van deze externe Bluetooth-apparaten: Raspberry Pi GPIO bedienen met Android-app via Bluetooth en Raspberry Pi-gestuurde huishoudelijke apparaten.
Vereiste pakketten voor Bluetooth-communicatie installeren:
Voordat we beginnen, moeten we wat software installeren om Bluetooth-communicatie in Raspberry Pi in te stellen. Je zou een Raspbian Jessie-geheugenkaart moeten hebben die klaar is voor de Raspberry Pi. Bekijk dit artikel om het Raspbian-besturingssysteem te installeren en aan de slag te gaan met Raspberry Pi. Dus nu moeten we eerst de Raspbian bijwerken met behulp van onderstaande opdrachten:
sudo apt-get update sudo apt-get upgrade
Dan moeten we enkele Bluetooth-gerelateerde pakketten installeren:
sudo apt-get installeer bluetooth blueman bluez
Start vervolgens de Raspberry Pi opnieuw op:
sudo opnieuw opstarten
BlueZ is een open source-project en een officiële Linux Bluetooth-protocolstack. Het ondersteunt alle Bluetooth-kernprotocollen en wordt nu onderdeel van de officiële Linux Kernel.
Blueman biedt de desktopinterface om de Bluetooth-apparaten te beheren en te bedienen.
Ten slotte hebben we Python Library nodig voor Bluetooth-communicatie, zodat we gegevens kunnen verzenden en ontvangen via RFCOMM met behulp van Python-taal:
sudo apt-get install python-bluetooth
Installeer ook de GPIO-ondersteuningsbibliotheken voor Raspberry Pi:
sudo apt-get install python-rpi.gpio
Nu zijn we klaar met het installeren van de vereiste pakketten voor Bluetooth-communicatie in Raspberry Pi.
Apparaten koppelen met Raspberry Pi via Bluetooth:
Het koppelen van Bluetooth-apparaten, zoals een mobiele telefoon, met Raspberry Pi is heel eenvoudig. Hier hebben we onze Android-smartphone met Raspberry Pi gekoppeld. We hebben eerder BlueZ in Pi geïnstalleerd, dat een opdrachtregelhulpprogramma biedt genaamd "bluetoothctl" om onze Bluetooth-apparaten te beheren.
Open nu het bluetoothctl- hulpprogramma met de onderstaande opdracht:
sudo bluetoothctl
U kunt alle opdrachten van het hulpprogramma bluetoothctl controleren door 'help' te typen. Voorlopig moeten we onderstaande opdrachten in de opgegeven volgorde invoeren:
# stroom aan # agent aan # detecteerbaar aan # koppelbaar aan # scan aan
Na het laatste commando "scan on", ziet u uw Bluetooth-apparaat (mobiele telefoon) in de lijst. Zorg ervoor dat Bluetooth op uw mobiel is ingeschakeld en zichtbaar is voor apparaten in de buurt. Kopieer vervolgens het MAC-adres van uw apparaat en koppel het met de gegeven opdracht:
paar-
Vervolgens wordt u gevraagd om een toegangscode of pincode in uw Terminal-console, typ vervolgens de toegangscode daar en druk op enter. Typ vervolgens dezelfde toegangscode in uw mobiele telefoon wanneer daarom wordt gevraagd en u bent nu met succes gekoppeld aan de Raspberry Pi. We hebben dit hele proces ook uitgelegd in de video die in de vorige GPIO-besturingstutorial is gegeven. Hier is de directe YouTube-link.
Zoals eerder verteld, kunt u ook de desktopinterface gebruiken om de mobiele telefoon te koppelen. Na het installeren van Blueman, ziet u een Bluetooth-pictogram aan de rechterkant van uw Raspberry Pi-bureaublad, zoals hieronder weergegeven, waarmee u eenvoudig kunt koppelen.
De speelgoedauto selecteren:
In dit Raspberry Pi Controlled Car-project hebben we een speelgoedauto gebruikt voor demonstratie. Hier hebben we een RF- speelgoedauto geselecteerd met bewegende links-rechts stuurfunctie. Na aankoop van deze auto hebben we het RF-circuit vervangen door ons Raspberry-circuit. Deze auto heeft twee gelijkstroommotoren, een om twee voorwielen te laten draaien en een andere om twee achterwielen te laten draaien. Motor aan de voorkant wordt gebruikt om richting te geven aan de auto door naar links of rechts te draaien (zoals bij een echte auto-stuurfunctie). En de motor aan de achterkant wordt gebruikt om de auto vooruit en achteruit te rijden. Een Bluetooth van Raspberry wordt gebruikt om draadloos commando's te ontvangen van de Android-telefoon om de auto te besturen.
Je kunt elke speelgoedauto met twee DC-motoren gebruiken om de voor- en achterwielen te draaien.
Schakelschema en uitleg:
In deze op afstand bestuurbare auto hoeven we alleen de Raspberry Pi met twee motoren te verbinden met behulp van de L293D-module. Voor het voeden van de Raspberry Pi en auto hebben we een mobiele powerbank gebruikt. De mobiele powerbank is voldoende om de Raspberry Pi en de motoren van de auto van stroom te voorzien, maar als we de powerbank over de auto plaatsen, kan de auto vanwege het zware gewicht van de mobiele powerbank niet goed bewegen. Daarom raden we aan om de lichtgewicht stroomvoorziening of lithiumbatterijen te gebruiken om het systeem van stroom te voorzien. Alle aansluitingen zijn weergegeven in het onderstaande schakelschema. Bekijk ook onze sectie Robotica voor meer informatie over het besturen van motoren met verschillende technologieën.
Let op: zet niet meer dan 5v op de frambozen pi.
Dit circuit is voor dit project gemaakt op Perf Board, zodat er minder gewicht op de auto komt te staan.
Auto op afstand besturen met Android App BlueTerm:
Nadat we alle dingen hebben ingesteld en met succes hebben geprobeerd de Smart Phone via bluetooth te koppelen, moeten we een Android-app installeren om te communiceren met Raspberry Pi met behulp van een Bluetooth Serial Adapter, zodat we de GPIO-pinnen van Raspberry Pi kunnen besturen. Zoals eerder verteld, emuleert het RFCOMM / SPP-protocol seriële communicatie via Bluetooth, dus we hebben hier de BlueTerm-app geïnstalleerd die dit protocol ondersteunt.
U kunt ook elke andere Bluetooth Terminal-app gebruiken die communicatie via een RFCOMM-aansluiting ondersteunt.
Nu, na het downloaden en installeren van de BlueTerm-app, voert u het onderstaande Python-programma uit vanaf de terminal en verbindt u tegelijkertijd het gekoppelde Raspberrypi- apparaat vanuit de BlueTerm-app.
Na een succesvolle verbinding ziet u verbonden: raspberrypi in de rechterbovenhoek van de app, zoals hieronder weergegeven:
Nu kunt u gewoon de volgende commando's van de BlueTerm-app invoeren om de auto in de gewenste richting te laten rijden. Druk op 'q' om het programma te verlaten. U kunt het Google Voice Typing Keyboard gebruiken om deze auto met uw stem te besturen. Bekijk de volledige demo in de video aan het einde.
Opdrachten:
F - Vooruit verplaatsen
B - Achterwaarts verplaatsen
S - Stop
L - Vooruit links verplaatsen
R - Vooruit naar rechts bewegen
A - Achterwaarts verplaatsen naar links
P - Achterwaarts naar rechts verplaatsen
Q - Afsluiten
Python-programmering:
Python-programma voor het besturen van Raspberry Pi GPIO met Android-app is heel eenvoudig en spreekt voor zich. Alleen moeten we een klein beetje leren over de code met betrekking tot Bluetooth RFCOMM-communicatie. Anders is het hetzelfde als het besturen van een robot of auto door de pin van de motor hoog of laag te maken. Het volledige programma wordt hieronder gegeven in het gedeelte Code.
Ten eerste moeten we de Bluetooth-socketbibliotheek importeren waarmee we Bluetooth kunnen bedienen met Python-taal; we hebben de bibliotheek hiervoor in de vorige sectie geïnstalleerd.
Bluetooth importeren
Daarna hebben we wat meer header-bestanden toegevoegd en pinnen voor motoren gedefinieerd, waardoor ze standaard laag zijn.
importeer bluetooth importeer tijd importeer RPi.GPIO als 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.-uitgang (m22, 0)
Hieronder staat de code die verantwoordelijk is voor Bluetooth-communicatie:
server_socket = bluetooth.BluetoothSocket (bluetooth.RFCOMM) poort = 1 server_socket.bind (("", poort)) server_socket.listen (1) client_socket, adres = server_socket.accept () print "Geaccepteerde verbinding van", adres
Hier kunnen we ze regel voor regel begrijpen:
server_socket = bluetooth.BluetoothSocket (bluetooth.RFCOMM): Aansluiting creëren voor Bluetooth RFCOMM-communicatie.
server_socket.bind (("", port): - Server bindt het script op host '' aan poort.
server_socket.listen (1): Server luistert om één verbinding tegelijk te accepteren.
client_socket, address = server_socket.accept (): Server accepteert het verbindingsverzoek van de client en wijst het mac-adres toe aan het variabele adres, client_socket is de socket van de client
Hierna hebben we enkele functies gemaakt die verantwoordelijk zijn voor het verplaatsen van de auto in de gewenste richting: def left_side_forward (), def right_side_forward (), def forward (), def left_side_reverse (), def right_side_reverse (), def reverse () def stop (). Deze functies worden respectievelijk aangeroepen wanneer we op L, R, F, A, P, B, S drukken vanuit de Mobile blueTerm-app en de auto zal overeenkomstig bewegen.
data = "" while 1: data = client_socket.recv (1024) print "Ontvangen:% 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 ("Quit") break client_socket.close () server_socket.close ()
data = client_socket.recv (1024): ontvang data via de client socket client_socket en wijs deze toe aan de variabele data. Er kunnen maximaal 1024 tekens per keer worden ontvangen.
Eindelijk, na al het programmeren, sluit u de client- en serververbinding met behulp van onderstaande code:
client_socket.close () server_socket.close ()