- A2DP
- Příprava Raspberry Pi na bezhlavé nastavení
- Předpoklady pro instalaci v Raspberry Pi
- Párování zařízení Bluetooth s Raspberry Pi
- Automatizujte proces párování Bluetooth pomocí skriptů Pythonu
- Spusťte párovací skript Bluetooth pomocí tlačítka
- Kruhový diagram
- Nastavením úlohy Cron spustíte program Bluetooth Speaker Python při spuštění
Raspberry Pi je počítač velikosti dlaně, který má vestavěné rozhraní Bluetooth, Wi-Fi, ethernetový port, port fotoaparátu atd., Což z něj činí nejvhodnější mikrokontrolér pro integrované aplikace založené na IoT. Používá se také k výrobě mnoha druhů serverů, jako je tiskový server, mediální server, webový server atd. Dnes se naučíme, jak Raspberry Pi dokáže převést normální reproduktor s 3,5 mm jackem na bezdrátový bluetooth reproduktor.
V tomto příspěvku postavíme Bluetooth reproduktor na bázi Raspberry Pi fúzí síly A2DP, Linuxu a zvukového kodeku k bezdrátovému streamování datových paketů ze zdroje zvuku do audio jímky. Abychom tak učinili, hackneme trochu systému Linux a napíšeme část kódu do bash a pythonu a budeme v podnikání.
A2DP
A2DP je zkratka Advanced Audio Distribution Profile. Jedná se o protokol, který je přítomen téměř ve všech zařízeních podporujících Bluetooth. Dláždí cestu pro datový přenos zvuku z jednoho zařízení do druhého za předpokladu, že jsou oba navzájem propojeni přes Bluetooth. A2dp používá bezztrátový kompresní algoritmus ke kompresi zvukových paketů před přenosem, aby se snížila latence, ale ztráty způsobené touto kompresí jsou pro lidské uši těžko vnímatelné.
Příprava Raspberry Pi na bezhlavé nastavení
Chcete-li převést Raspberry Pi na bezdrátový reproduktor, nejprve nainstalujte OS (Raspbian Stretch) na kartu Raspberry PI SD, pokud jste v Raspberry Pi noví, postupujte podle tohoto článku a začněte s Raspberry Pi.
Většina z nás vlastní Raspberry Pi a notebook, ale postrádá monitor. Abychom však mohli SSH do Raspberry Pi, chceme, aby bylo stejné připojeno ve stejné síti, ve které je připojen náš počítač. Potřebujeme monitor připojený k Pi, pomocí kterého můžeme vybrat Wi-Fi a připojit se?
Vlastně ne. Raspberry Pi lze připojit k Wi-Fi přidáním položky do souboru s názvem wpa_supplicant.conf
Chcete-li tak učinit, připojte SD kartu k počítači a otevřete soubor rootfs / etc / wpa_supplicant / wpa_supplicant.conf a přidejte do něj následující položku. Nezapomeňte otevřít soubor s oprávněními správce (root).
network = {ssid = "wifi_ssid" psk = "wifi_passkey" key_mgmt = WPA-PSK}
Vstup by měl vypadat podobně.
Výše uvedená položka by nás měla připojit k Wi-Fi, ale to nestačí k vytvoření a udržování připojení SSH mezi Raspberry Pi a počítačem. Ve výchozím nastavení je SSH v Raspberry Pi zakázán, takže pro jeho povolení vytvořte v bootovacím adresáři prázdný soubor ssh.
Nyní je Raspberry Pi technicky umožněn vzdálený přístup. Připojte malinovou pí ke zdroji energie. Nyní by se pi připojilo k Wi-Fi automaticky, ale jeho IP adresa je vyžadována, aby se do ní SSH. Existuje několik způsobů, jak zjistit to samé. Používám příkaz nmap
nmap -sn / 24
Tento příkaz nám poskytne adresy IP všech zařízení připojených k naší síti. Například,
Jeden z nich je z malinového pi. Nyní víme, že IP adresa pí se k ní připojíme
ssh pi @ pi_ip_address
Existují i jiné způsoby, jak začít s Raspberry Pi bezhlavě, zkontrolujte odkaz a naučte se to samé.
Předpoklady pro instalaci v Raspberry Pi
BlueZ
BlueZ je výchozí aplikace dodávaná s Raspbian distro. Používá se pro přístup k ovládacím prvkům bluetooth systému. Může být také nainstalován v případě, že jej nemáte k dispozici v pi z důvodů, které znáte jen vy.
Níže uvedený příkaz získá aplikaci rozhraní Bluetooth nainstalovanou v našem pi.
apt-get install bluez
PulseAudio
Pulse Audio je aplikace, která převádí bajty počítačových dat na lidské vnímání. To je také nazýváno jako hudební přehrávač. Protokol A2DP je k dispozici v zásuvných modulech aplikace PulseAudio. Nainstalujme tedy všechny aplikace související s pulsem a zvukem pomocí níže uvedeného příkazu:
apt-get install pulseaudio- *.
Párování zařízení Bluetooth s Raspberry Pi
Otevřete aplikaci BlueZ pomocí příkazu
bluetoothctl
Agenta Bluetooth je broker, že rozhovory mezi dvěma zařízeními Bluetooth a inicializovat spojení mezi nimi. Existují různé typy bluetooth agentů. Ten, který použijeme, je agent NoInputNoOutput, protože nám umožňuje připojení bez zásahu uživatele. Pojďme tedy inicializovat agenta spuštěním následujících příkazů.
agent NoInputNoOutput
Jako odpověď byste měli dostat zprávu „ Agent registrován “. Nyní, když máme našeho agenta registrovaného, udělejme z něj výchozího .
výchozí agent
Odpověď by měla být „Výchozí požadavek agenta úspěšný“
Nyní uděláme naše zařízení viditelným
zjistitelné na
Pro které by odpověď měla být „Změna viditelnosti na úspěšná“
Nyní zkuste připojit svůj mobilní telefon nebo počítač k Raspberry Pi
Aplikace nás vyzve k autorizaci služeb a my je nemusíme dělat. Místo toho zařízení důvěřujeme a připojíme ho. Důvěřovat zařízení je velmi důležité, protože když se důvěryhodné zařízení pokusí spojit s pí, umožňuje to samé bez jakéhokoli zásahu uživatele.
důvěryhodné spojení
Po všech těchto akcích by měl váš terminál vypadat podobně jako tento.
Jo! Náš telefon je připojen k Raspberry Pi přes Bluetooth. Ale je to dost? Je zřejmé, že ne, chceme, aby byly naše zvukové datové pakety přeneseny z telefonu do pí a poté z pí do reproduktoru, který je připojen k audio portu pí.
Ujistěte se, že máme telefon uveden ve zdroji zvuku aplikace PulseAudio spuštěním následujícího příkazu:
pactl list short
Zobrazí seznam všech načtených zvukových modulů, zvukových jímek a zvukových zdrojů
Podívejte se na hodnoty oproti sériovému číslu 30. Bluez_source znamená zdroj zvuku přes aplikaci BlueZ, kterým je bluetooth. Křížová kontrola adresy mac zařízení, která je mezi bluez_source a a2dp_source a adresa, kterou máte v aplikaci BlueZ. V mém případě je to bluez_source.3C_28_6D_FD_65_3D.a2dp_source, který je stejný jako ten z aplikace BlueZ. Nyní, pokud přehráváte skladbu ze zařízení, které je připojeno k pí, mělo by být směrováno do reproduktoru, který je připojen k audio portu Raspberry Pi.
Heuréka! Úspěšně jsme sestavili reproduktor Bluetooth. Zvuk jsme nasměrovali, ale to není vše. Nemůžeme provést všechny výše uvedené kroky ručně, takže je necháme automatizovat pomocí očekávaného skriptu a rozhraní pi s přepínačem, který po stisknutí spáruje Pi se zařízeními.
Chladný? Pojďme nyní do práce.
Automatizujte proces párování Bluetooth pomocí skriptů Pythonu
Očekávejte, že skripty jsou jako bash skripty, ale automatizované. Hledá dané slovo v terminálu a když dorazí, odešle příkaz podle skriptu. Pojďme automatizovat proces párování. Vytvořte soubor s názvem pair_bluetooth_device.expect
nastavit časový limit 30 založit bluetoothctl očekávat "#" odeslat "agenta vypnut" očekávat "? zapamatován" odeslat "" očekávat "#" odeslat "agenta NoInputNoOutput" očekávat "Agent zaregistrován" odeslat "" očekávat "# "odeslat" výchozího agenta "očekávat" Výchozí požadavek agenta úspěšný "odeslat" "očekávat" # "odeslat" zjistitelné na "očekávat" Autorizovat "odeslat" ano "odeslat" ukončit
Zkopírujte kód a vložte jej do souboru. Činí to automaticky, akce, které jsme provedli při párování mobilu s malinovou pí. Umožňuje pouze připojení zařízení, ale nedůvěřuje mu. Abychom zařízení důvěřovali, potřebujeme jeho mac adresu. Vytiskneme tedy výstup tohoto skriptu očekávání do souboru protokolu, ze kterého lze uchopit adresu mac.
grep -Pom 1 "(? <= Zařízení). * (? = Připojeno)"
Výše uvedený příkaz vytiskne hodnotu mezi řetězcem „Zařízení“ a „Připojeno“. V našem případě (zařízení 3C: 28: 6D: FD: 65: 3D připojeno: ne) se jedná o mac adresu zařízení.
Pojďme napsat očekávat, že skript , který bude brát v mac adresu jako první argument a důvěru a připojit k tomuto zařízení.
Vytvořte soubor s názvem trust_and_connect.expect
set timeout 30 třou bluetoothctl očekávat, "#" odeslat "agenta off \ r" očekávat "? egistered" Send "\ r" očekávat "#" send "agent \ r" očekávat "Agent registrovaný" Send "\ r" očekávat „# " odeslat" výchozího agenta " očekávat" Výchozí požadavek agenta úspěšný " odeslat" " očekávat" # " odeslat" důvěryhodně " očekávat" Změna " odeslat" připojit " očekávat" Úspěšné připojení " odeslat" ukončit \ r "
Zkopírujte výše uvedený kód do tohoto souboru. Důvěřující a spojovací část provádí automaticky.
Pojďme to všechno dát do souboru skriptu v Pythonu, aby bylo možné automatizovat celý proces párování.
Pojďme vytvořit soubor 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 "Trusting and connections.." device_mac_address = $ (cat expect_script.log - grep -Pom 1 " (? <= Zařízení). * (? = Připojeno) ") adresa echo mac je $ device_mac_address if]; pak očekávejte trust_and_connect.expect $ device_mac_address else echo "Není připojeno žádné zařízení" fi rm expect_script.log
Takže bash skript,
- Volá skript expect (jehož výstup bude vytištěn do souboru s názvem expect_script.log), který
- Inicializuje agenta NoInputNoOutput
- Nastaví jej jako výchozího agenta
- Zapíná objevitelnost pí
- Čeká, až se někdo připojí, a ukončí se, když to někdo udělá nebo vyprší časový limit
- Spánek po dobu 2 sekund
- Chyťte soubor expect_script.log pro mac adresu zařízení
- Důvěřuje a připojuje zařízení, pokud má mac_address hodnotu null
- Odebere soubor zbytku expect_script.log
Spusťte párovací skript Bluetooth pomocí tlačítka
Nyní máme skript pro automatizaci procesu párování. Tento skript však musí běžet pohodlně, kdykoli si uživatel přeje. Pojďme tedy připojit tento skript pomocí fyzického tlačítka, aby byl tento skript volán pokaždé, když stisknete tlačítko. Přerušení je jednou z důležitých součástí vestavěného programování. Pro začátečníky přerušení, když jsou snímána, zavedou běžnou rutinu programu a spustí předdefinovaný ISR známý jako rutina přerušení služby.
Pojďme tedy připojit tlačítko na pin gpio 11 a přiřadit stejný ISR. Uvnitř ISR zavoláme skript.
Vytvořme soubor pythonu s názvem Bluetooth-speaker-main.py a přidejme k němu níže uvedený kód. Přidal jsem komentáře do programu, takže pokud tento kód použijete, stále je máte
#import required packages import subprocess import RPi.GPIO as gpio import time import os import loging pair_pin = 11 # načíst adresář souborů, ze kterého je spuštěn skript python fileDirectory = os.path.dirname (os.path.realpath (__ file__)) # Nastavte umístění souboru protokolu stejně jako umístění skriptu python logFile = fileDirectory + "/ bluetoothSpeaker.log" logging.basicConfig (název souboru = logFile, filemode = 'w', format = '% (name) s -% (levelname) s -% (message) s ', level = logging.INFO) def pairNewDevice (kanál): #ISR pro tisk PIN 11 ("Čekání na párování") logging.info ("Čekání na párování") výstup = subprocess.call () gpio.setmode (gpio.PRKNO) gpio.setup (pair_pin, gpio.IN, pull_up_down = gpio.PUD_UP) zkuste: # Nastavte pair_pin jako přerušovací kolík, který detekuje sestupnou hranu, a když se to stane, zavolejte funkci pairNewDevice gpio.add_event_detect (pair_pin, gpio.FALLING, callback = pairNewDevice, bouncetime = 1000) print ("Bluetooth program spuštěn") logging.info ("Bluetooth program spuštěn") při True: time.sleep (5) kromě KeyboardInterrupt: gpio.cleanup ()
Kruhový diagram
Níže je schéma zapojení pro připojení tlačítka k GPIO11 Raspberry Pi ke spuštění procesu párování Bluetooth pro přenos zvuku přes Bluetooth.
Nastavením úlohy Cron spustíte program Bluetooth Speaker Python při spuštění
Nyní konečně nastavíme úlohu cron, která spustí tento pythonový program pokaždé, když se pi spustí.
crontab -e
Vyberte svůj oblíbený editor a přidejte následující řádek na konec souboru
@reboot python3 /home/pi/blueooth-speaker/Bluetooth-speaker-main.py
Toto zavolá náš pythonový program pokaždé, když se pi spustí.
A je to. Orel přistál. Vyrobili jste si Bluetooth reproduktor Headless Raspberry Pi.
Restartujte Pi, spárujte telefon a streamujte zvuk.:)
Všechny skripty pro tento reproduktor Bluetooth Raspberry Pi lze stáhnout z účtu GitHub. Zkontrolujte také níže uvedené video.