- A2DP
- Raspberry Pi: n valmistelu päätöntä asennusta varten
- Edellytykset asennettavaksi Raspberry Piin
- Bluetooth-laitteen ja Raspberry Pi -laitteen pariliitos
- Automatisoi Bluetooth-paritusprosessi Python-skripteillä
- Käynnistä Bluetooth-pariliitoksen komentosarja painikkeella
- Piirikaavio
- Määritä Cron-työ käynnistääksesi Bluetooth Speaker Python -ohjelman käynnistettäessä
Raspberry Pi on kämmenen kokoinen tietokone, jossa on sisäänrakennettu Bluetooth, Wi-Fi, Ethernet-portti, kameraportti jne., Mikä tekee siitä sopivimman mikro-ohjaimen IoT-pohjaisiin sulautettuihin sovelluksiin. Sitä käytetään myös monenlaisten palvelimien, kuten tulostuspalvelimen, mediapalvelimen, verkkopalvelimen jne., Tekemiseen. Tänään opimme, miten Raspberry Pi voi muuntaa normaalin kaiuttimen, jolla on 3,5 mm: n liitäntä, langattomaksi bluetooth-kaiuttimeksi.
Tässä viestissä rakennamme Raspberry Pi -pohjaisen Bluetooth-kaiuttimen yhdistämällä A2DP: n, Linuxin ja äänikoodekkien voiman datapakettien suoratoistamiseksi äänilähteestä äänialtaaseen langattomasti. Tehdäkseen niin aiomme hakata vähän Linux-järjestelmää ja kirjoittaa koodinpätkän bashiin ja pythoniin ja tulemme olemaan liiketoimintaa.
A2DP
A2DP on Advanced Audio Distribution Profilen lyhenne. Tämä on protokolla, jota on lähes kaikissa Bluetooth-laitteissa. Se tasoittaa tietä äänen siirtämiselle laitteesta toiseen edellyttäen, että ne molemmat ovat yhteydessä toisiinsa Bluetoothin kautta. A2dp käyttää häviöttömää pakkausalgoritmia pakkaamaan audiopaketit ennen lähetystä latenssin vähentämiseksi, mutta tämän pakkauksen aiheuttamat häviöt ovat tuskin havaittavissa ihmisen korvissa.
Raspberry Pi: n valmistelu päätöntä asennusta varten
Jos haluat muuntaa Raspberry Pi: n langattomaksi kaiuttimeksi, asenna ensin käyttöjärjestelmä (Raspbian Stretch) Raspberry PI SD -kortille, jos olet uusi Raspberry Pi: n käyttäjä, seuraa tätä artikkelia aloittaaksesi Raspberry Pi: n käytön.
Suurin osa meistä omistaa Raspberry Pi: n ja kannettavan, mutta puuttuu näyttö. Mutta SSH: n siirtämiseksi Vadelma Piin haluamme, että sama liitetään samaan verkkoon, johon tietokoneemme on kytketty. Tarvitsemmeko Pi: ään liitetyn näytön, jonka kautta voimme valita Wi-Fi-yhteyden ja saada yhteyden?
Itse asiassa emme. Vadelma Pi voidaan yhdistää Wi-Fi-verkkoon lisäämällä merkintä tiedostoon nimeltä wpa_supplicant.conf
Liitä SD-kortti tietokoneeseen ja avaa tiedosto rootfs / etc / wpa_supplicant / wpa_supplicant.conf ja lisää seuraava merkintä samaan. Älä unohda avata tiedostoa järjestelmänvalvojan (root) oikeuksilla.
verkko = {ssid = "wifi_ssid" psk = "wifi_passkey" avain_mgmt = WPA-PSK}
Kilpailun tulee näyttää samanlaiselta kuin tämä.
Yllä olevan merkinnän pitäisi saada meidät muodostamaan yhteys Wi-Fi-verkkoon, mutta se ei riitä luomaan ja ylläpitämään SSH-yhteyttä Raspberry Pi: n ja tietokoneen välille. SSH on oletusarvoisesti pois käytöstä Raspberry Pi: ssä, joten ota se käyttöön luomalla tyhjä tiedosto nimeltä ssh käynnistyshakemistoon.
Nyt Raspberry Pi on teknisesti mahdollista käyttää etänä. Liitä vadelma pi virtalähteeseen. Nyt pi saisi yhteyden Wi-Fi-verkkoon automaattisesti, mutta sen IP-osoite vaaditaan SSH: n siirtämiseksi siihen. On olemassa useita tapoja selvittää sama. Käytän nmap- komentoa
nmap -sn / 24
Tämä komento antaisi meille kaikkien verkkoon kytkettyjen laitteiden IP-osoitteet. Esimerkiksi,
Yksi niistä on vadelma-pi. Nyt tiedämme pi: n IP-osoitteen, muodostakaamme yhteys siihen
ssh pi @ pi_ip_address
Raspberry Pi: llä on myös muita tapoja aloittaa päätä, tarkista linkki oppiaksesi saman.
Edellytykset asennettavaksi Raspberry Piin
BlueZ
BlueZ on Raspbian-distron mukana toimitettu oletussovellus. Sitä käytetään järjestelmän Bluetooth-ohjaimiin. Se voidaan myös asentaa, jos sinulla ei ole sitä saatavana pi: ssä vain tiedät syistä.
Alla oleva komento saa Bluetooth-käyttöliittymäsovelluksen asennettuna piiimme.
apt-get install bluez
PulseAudio
Pulse Audio on sovellus, joka muuntaa tietotietojen tavut ihmisen havaitsemiseksi. Sitä kutsutaan myös musiikkisoittimeksi. A2DP-protokolla on saatavana PulseAudio-sovelluksen laajennuksista. Asennetaan siis kaikki pulssi-audiosovellukset alla olevan komennon avulla:
apt-get install pulseaudio- *.
Bluetooth-laitteen ja Raspberry Pi -laitteen pariliitos
Avaa BlueZ-sovellus komennolla
bluetoothctl
Bluetooth aine on välittäjä, joka puhuu kahden Bluetooth-laitteen ja alustaa yhteyttä keskenään. Bluetooth-agentteja on erityyppisiä. Käytämme NoInputNoOutput- agenttia, koska sen avulla voimme muodostaa yhteyden ilman käyttäjän toimia. Olkaamme siis alustaa agentti suorittamalla seuraavat komennot.
agentti NoInputNoOutput
Sinun tulisi saada vastausviesti " Agent rekisteröity ". Nyt kun edustajamme on rekisteröity, tehkäämme siitä oletusarvo .
default-agent
Joille vastauksen pitäisi olla "Oletusagenttipyyntö onnistunut"
Tehkäämme nyt laitteemme löydettävissä
löydettävissä
Jossa vastauksen tulisi olla "Muutos löydettävissä onnistuneessa"
Yritä nyt liittää matkapuhelimesi tai tietokone Raspberry Pi -laitteeseen
Sovellus kehottaa meitä valtuuttamaan palvelut, eikä meidän tarvitse tehdä niitä. Sen sijaan luotamme vain laitteeseen ja yhdistämme sen. Laitteen luottaminen on erittäin tärkeää, koska kun luotettu laite yrittää muodostaa yhteyden pi-laitteeseen, se sallii saman ilman käyttäjän toimia.
luottamus yhteyden muodostamiseen
Kaikkien näiden toimenpiteiden jälkeen päätelaitteen tulisi näyttää samanlaiselta kuin tämä.
Jee! Puhelimemme on yhdistetty Vadelma Pi: hen Bluetoothin kautta. Mutta riittääkö? Ilmeisesti ei, haluamme, että äänidatapakettimme siirretään puhelimesta pi: hen ja sitten pi: stä kaiuttimeen, joka on kytketty pi: n audioporttiin.
Varmista, että puhelimemme on lueteltu PulseAudio- sovelluksen äänilähteessä suorittamalla seuraava komento:
pactl-luettelo lyhyt
Siinä luetellaan kaikki ladatut äänimoduulit, äänenielut ja äänilähteet
Katsokaa arvoja sarjanumeroon 30. Bluez_source tarkoittaa äänilähdettä BlueZ-sovelluksen kautta, joka on bluetooth. Tarkista ruudulla laitteen mac-osoite, joka on bluez_source ja a2dp_source, ja osoite, joka sinulla on BlueZ-sovelluksessa. Minun tapauksessani se on bluez_source.3C_28_6D_FD_65_3D.a2dp_source, joka on sama kuin BlueZ-sovelluksen. Jos soitat kappaleen laitteesta, joka on kytketty pi-laitteeseen, se on ohjattava kaiuttimeen, joka on liitetty vadelma pi -porttiin.
Eureka! Olemme rakentaneet onnistuneesti Bluetooth-kaiuttimen. Olemme reitittäneet äänen, mutta se ei ole kaikki. Emme voi tehdä kaikkia edellä mainittuja vaiheita manuaalisesti, joten anna meidän automatisoida ne käyttämällä odotuskoodia ja käyttöliittymää pi kytkimellä, joka painettaessa yhdistää Pi: n laitteisiin.
Viileä? Aloitetaan nyt asia.
Automatisoi Bluetooth-paritusprosessi Python-skripteillä
Expect Scripts ovat kuin bash-komentosarjoja, mutta automatisoituja. Se etsii annettua sanaa terminaalista ja kun sama saapuu, se lähettää komennon komentosarjan mukaisesti. Automatisoimme pariliitosprosessi. Luo tiedosto nimeltä pair_bluetooth_device.expect
aseta aikakatkaisu 30 kutee bluetoothctl odottaa "#" lähetä "agentti pois \ r" odottaa "? gistered" lähetä "\ r" odottaa "#" lähetä "agentti NoInputNoOutput \ r" odottaa "agentti rekisteröity" lähetä "\ r" odottaa "# "lähetä" oletusagentti \ r "odottaa" oletusagenttipyyntö onnistunut "lähetä" \ r "odottaa" # "lähetä" löydettävissä \ r "odota" valtuuta "lähetä" kyllä "r" lähetä "poistu \ r"
Kopioi koodi ja liitä sama tiedostoon. Se vain tekee automaattisesti toiminnot, jotka teimme pariliitettäessä matkapuhelimen vadelma pi: n kanssa. Se vain antaa laitteen muodostaa yhteyden, mutta ei luota siihen. Luotettavaksi laitteeseen tarvitsemme sen mac-osoitteen. Joten tulostamme tämän odotetun komentosarjan lähdön lokitiedostoon, josta mac-osoite voidaan tarttua.
grep -Pom 1 "(? <= Laite). * (? = Yhdistetty)"
Yllä oleva komento tulostaa arvon merkkijonojen "Laite" ja "Yhdistetty" väliin. Meidän tapauksessamme (laite 3C: 28: 6D: FD: 65: 3D kytketty: ei) se on laitteen mac-osoite.
Olkaamme kirjoittaa odottavat script joka vie MACosoitteen ensimmäisenä argumenttina ja luottamusta ja muodostaa siihen laitteeseen.
Luo tiedosto nimeltä trust_and_connect.expect
aseta aikakatkaisu 30 kutee bluetoothctl odottaa "#" lähetä "agentti pois \ r" odottaa "? tallennettu" lähetä "\ r" odottaa "#" lähetä "agentti päällä \ r" odota "agentti rekisteröity" lähetä "\ r" odottaa "# " lähetä" oletusagentti \ r " odottaa" oletusagenttipyyntö onnistunut " lähetä" \ r " odottaa" # " lähetä" luottamus " odottaa" muuttuu " lähetä" muodosta "r" odota "yhteys onnistunut" lähetä "poistu \ r "
Kopioi yllä oleva koodi kyseiseen tiedostoon. Se tekee luotettavan ja yhdistävän osan automaattisesti.
Laittakaamme tämä kaikki nyt Python-komentotiedostoon, jotta koko pariliitos voidaan automatisoida.
Anna meille luoda tiedosto pair_and_trust_bluetooth_device.sh
cd $ (dirname $ 0) kaiku "Pariliitoksen muodostaminen…" odottaa pair_bluetooth_device.expect> oodata_script.log chmod 777 várta_script.log lepotila 2 kaiku " Luotettava ja yhdistävä.." device_mac_address = $ (kissa odotettavissa_script.log - grep -Pom 1 " (? <= Laite). * (? = Yhdistetty) ") kaiku-mac-osoite on $ device_mac_address if]; odota sitten trust_and_connect.expect $ device_mac_address else echo "Ei laitetta kytketty" fi rm wait_script.log
Joten bash-käsikirjoitus,
- Kutsuu odottavan komentosarjan (jonka tulos tulostetaan tiedostoon nimeltä váren_script.log), joka
- Käynnistää NoInputNoOutput- agentin
- Tekee siitä oletusagentin
- Käynnistää pi: n löydettävyyden
- Odottaa jonkun yhteyden muodostumista ja poistuu, kun joku tekee tai aikakatkaisut
- Nuku 2 sekuntia
- Tartu laitteen Mac-osoitteen várható_script.log-tiedostoon
- Luottaa ja yhdistää laitteen, jos mac_osoite on tyhjä
- Poistaa jäännöstiedoston odottaa_script.log
Käynnistä Bluetooth-pariliitoksen komentosarja painikkeella
Nyt meillä on komentosarja pariliitoksen automatisointiin. Mutta tämä komentosarja on suoritettava sopivasti, aina kun käyttäjä haluaa. Joten kytketään tämä komentosarja fyysisellä painikkeella, jotta tämä komentosarja kutsutaan joka kerta, kun painiketta painetaan. Keskeytys on yksi sulautetun ohjelmoinnin keskeisistä osista. Aloittelijoille keskeytys, kun se havaitaan, laita ohjelman säännöllinen rutiini ja suorittaa ennalta määritetyn ISR: n, joka tunnetaan nimellä keskeytyspalvelurutiini.
Olkaamme siis liitä-painiketta GPIO pin 11 ja määrittää ISR samaan. ISR: n sisällä kutsumme käsikirjoitusta.
Olkaamme luoda python tiedosto nimeltä Bluetooth-speaker-main.py ja lisää alla oleva koodi sitä. Olen lisännyt kommentit ohjelmaan, joten jos käytät tätä koodia, sinulla on vielä niitä
#import hakusuunnitelmat tuoda alikäsittelyyn tuonti RPi.GPIO kuin GPIO tuonti ajan tuonti os tuonti puunkorjuun pair_pin = 11 #fetch tiedoston hakemiston, josta python skripti ajetaan fileDirectory = os.path.dirname (os.path.realpath (__ file__)) #set lokitiedosto sijainti sama kuin python kirjoitus sijainti lokitiedostoon = fileDirectory + "/ bluetoothSpeaker.log" logging.basicConfig (tiedostonimi = lokitiedosto, filemode = 'w', format = "% (nimi) s -% (levelname) s -% (message) s ', taso = logging.INFO) def pairNewDevice (kanava): #ISR nasta 11 -tulostukselle ("Odottaa pariliitosta") logging.info ("Odottaa pariliitosta") output = aliprosessi.puhelu () gpio.setmode (gpio.HALLITUS) gpio.setup (pair_pin, gpio.IN, pull_up_down = gpio.PUD_UP) yritä: # Aseta pair_pin keskeytysnastaksi, joka havaitsee putoavan reunan, ja kun se havaitaan, soita pairNewDevice-funktio gpio.add_event_detect (pair_pin, gpio.FALLING, callback = pairNewDevice, bouncetime = 1000) tulosta ("Bluetooth-ohjelma on alkanut") logging.info ("Bluetooth-ohjelma on käynnistynyt"), kun taas True: time.sleep (5) paitsi KeyboardInterrupt: gpio.cleanup ()
Piirikaavio
Alla on kytkentäkaavio painikkeen yhdistämiseksi Raspberry Pi: n GPIO11: n kanssa Bluetooth-pariliitoksen käynnistämiseksi äänensiirtoa varten Bluetoothin kautta.
Määritä Cron-työ käynnistääksesi Bluetooth Speaker Python -ohjelman käynnistettäessä
Asetetaan nyt lopuksi cron-työ, joka käynnistää tämän python-ohjelman aina, kun pi käynnistyy.
crontab -e
Valitse suosikkieditori ja lisää alla oleva rivi tiedoston loppuun
@reboot python3 /home/pi/blueooth-speaker/Bluetooth-speaker-main.py
Tämä kutsuu python-ohjelmaa aina, kun pi käynnistyy.
Ja tämä on se. Kotka on laskeutunut. Olet valmistanut Headless Raspberry Pi Bluetooth-kaiuttimen.
Käynnistä Pi uudelleen, pariliitä puhelin ja suoratoista ääni.:)
Kaikki tämän Raspberry Pi Bluetooth-kaiuttimen komentosarjat voidaan ladata GitHub-tililtä. Tarkista myös alla oleva video.