- A2DP
- Priprava Raspberry Pi za brezglavo namestitev
- Predpogoji za namestitev v Raspberry Pi
- Seznanjanje Bluetooth naprave z Raspberry Pi
- Avtomatizirajte postopek ločevanja Bluetooth s skripti Python
- Sprožite skript za seznanjanje Bluetooth z gumbom
- Shema vezja
- Nastavite opravilo Cron za zagon programa Bluetooth Speaker Python ob zagonu
Raspberry Pi je računalnik velikosti dlani, ki ima vgrajen Bluetooth, Wi-Fi, Ethernet vrata, vrata kamere itd., Zaradi česar je najprimernejši mikrokrmilnik za vdelane aplikacije, ki temeljijo na IoT. Uporablja se tudi za izdelavo številnih strežnikov, kot so tiskalniški strežnik, medijski strežnik, spletni strežnik itd. Danes bomo izvedeli, kako lahko Raspberry Pi pretvori običajni zvočnik s 3,5-milimetrskim priključkom v brezžični zvočnik Bluetooth.
V tej objavi bomo zgradili zvočnik Bluetooth, ki temelji na Raspberry Pi, tako da združimo moč A2DP, Linuxa in zvočnega kodeka za brezžično pretakanje podatkovnih paketov iz zvočnega vira v zvočno korito. V ta namen bomo vdrli malo v sistem Linux in napisali del kode v bash in python, da bomo poslovali.
A2DP
A2DP je kratica Advanced Audio Distribution Profile. To je protokol, ki je prisoten v skoraj vseh napravah, ki podpirajo Bluetooth. Utre si pot za prenos podatkov zvoka iz ene naprave v drugo, če sta oba med seboj povezana prek Bluetootha. A2dp uporablja algoritem za stiskanje brez izgub za stiskanje zvočnih paketov pred prenosom, da zmanjša zakasnitev, vendar izgube zaradi tega stiskanja težko zaznajo človeška ušesa.
Priprava Raspberry Pi za brezglavo namestitev
Za pretvorbo Raspberry Pi v brezžični zvočnik najprej namestite OS (Raspbian Stretch) na kartico Raspberry PI SD, če ste novi v Raspberry Pi, potem sledite temu članku, če želite začeti z Raspberry Pi.
Večina nas ima Raspberry Pi in prenosnik, vendar nima monitorja. Toda za SSH v Raspberry Pi želimo, da je isti povezan v istem omrežju, v katerem je povezan naš računalnik. Potrebujemo monitor, povezan s Pi, prek katerega lahko izberemo Wi-Fi in se povežemo?
Pravzaprav ne. Raspberry Pi je mogoče povezati z Wi-Fi, tako da v datoteko z imenom wpa_supplicant.conf dodate vnos
Če želite to narediti, povežite kartico SD z računalnikom in odprite datoteko rootfs / etc / wpa_supplicant / wpa_supplicant.conf in ji dodajte naslednji vnos. Ne pozabite odpreti datoteke s skrbniškimi (korenskimi) pravicami.
network = {ssid = "wifi_ssid" psk = "wifi_passkey" key_mgmt = WPA-PSK}
Vstop bi moral biti podoben temu.
Zgornji vnos bi nas moral povezati z Wi-Fi, vendar to ni dovolj za ustvarjanje in vzdrževanje SSH povezave med Raspberry Pi in računalnikom. Privzeto je SSH v Raspberry Pi onemogočen, zato, da ga omogočite, v zagonskem imeniku ustvarite prazno datoteko z imenom ssh.
Zdaj je Raspberry Pi tehnično omogočen oddaljen dostop. Priključite malino pi na vir napajanja. Zdaj bi se pi samodejno povezal z omrežjem Wi-Fi, vendar je njegov IP naslov potreben za SSH. Obstaja več načinov, kako ugotoviti isto. Uporabljam ukaz nmap
nmap -sn / 24
Ta ukaz bi nam dal naslove IP vseh naprav, povezanih v našem omrežju. Na primer
Eden izmed njih je malinov pi. Zdaj vemo, da nas naslov IP pi povežemo z njim
ssh pi @ pi_ip_address
Obstajajo tudi drugi načini, kako začeti z Raspberry Pi brezglavo, preverite povezavo, če želite izvedeti enako.
Predpogoji za namestitev v Raspberry Pi
BlueZ
BlueZ je privzeta aplikacija, ki je priložena distribuciji Raspbian. Uporablja se za dostop do kontrolnikov sistema Bluetooth. Namestite ga lahko tudi, če ga nimate na voljo v pih iz razlogov, ki jih morda poznate.
Spodaj ukaz dobi aplikacijo vmesnika Bluetooth, nameščeno v našem pi.
apt-get namestite bluez
PulseAudio
Pulse Audio je aplikacija, ki pretvori bajte računalniških podatkov v človeško zaznavanje. Imenuje se tudi kot predvajalnik glasbe. Protokol A2DP je na voljo v vtičnikih aplikacije PulseAudio. Torej, z uporabo spodnjega ukaza namestimo vse aplikacije, povezane s pulznim zvokom:
apt-get namestite pulseaudio- *.
Seznanjanje Bluetooth naprave z Raspberry Pi
Z ukazom odprite aplikacijo BlueZ
bluetoothctl
Bluetooth sredstvo je posrednik, da pogovori med dvema napravami Bluetooth in inicializacijo povezave med njimi. Obstajajo različne vrste agentov Bluetooth. Tisti, ki ga bomo uporabili, je agent NoInputNoOutput , saj nam omogoča povezavo brez posredovanja uporabnika. Torej nam inicializacijo sredstvo, ki ga izvaja naslednje ukaze.
agent NoInputNoOutput
Kot odgovor bi morali dobiti sporočilo » Agent registriran «. Zdaj, ko imamo registriranega agenta, naj bo privzeti .
privzeti agent
Za katero bi moral biti odgovor »Privzeta zahteva posrednika uspešna«
Zdaj pa naj bo naša naprava odkrita
odkrito dne
Za katere bi moral biti odgovor "Spreminjanje odkrito na uspelo"
Zdaj poskusite povezati svoj mobilni telefon ali računalnik z Raspberry Pi
Vloga nas bo pozvala, da odobrimo storitve in jih ne potrebujemo. Namesto tega bomo samo zaupali napravi in jo povezali. Zaupanje v napravo je zelo pomembno, ker ko se zaupanja vredna naprava poskuša povezati s pi, omogoča isto brez kakršnega koli posredovanja uporabnika.
zaupanje povezati
Po vseh teh dejanjih bi moral biti vaš terminal podoben temu.
Juhu! Telefon je povezan z Raspberry Pi prek Bluetootha. Toda ali je to dovolj? Očitno je, da ne, želimo, da se naši zvočni podatkovni paketi prenesejo iz telefona v pi in nato iz pi v zvočnik, ki je povezan z zvočnimi vrati pi.
Prepričajmo se, da je naš telefon naveden v zvočnem viru aplikacije PulseAudio, tako da zaženemo spodnji ukaz:
seznam pactl kratek
Na njem bodo navedeni vsi naloženi zvočni moduli, zvočni pomivalniki in zvočni viri
Poglejte vrednosti v primerjavi s serijsko številko 30. Bluez_source pomeni vir zvoka prek aplikacije BlueZ, ki je bluetooth. Navzkrižno preverite naslov mac naprave, ki je med bluez_source in a2dp_source, in naslov, ki ga imate v aplikaciji BlueZ. V mojem primeru gre za bluez_source.3C_28_6D_FD_65_3D.a2dp_source, ki je enak tistemu iz aplikacije BlueZ. Zdaj, če predvajate pesem iz naprave, ki je priključena na pi, mora biti usmerjena v zvočnik, ki je povezan z avdio vrati maline pi.
Eureka! Uspešno smo zgradili zvočnik Bluetooth. Zvok smo usmerili, vendar to še ni vse. Vseh zgornjih korakov ne moremo narediti ročno, zato jih avtomatiziramo z uporabo scenarija pričakovanja in vmesnika pi s stikalom, ki ob pritisku seznani Pi z napravami.
Kul? Pojdimo zdaj k poslu.
Avtomatizirajte postopek ločevanja Bluetooth s skripti Python
Skripti Expect so kot bash skripti, vendar avtomatizirani. Poišče dano besedo v terminalu in ko ta prispe, pošlje ukaz po scenariju. Dovolite nam, da avtomatiziramo postopek seznanjanja. Ustvarite datoteko z imenom pair_bluetooth_device.expect
nastavi časovno omejitev 30 spawn bluetoothctl pričakujte "#" pošlji "agent izklopljen \ r" pričakujte "? registrirano" pošljite "\ r" pričakujte "#" pošljite "agent NoInputNoOutput \ r" pričakujte "Agent registriran" pošlji "\ r" pričakujte "# "pošlji" privzeti agent \ r "pričakuj" Privzeta zahteva posrednika je uspešna "pošlji" \ r "pričakuj" # "pošlji" odkrito \ r "pričakuj" Pooblasti "pošlji" da \ r "pošlji" izhod \ r "
Kopirajte kodo in jo prilepite v datoteko. Samo samodejno izvede dejanja, ki smo jih storili, ko smo mobilnik povezali z malino pi. Napravi omogoča samo povezavo, vendar ji ne zaupa. Za zaupanje v napravo potrebujemo njen Mac naslov. Izpis tega pričakovanega skripta bomo torej natisnili v dnevniško datoteko, iz katere je mogoče prijeti mac naslov.
grep -Pom 1 "(? <= Naprava). * (? = Povezano)"
Zgornji ukaz natisne vrednost med nizom »Naprava« in »Povezano«. V našem primeru (Device 3C: 28: 6D: FD: 65: 3D Connected: ne) je to mac naslov naprave.
Naj napišemo pričakovani skript, ki bo kot prvi argument vzel naslov mac, zaupal in se povezal s to napravo.
Ustvarite datoteko z imenom trust_and_connect.expect
nastavi časovno omejitev 30 spawn bluetoothctl pričakuj "#" pošlji "agent izklopljen \ r" pričakuj "? registriran" pošlji "\ r" pričakuj "#" pošlji "agent na \ r" pričakuj "Agent registriran" pošlji "\ r" pričakuj "# " pošlji" privzeti agent \ r " pričakuj" Privzeta zahteva posrednika je uspešna " pošlji" \ r " pričakuj" # " pošlji" zaupaj \ r " pričakuj" Spreminjanje " pošlji" poveži \ r " pričakuj" Povezava uspešna " pošlji" izhod \ r "
Kopirajte zgornjo kodo v to datoteko. Del za zaupanje in povezovanje izvede samodejno.
Zdaj vse to položimo v skriptno datoteko Python, da bomo lahko avtomatizirali celoten postopek seznanjanja.
Ustvarimo datoteko pair_and_trust_bluetooth_device.sh
cd $ (dirname $ 0) echo "Seznanjanje…" pričakujte pair_bluetooth_device.expect> await_script.log chmod 777 await_script.log sleep 2 echo "Zaupanje in povezovanje.." device_mac_address = $ (mačka expe_script.log - grep -Pom 1 " (? <= Device). * (? = Connected) ") echo mac naslov je $ device_mac_address if]; potem pričakujte trust_and_connect.expect $ device_mac_address else echo "No device connected" fi rm await_script.log
Torej bash skripta,
- Pokliče pričakovani skript (katerega izhodni podatki bodo natisnjeni v datoteko z imenom awa_script.log), ki,
- Zažene agent NoInputNoOutput
- Postane privzeti agent
- Vklopi odkritost pi
- Čaka, da se nekdo poveže in izstopi, ko se nekdo pove ali izteče
- Spite 2 sekundi
- Zgrabite datoteko awa_script.log za mac naslov naprave
- Zaupa in poveže napravo, če je mac_address ničen
- Odstrani datoteko ostankov awa_script.log
Sprožite skript za seznanjanje Bluetooth z gumbom
Zdaj imamo skript za avtomatizacijo postopka seznanjanja. Toda ta skript se mora zagnati prikladno, kadar koli uporabnik želi. Torej, omogočimo, da ta skript priklopite s fizičnim gumbom, tako da bo ta skript poklican vsakič, ko pritisnete gumb. Prekinitev je eden ključnih delov vdelanega programiranja. Za začetek prekinitve, ko jih zaznate, dajo običajno rutino programa in zaženejo vnaprej določen ISR, znan kot Interrupt Service Rutine
Torej, potisnite gumb na gpio pin 11 in mu dodelite ISR. Znotraj ISR bomo poklicali skript.
Ustvarimo datoteko python z imenom Bluetooth-speaker-main.py in ji dodamo spodnjo kodo. Komentarje sem dodal v program, tako da jih imate, če uporabljate to kodo, še vedno
#import zahtevani paketi import subprocess import RPi.GPIO as gpio import time import os import logging pair_pin = 11 #fetch the directory directory from which the python script is run fileDirectory = os.path.dirname (os.path.realpath (__ file__)) # Nastavite lokacijo datoteke dnevnika enako kot lokacija skripta python logFile = fileDirectory + "/ bluetoothSpeaker.log" logging.basicConfig (ime datoteke = logFile, filemode = 'w', format = '% (ime) s -% (ime_razine) s -% (message) s ', level = logging.INFO) def pairNewDevice (channel): #ISR for pin 11 print ("Waiting to pair") logging.info ("Waiting to pair") output = subprocess.call () gpio.setmode (gpio.ODBOR) gpio.setup (pair_pin, gpio.IN, pull_up_down = gpio.PUD_UP) try: # Nastavite par_pin kot prekinitveni zatič, ki zazna padajoči rob, in ko se to zgodi, pokličite funkcijo pairNewDevice gpio.add_event_detect (pair_pin, gpio.FALLING, callback = pairNewDevice, bouncetime = 1000) print ("Program Bluetooth se je začel") logging.info ("Program Bluetooth se je začel"), medtem ko je True: time.sleep (5), razen KeyboardInterrupt: gpio.cleanup ()
Shema vezja
Spodaj je diagram vezja za povezavo gumba z GPIO11 Raspberry Pi, da sproži postopek seznanjanja Bluetooth za prenos zvoka prek Bluetootha.
Nastavite opravilo Cron za zagon programa Bluetooth Speaker Python ob zagonu
Zdaj pa dokončno določimo opravilo cron, ki bo zagnalo ta program python vsakič, ko se pi zažene.
crontab -e
Izberite svoj najljubši urejevalnik in dodajte spodnjo vrstico na koncu datoteke
@reboot python3 /home/pi/blueooth-speaker/Bluetooth-speaker-main.py
To bo poklicalo naš program python vsakič, ko se pi zažene.
In to je to. Orel je pristal. Izdelali ste brezglavni zvočnik Raspberry Pi Bluetooth.
Znova zaženite Pi, seznanite telefon in predvajajte zvok.:)
Vse skripte za ta zvočnik Raspberry Pi Bluetooth lahko prenesete iz računa GitHub. Oglejte si tudi spodnji video.