- Vereiste pakketten voor Bluetooth-communicatie installeren:
- Apparaten koppelen met Raspberry Pi via Bluetooth:
- Schakelschema:
- LED aansturen met Android App BlueTerm:
- Programmering Toelichting:
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. Dus vandaag gaan we Raspberry Pi GPIO Pin bedienen via een Android-app met behulp van Bluetooth.
Hier gebruiken we Raspberry 2 Pi Model B die geen ingebouwde Bluetooth heeft, dus we gebruiken een eenvoudige USB Bluetooth-dongle. Daarnaast hebben we alleen een weerstand (220R) en een LED nodig om de GPIO-besturing te demonstreren. 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.
We hebben ook Bluetooth-module HC-06 gebruikt in ons vorige project: spraakgestuurde LED's met Raspberry Pi. Bekijk ook onze eerdere Raspberry Pi-projecten samen met enkele goede IoT-projecten.
Vereiste pakketten voor Bluetooth-communicatie installeren:
Voordat we beginnen, moeten we wat software installeren voor het instellen van Bluetooth-communicatie in Raspberry Pi. 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. Maar voordat u dat doet, verbindt u uw USB Bluetooth-dongle met Raspberry Pi en controleert u of deze wordt gedetecteerd of niet door de onderstaande opdracht te gebruiken:
lsusb
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 onze video aan het einde.
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.
Schakelschema:
Het schakelschema is heel eenvoudig, we hebben zojuist een LED aangesloten op PIN 40 (GPIO 21) van Raspberry Pi met een weerstand van 220 Ohm:
LED aansturen met Android App BlueTerm:
Nu, na het koppelen van de mobiele telefoon, moeten we een Android-app installeren om te communiceren met Raspberry Pi met behulp van een Bluetooth seriële adapter. 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 kun je gewoon '1' of '0' invoeren vanuit de BlueTerm-app om de GPIO-pin respectievelijk HOOG en LAAG te maken, die op hun beurt de LED die op deze pin is aangesloten AAN en UIT schakelen. Druk op 'q' om het programma te verlaten. U kunt Google Voice Typing Keyboard gebruiken om de GPIO met uw stem te bedienen. Bekijk de volledige demo in de video aan het einde.
Dit is dus hoe u de GPIO-pin draadloos kunt bedienen met een Android-app via Bluetooth. Bekijk ook Hoe Bluetooth te gebruiken met Arduino.
Programmering Toelichting:
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. Eerst moeten we de Bluetooth-socketbibliotheek importeren waarmee we Bluetooth kunnen besturen met Python-taal; we hebben de bibliotheek hiervoor in de vorige sectie geïnstalleerd.
Bluetooth importeren
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 terwijl 1: data = client_socket.recv (1024)
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 klant en wijst het mac-adres toe aan het variabele adres, client_socket is de socket van de klant
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.
Sluit tenslotte na al het programmeren de client- en serververbinding met onderstaande code:
client_socket.close () server_socket.close ()
Alle andere code is eenvoudig en spreekt voor zich. Controleer de volledige code hieronder. Probeer dit project aan te passen en je kunt het gebruiken om vele andere dingen draadloos te besturen, zoals het gebruik van relais, je kunt de huishoudelijke apparaten bedienen of je kunt ook een robotauto besturen via een Android-telefoon.