- A2DP
- Προετοιμασία του Raspberry Pi για τη ρύθμιση Headless
- Προϋποθέσεις για εγκατάσταση στο Raspberry Pi
- Σύζευξη συσκευής Bluetooth με Raspberry Pi
- Αυτοματοποιήστε τη διαδικασία Bluetooth Paring με Python Scripts
- Ενεργοποιήστε το σενάριο σύζευξης Bluetooth με ένα κουμπί
- Διάγραμμα κυκλώματος
- Ρυθμίστε μια εργασία Cron για να ξεκινήσετε το πρόγραμμα Bluetooth Speaker Python στο Boot
Το Raspberry Pi είναι ένας υπολογιστής μεγέθους παλάμης που διαθέτει ενσωματωμένο Bluetooth, Wi-Fi, θύρα Ethernet, θύρα κάμερας κλπ. Που τον καθιστά τον πιο κατάλληλο μικροελεγκτή για ενσωματωμένες εφαρμογές που βασίζονται σε IoT. Χρησιμοποιείται επίσης για τη δημιουργία πολλών τύπων διακομιστών, όπως διακομιστής εκτύπωσης, διακομιστής πολυμέσων, διακομιστής Web κ.λπ. Σήμερα θα μάθουμε πώς ένα Raspberry Pi μπορεί να μετατρέψει ένα κανονικό ηχείο με υποδοχή 3,5 mm σε ασύρματο ηχείο bluetooth.
Σε αυτήν την ανάρτηση θα δημιουργήσουμε το ηχείο Bluetooth βασισμένο στο Raspberry Pi, συγχωνεύοντας τη δύναμη του A2DP, του Linux και του κωδικοποιητή ήχου για τη ροή των πακέτων δεδομένων από μια πηγή ήχου σε ένα νεροχύτη ήχου ασύρματα. Για να το κάνουμε αυτό, θα χαράξουμε λίγο το σύστημα Linux και θα γράψουμε ένα κομμάτι κώδικα στο bash και το python και θα είμαστε επιχειρηματικοί.
A2DP
Το A2DP είναι το αρκτικόλεξο του Προηγμένου προφίλ διανομής ήχου. Αυτό είναι ένα πρωτόκολλο που υπάρχει σε όλες σχεδόν τις συσκευές με δυνατότητα Bluetooth. Ανοίγει το δρόμο για τη μετάδοση δεδομένων ήχου από τη μία συσκευή στην άλλη, υπό την προϋπόθεση ότι και οι δύο συνδέονται μεταξύ τους μέσω Bluetooth. Το A2dp χρησιμοποιεί αλγόριθμο συμπίεσης χωρίς απώλειες για τη συμπίεση των πακέτων ήχου πριν από τη μετάδοση για τη μείωση του λανθάνοντος χρόνου, αλλά οι απώλειες λόγω αυτής της συμπίεσης είναι σχεδόν αντιληπτές από τα ανθρώπινα αυτιά.
Προετοιμασία του Raspberry Pi για τη ρύθμιση Headless
Για τη μετατροπή του Raspberry Pi σε ασύρματο ηχείο, πρώτα απ 'όλα εγκαταστήστε το λειτουργικό σύστημα (Raspbian Stretch) σε κάρτα SD Raspberry PI, εάν είστε νέοι στο Raspberry Pi, ακολουθήστε αυτό το άρθρο για να ξεκινήσετε με το Raspberry Pi.
Οι περισσότεροι από εμάς διαθέτουν Raspberry Pi και φορητό υπολογιστή, αλλά δεν διαθέτουν οθόνη. Αλλά για να SSH στο Raspberry Pi θέλουμε το ίδιο να είναι συνδεδεμένο στο ίδιο δίκτυο στο οποίο είναι συνδεδεμένος ο υπολογιστής μας. Χρειαζόμαστε οθόνη συνδεδεμένη στο Pi μέσω της οποίας μπορούμε να επιλέξουμε το Wi-Fi και να συνδεθούμε;
Στην πραγματικότητα δεν το κάνουμε. Το Raspberry Pi μπορεί να συνδεθεί σε Wi-Fi προσθέτοντας μια καταχώριση σε ένα αρχείο με το όνομα wpa_supplicant.conf
Για να το κάνετε αυτό, συνδέστε την κάρτα SD στον υπολογιστή και ανοίξτε το αρχείο rootfs / etc / wpa_supplicant / wpa_supplicant.conf και προσθέστε την ακόλουθη καταχώριση στο ίδιο. Μην ξεχάσετε να ανοίξετε το αρχείο με δικαιώματα διαχειριστή (root).
δίκτυο = {ssid = "wifi_ssid" psk = "wifi_passkey" key_mgmt = WPA-PSK}
Η είσοδος πρέπει να μοιάζει με αυτήν.
Η παραπάνω καταχώρηση θα πρέπει να μας συνδέσει με το Wi-Fi, αλλά αυτό δεν αρκεί για να δημιουργήσουμε και να διατηρήσουμε μια σύνδεση SSH μεταξύ του Raspberry Pi και του υπολογιστή. Από προεπιλογή, το SSH είναι απενεργοποιημένο στο Raspberry Pi, οπότε για να το ενεργοποιήσετε, δημιουργήστε ένα κενό αρχείο με το όνομα ssh στον κατάλογο εκκίνησης.
Τώρα το Raspberry Pi είναι τεχνικά ενεργοποιημένο για πρόσβαση από απόσταση. Συνδέστε το βατόμουρο pi στην πηγή τροφοδοσίας. Τώρα το pi θα συνδεόταν αυτόματα με το Wi-Fi, αλλά απαιτείται η διεύθυνση IP του για να το SSH σε αυτό. Υπάρχουν πολλοί τρόποι για να μάθετε το ίδιο. Χρησιμοποιώ την εντολή nmap
nmap -sn / 24
Αυτή η εντολή θα μας έδινε τις διευθύνσεις IP όλων των συσκευών που είναι συνδεδεμένες στο δίκτυό μας. Για παράδειγμα,
Ένα από αυτά είναι από βατόμουρο pi's. Τώρα γνωρίζουμε τη διεύθυνση IP του pi ας συνδεθούμε μαζί του
ssh pi @ pi_ip_address
Υπάρχουν επίσης άλλοι τρόποι για να ξεκινήσετε με το Raspberry Pi χωρίς ακρόαση, ελέγξτε τον σύνδεσμο για να μάθετε το ίδιο.
Προϋποθέσεις για εγκατάσταση στο Raspberry Pi
ΜπλεΖ
Το BlueZ είναι η προεπιλεγμένη εφαρμογή που συνοδεύει το Raspbian distro. Χρησιμοποιείται για πρόσβαση στα στοιχεία ελέγχου Bluetooth του συστήματος. Μπορεί επίσης να εγκατασταθεί σε περίπτωση που δεν το έχετε στη διάθεσή σας για λόγους μόνο που ίσως γνωρίζετε.
Στην παρακάτω εντολή εγκαθίσταται η εφαρμογή διεπαφής Bluetooth στο pi μας.
apt-get εγκατάσταση bluez
PulseAudio
Το Pulse Audio είναι μια εφαρμογή που μετατρέπει byte δεδομένων υπολογιστή σε ανθρώπινη αντίληψη. Ονομάζεται επίσης ως πρόγραμμα αναπαραγωγής μουσικής. Το πρωτόκολλο A2DP είναι διαθέσιμο στα πρόσθετα εφαρμογών PulseAudio. Ας εγκαταστήσουμε λοιπόν όλες τις εφαρμογές που σχετίζονται με τον παλμό ήχου χρησιμοποιώντας την παρακάτω εντολή:
apt-get install pulseaudio- *.
Σύζευξη συσκευής Bluetooth με Raspberry Pi
Ανοίξτε την εφαρμογή BlueZ χρησιμοποιώντας την εντολή
bluetoothctl
Ένας πράκτορας Bluetooth είναι ένας μεσίτης που μιλά μεταξύ δύο συσκευών με δυνατότητα Bluetooth και προετοιμάζει μια σύνδεση μεταξύ τους. Υπάρχουν διαφορετικοί τύποι πρακτόρων bluetooth. Αυτό που θα χρησιμοποιήσουμε είναι ο πράκτορας NoInputNoOutput επειδή μας επιτρέπει να συνδεθούμε χωρίς παρέμβαση του χρήστη. Ας αρχίσουμε λοιπόν τον πράκτορα εκτελώντας τις ακόλουθες εντολές.
πράκτορας NoInputNoOutput
Θα πρέπει να λάβετε το μήνυμα " Agent register " ως απάντηση. Τώρα που έχουμε εγγράψει τον πράκτορά μας, ας το κάνουμε το προεπιλεγμένο .
προεπιλεγμένος πράκτορας
Για την οποία η απάντηση πρέπει να είναι "Η προεπιλεγμένη αίτηση αντιπροσώπου ήταν επιτυχής"
Τώρα ας κάνουμε τη συσκευή μας ανιχνεύσιμη
ανακαλύψιμο στις
Για την οποία η απάντηση θα πρέπει να είναι "Αλλαγή που μπορεί να εντοπιστεί με επιτυχία"
Τώρα δοκιμάστε να συνδέσετε το κινητό σας τηλέφωνο ή τον υπολογιστή στο Raspberry Pi
Η εφαρμογή θα μας ζητήσει να εγκρίνουμε τις υπηρεσίες και δεν χρειάζεται να τις κάνουμε. Αντ 'αυτού, θα εμπιστευτούμε απλώς τη συσκευή και θα τη συνδέσουμε. Η εμπιστοσύνη της συσκευής είναι πολύ σημαντική γιατί όταν η αξιόπιστη συσκευή προσπαθεί να συνδεθεί με το pi, επιτρέπει το ίδιο χωρίς καμία παρέμβαση του χρήστη.
εμπιστοσύνη συνδεθείτε
Μετά από όλες αυτές τις ενέργειες, το τερματικό σας θα πρέπει να μοιάζει με αυτό.
Ναι! Έχουμε συνδέσει το τηλέφωνό μας με το Raspberry Pi μέσω Bluetooth. Είναι όμως αρκετό; Προφανώς όχι, θέλουμε τα πακέτα δεδομένων ήχου να μεταφέρονται από το τηλέφωνο στο pi και μετά από το pi στο ηχείο που είναι συνδεδεμένο στη θύρα ήχου του pi.
Ας βεβαιωθούμε ότι το τηλέφωνό μας παρατίθεται στην πηγή ήχου της εφαρμογής PulseAudio εκτελώντας την παρακάτω εντολή:
σύντομη λίστα pactl
Θα εμφανίσει όλες τις φορτωμένες λειτουργικές μονάδες ήχου, νεροχύτες ήχου και πηγές ήχου
Κοιτάξτε τις τιμές έναντι του σειριακού αριθμού 30. Το Bluez_source σημαίνει την πηγή ήχου μέσω της εφαρμογής BlueZ που είναι bluetooth. Ελέγξτε προσεκτικά τη διεύθυνση mac της συσκευής που βρίσκεται ανάμεσα στο bluez_source και a2dp_source και τη διεύθυνση που έχετε στην εφαρμογή BlueZ. Στην περίπτωσή μου είναι bluez_source.3C_28_6D_FD_65_3D.a2dp_source που είναι το ίδιο με αυτό της εφαρμογής BlueZ. Τώρα, εάν αναπαράγετε ένα τραγούδι από τη συσκευή που είναι συνδεδεμένη στο pi Πρέπει να δρομολογηθεί στο ηχείο που είναι συνδεδεμένο στη θύρα ήχου του Raspberry pi
Εύρηκα! Έχουμε δημιουργήσει με επιτυχία ένα ηχείο Bluetooth. Έχουμε δρομολογήσει τον ήχο, αλλά δεν είναι μόνο αυτό. Δεν μπορούμε να κάνουμε όλα τα παραπάνω βήματα με μη αυτόματο τρόπο, ας τα αυτοματοποιήσουμε χρησιμοποιώντας το σενάριο και το interface interface με έναν διακόπτη ο οποίος όταν πατηθεί, συνδυάζει το Pi με συσκευές.
Δροσερός? Ας ξεκινήσουμε τώρα τις επιχειρήσεις.
Αυτοματοποιήστε τη διαδικασία Bluetooth Paring με Python Scripts
Το Expect Scripts είναι σαν σενάρια bash αλλά αυτοματοποιημένο. Ψάχνει για τη δεδομένη λέξη στο τερματικό και όταν φτάσει η ίδια, στέλνει την εντολή σύμφωνα με το σενάριο. Ας αυτοματοποιήσουμε τη διαδικασία σύζευξης. Δημιουργήστε ένα αρχείο με το όνομα pair_bluetooth_device.expect
ορίστε χρονικό όριο 30 spawn bluetoothctl توقع "#" send "πράκτορας απενεργοποιημένο \ r" expect "? gistered" send "\ r" expect "#" send "πράκτορας NoInputNoOutput \ r" expect "Ο πράκτορας εγγράφηκε" send "\ r" expect "# "send" default-agent \ r "expect" Το προεπιλεγμένο αίτημα πράκτορα ήταν επιτυχές "send" \ r "expect" # "send" Discoverable on \ r "expect" Authorize "send" yes \ r "send" exit \ r "
Αντιγράψτε τον κώδικα και επικολλήστε τον ίδιο στο αρχείο. Κάνει αυτόματα, τις ενέργειες που κάναμε ενώ ζευγαρώσαμε το κινητό με το βατόμουρο pi. Απλώς επιτρέπει τη σύνδεση της συσκευής αλλά δεν την εμπιστεύεται. Για να εμπιστευτούμε μια συσκευή χρειαζόμαστε τη διεύθυνση mac της. Έτσι θα εκτυπώσουμε την έξοδο αυτού του σεναρίου αναμενόμενου σε ένα αρχείο καταγραφής από το οποίο μπορεί να πιάσει τη διεύθυνση mac
grep -Pom 1 "(? <= Συσκευή). * (? = Συνδεδεμένο)"
Η παραπάνω εντολή εκτυπώνει την τιμή μεταξύ της συμβολοσειράς "Device" και "Connected". Στην περίπτωσή μας (Συσκευή 3C: 28: 6D: FD: 65: 3D Connected: όχι) είναι η διεύθυνση mac της συσκευής.
Ας γράψουμε ένα σενάριο προσδοκίας που θα λάβει τη διεύθυνση mac ως το πρώτο επιχείρημα και εμπιστοσύνη και θα συνδεθεί με αυτήν τη συσκευή.
Δημιουργήστε ένα αρχείο με το όνομα trust_and_connect.expect
ορίστε χρονικό όριο 30 spawn bluetoothctl توقع "#" send "πράκτορας απενεργοποιημένο \ r" expect "; egistered" send "\ r" expect "#" send "πράκτορας \ r" περιμένετε "Ο εγγεγραμμένος αντιπρόσωπος" στείλτε "\ r" توقع "# " send" default-agent \ r " expect" Default agent request επιτυχής " send" \ r " expect" # " send" trust \ r " expect" Change " send" connect \ r " expect" Connection επιτυχής " send" exit \ ρ "
Αντιγράψτε τον παραπάνω κώδικα σε αυτό το αρχείο. Κάνει το τμήμα εμπιστοσύνης και σύνδεσης αυτόματα.
Ας τα βάλουμε όλα αυτά σε ένα αρχείο δέσμης ενεργειών Python έτσι ώστε ολόκληρη η διαδικασία σύζευξης να μπορεί να αυτοματοποιηθεί.
Ας δημιουργήσουμε ένα αρχείο pair_and_trust_bluetooth_device.sh
cd $ (dirname $ 0) echo "Pairing…" expect pair_bluetooth_device.expect> expect_script.log chmod 777 expect_script.log sleep 2 echo "Εμπιστοσύνη και σύνδεση.." device_mac_address = $ (cat expect_script.log - grep -Pom 1 " (? <= Device). * (? = Connected) ") Η διεύθυνση echo mac είναι $ device_mac_address if]; Στη συνέχεια περιμένετε trust_and_connect.expect $ device_mac_address άλλο echo "Δεν συνδεδεμένη συσκευή" fi rm expect_script.log
Έτσι το σενάριο bash,
- Καλεί ένα σενάριο προσδοκίας (του οποίου η έξοδος θα εκτυπωθεί σε ένα αρχείο με το όνομα expect_script.log) το οποίο,
- Ξεκινά την NoInputNoOutput παράγοντα
- Καθιστά τον προεπιλεγμένο παράγοντα
- Ενεργοποιεί την ανιχνευσιμότητα του pi
- Περιμένει κάποιον να συνδεθεί και να βγει όταν κάποιος κάνει ή να λήξει
- Κοιμηθείτε για 2 δευτερόλεπτα
- Πιάστε το αρχείο expect_script.log για τη διεύθυνση mac της συσκευής
- Εμπιστεύεται και συνδέει τη συσκευή εάν το mac_address είναι μηδενικό
- Καταργεί το αρχείο υπολειμμάτων expect_script.log
Ενεργοποιήστε το σενάριο σύζευξης Bluetooth με ένα κουμπί
Τώρα έχουμε το σενάριο να αυτοματοποιήσουμε τη διαδικασία σύζευξης. Αλλά αυτό το σενάριο πρέπει να λειτουργεί με άνεση, όποτε το επιθυμεί ο χρήστης. Ας συνδέσουμε λοιπόν αυτό το σενάριο με ένα φυσικό κουμπί έτσι ώστε αυτό το σενάριο να καλείται κάθε φορά που πατάτε το κουμπί. Το Interrupt είναι ένα από τα ζωτικά μέρη του ενσωματωμένου προγραμματισμού. Για αρχάριους, διακόπτει όταν αισθανθεί θέσει την κανονική ρουτίνα του προγράμματος και εκτελεί ένα προκαθορισμένο ISR γνωστό ως Interrupt Service Routine
Ας συνδέσουμε λοιπόν το κουμπί με το pin 11 του gpio και να αντιστοιχίσουμε ένα ISR στο ίδιο. Μέσα στο ISR, θα ονομάσουμε το σενάριο.
Ας δημιουργήσουμε ένα αρχείο python με το όνομα Bluetooth-speaker-main.py και προσθέστε τον παρακάτω κώδικα σε αυτό. Έχω προσθέσει τα σχόλια στο πρόγραμμα, οπότε σε περίπτωση που χρησιμοποιείτε αυτόν τον κωδικό, εξακολουθείτε να τα έχετε
#import απαιτούμενα πακέτα εισαγάγετε εισαγωγή δευτερεύουσας διαδικασίας RPi.GPIO ως gpio import time import os import logging pair_pin = 11 # λήψη του καταλόγου αρχείων από τον οποίο εκτελείται το σενάριο python fileDirectory = os.path.dirname (os.path.realpath (__ file__)) # Ρυθμίστε την τοποθεσία του αρχείου καταγραφής όπως η θέση του σεναρίου python logFile = fileDirectory + "/ bluetoothSpeaker.log" logging.basicConfig (filename = logFile, filemode = 'w', format = '% (name) s -% (levelname) s -% (message) s ', level = logging.INFO) def pairNewDevice (κανάλι): #ISR για pin 11 print ("Waiting to pair") logging.info ("Waiting to pair") output = subprocess.call () gpio.setmode (gpio.ΣΑΝΙΔΑ) gpio.setup (pair_pin, gpio.IN, pull_up_down = gpio.PUD_UP) δοκιμάστε: # Ορίστε το pair_pin ως pin διακοπής που ανιχνεύει την άκρη πτώσης και όταν το κάνει, καλέστε τη λειτουργία pairNewDevice gpio.add_event_detect (pair_pin, gpio.FALLING, callback = pairNewDevice, bouncetime = 1000) print ("Το πρόγραμμα Bluetooth έχει ξεκινήσει") logging.info ("Το πρόγραμμα Bluetooth έχει ξεκινήσει") ενώ True: time.sleep (5) εκτός KeyboardInterrupt: gpio.cleanup ()
Διάγραμμα κυκλώματος
Παρακάτω είναι το διάγραμμα του κυκλώματος για να συνδέσετε ένα κουμπί με GPIO11 του Raspberry Pi για την ενεργοποίηση της διαδικασίας αντιστοίχισης Bluetooth για μεταφορά ήχου μέσω Bluetooth.
Ρυθμίστε μια εργασία Cron για να ξεκινήσετε το πρόγραμμα Bluetooth Speaker Python στο Boot
Τώρα επιτέλους ας δημιουργήσουμε μια δουλειά cron που θα ξεκινά αυτό το πρόγραμμα python κάθε φορά που ξεκινάει το pi.
crontab -e
Επιλέξτε τον αγαπημένο σας επεξεργαστή και προσθέστε την παρακάτω γραμμή στο τέλος του αρχείου
@reboot python3 /home/pi/blueooth-speaker/Bluetooth-speaker-main.py
Αυτό θα καλεί το πρόγραμμα python μας κάθε φορά που το pi ξεκινά.
Και αυτό είναι. Ο αετός προσγειώθηκε. Έχετε δημιουργήσει ένα ηχείο Bluetooth χωρίς ακουστικό Raspberry Pi.
Επανεκκινήστε το Pi, αντιστοιχίστε το τηλέφωνό σας και μεταδώστε ροή ήχου.:)
Μπορείτε να κατεβάσετε όλα τα σενάρια για αυτό το Raspberry Pi Bluetooth Speaker από τον λογαριασμό GitHub. Ελέγξτε επίσης το βίντεο που δίνεται παρακάτω.