- A2DP
- Raspberry Pi'yi Başsız Kurulum için Hazırlama
- Raspberry Pi'ye yüklenecek ön koşullar
- Bluetooth Cihazını Raspberry Pi ile Eşleştirme
- Python Komut Dosyaları ile Bluetooth Eşleştirme İşlemini Otomatikleştirin
- Bluetooth Eşleştirme Komut Dosyasını Bir Düğme ile Tetikleyin
- Devre şeması
- Açılışta Bluetooth Hoparlör Python Programını başlatmak için bir Cron İşi kurun
Raspberry Pi, IoT tabanlı gömülü uygulamalar için en uygun mikrodenetleyiciyi yapan dahili Bluetooth, Wi-Fi, Ethernet portu, Kamera portu vb. İçeren avuç içi boyutunda bir bilgisayardır. Aynı zamanda Yazdırma sunucusu, Medya Sunucusu, Web Sunucusu vb. Gibi birçok sunucu yapmak için de kullanılır. Bugün bir Raspberry Pi'nin 3,5 mm jaka sahip normal bir hoparlörü kablosuz bluetooth hoparlöre nasıl dönüştürebileceğini öğreneceğiz .
Bu yazıda, veri paketlerini bir ses kaynağından bir ses havuzuna kablosuz olarak aktarmak için A2DP, Linux ve ses kodekinin gücünü birleştirerek Raspberry Pi tabanlı Bluetooth Hoparlör oluşturacağız. Bunu yapmak için biraz Linux sistemini hackleyeceğiz ve bash ve python ile bir parça kod yazacağız ve işin içinde olacağız.
A2DP
A2DP, Advanced Audio Distribution Profile'ın kısaltmasıdır. Bu, neredeyse tüm Bluetooth özellikli cihazlarda bulunan bir protokoldür. Bluetooth ile birbirlerine bağlı olmaları kaydıyla, bir cihazdan diğerine sesin veri aktarımının yolunu açar. A2dp, gecikmeyi azaltmak için ses paketlerini iletimden önce sıkıştırmak için kayıpsız sıkıştırma algoritması kullanır, ancak bu sıkıştırmadan kaynaklanan kayıplar insan kulağı tarafından neredeyse hiç algılanamaz.
Raspberry Pi'yi Başsız Kurulum için Hazırlama
Raspberry Pi'yi kablosuz bir Hoparlöre dönüştürmek için, öncelikle işletim sistemini (Raspbian Stretch) Raspberry PI SD kartına kurun, Raspberry Pi'de yeniyseniz, Raspberry Pi'yi kullanmaya başlamak için bu makaleyi izleyin.
Çoğumuz bir Raspberry Pi'ye ve bir dizüstü bilgisayara sahibiz ancak bir monitörümüz yok. Ancak Raspberry Pi'ye SSH uygulamak için, aynısının bilgisayarımızın bağlı olduğu aynı ağa bağlanmasını istiyoruz. Wi-Fi'yi seçip bağlanabileceğimiz Pi'ye bağlı monitöre ihtiyacımız var mı?
Aslında yapmıyoruz. Raspberry Pi, wpa_supplicant.conf adlı bir dosyaya bir giriş eklenerek Wi-Fi'ye bağlanabilir
Bunu yapmak için, SD kartı bilgisayara bağlayın ve rootfs / etc / wpa_supplicant / wpa_supplicant.conf dosyasını açın ve buna aşağıdaki girişi ekleyin. Dosyayı yönetici (kök) ayrıcalıklarıyla açmayı unutmayın.
network = {ssid = "wifi_ssid" psk = "wifi_passkey" key_mgmt = WPA-PSK}
Giriş buna benzer görünmelidir.
Yukarıdaki giriş bizi Wi-Fi'ye bağlamalı, ancak bu Raspberry Pi ile bilgisayar arasında bir SSH bağlantısı oluşturmak ve sürdürmek için yeterli değildir. Raspberry Pi'de varsayılan olarak SSH devre dışı bırakılmıştır, bu nedenle etkinleştirmek için önyükleme dizininde ssh adlı boş bir dosya oluşturun.
Artık Raspberry Pi'ye uzaktan erişim için teknik olarak etkinleştirildi. Ahududu pi'yi güç kaynağına bağlayın. Şimdi pi, Wi-Fi'ye otomatik olarak bağlanır, ancak SSH'ye bağlanmak için IP adresi gereklidir. Aynı şeyi bulmanın birden fazla yolu var. Kullandığım nmap komutunu
nmap -sn / 24
Bu komut bize ağımıza bağlı tüm cihazların IP adreslerini verecektir. Örneğin,
Bunlardan biri ahududu pi'leridir. Artık pi'nin IP adresini biliyoruz, ona bağlanmamıza izin verin
ssh pi @ pi_ip_address
Raspberry Pi'ye başsız başlamanın başka yolları da var, aynı şeyi öğrenmek için bağlantıyı kontrol edin.
Raspberry Pi'ye yüklenecek ön koşullar
BlueZ
BlueZ, Raspbian dağıtımıyla birlikte gelen varsayılan uygulamadır. Sistemin bluetooth kontrollerine erişmek için kullanılır. Ayrıca, sadece sizin bildiğiniz nedenlerle pi'nizde mevcut olmaması durumunda da kurulabilir.
Aşağıdaki komut, pi'mize yüklenen Bluetooth arayüz uygulamasını alır.
apt-get bluez yükle
PulseAudio
Pulse Audio, bilgisayar verilerinin baytlarını insan algısına dönüştüren bir uygulamadır. Müzik çalar olarak da adlandırılır. A2DP protokolü, PulseAudio uygulama eklentilerinde mevcuttur. Öyleyse aşağıdaki komutu kullanarak darbeli ses ile ilgili tüm uygulamaları kuralım:
apt-get install pulseaudio- *.
Bluetooth Cihazını Raspberry Pi ile Eşleştirme
BlueZ uygulamasını şu komutu kullanarak açın
bluetoothctl
Bir Bluetooth aracısı, iki bluetooth özellikli cihaz arasında konuşan ve aralarında bir bağlantı kuran bir aracıdır. Farklı türde bluetooth aracıları vardır. Biz kullanacağı biridir NoInputNoOutput bize kullanıcı müdahalesi olmadan bağlamanıza olanak verir çünkü ajan. Öyleyse aşağıdaki komutları çalıştırarak ajanı başlatalım.
ajan NoInputNoOutput
Yanıt olarak " Ajan kaydedildi " mesajını almalısınız. Artık temsilcimizi kaydettirdiğimize göre, onu varsayılan ayar yapalım.
temerrüt aracı
Yanıt "Varsayılan aracı isteği başarılı" olmalıdır
Şimdi cihazımızı keşfedilebilir yapalım
keşfedilebilir
Bunun için yanıtın "Başarılı olduğunda keşfedilebilir değiştirme" olması gerekir
Şimdi cep telefonunuzu veya bilgisayarınızı Raspberry Pi'ye bağlamayı deneyin
Uygulama bizden hizmetleri yetkilendirmemizi isteyecektir ve bizim bunları yapmamıza gerek yoktur. Bunun yerine, cihaza güvenip bağlanacağız. Cihaza güvenmek çok önemlidir, çünkü güvenilir cihaz pi ile bağlantı kurmaya çalıştığında, hiçbir kullanıcı müdahalesi olmadan aynısına izin verir.
güven bağlantısı
Tüm bu işlemlerden sonra, terminaliniz buna benzer görünmelidir.
Yaşasın! Telefonumuzu Bluetooth aracılığıyla Raspberry Pi'ye bağladık. Ama bu yeterli mi? Açıkçası hayır, ses veri paketlerimizin telefondan pi'ye ve daha sonra pi'den pi'nin ses portuna bağlı hoparlöre aktarılmasını istiyoruz.
Aşağıdaki komutu çalıştırarak PulseAudio uygulamasının ses kaynağında telefonumuzun listelendiğinden emin olalım:
pactl listesi kısa
Yüklenen tüm ses modüllerini, ses alıcılarını ve ses kaynaklarını listeleyecektir
30 seri numarası karşısındaki değerlere bakın. Bluez_source, bluetooth olan BlueZ uygulaması üzerinden ses kaynağı anlamına gelir. Bluez_source ile a2dp_source arasında bulunan aygıt mac adresini ve BlueZ uygulamasında sahip olduğunuz adresi çapraz kontrol edin. Benim durumumda öyle bluez_source.3C_28_6D_FD_65_3D.a2dp_source BlueZ uygulamadan biri olarak aynıdır. Şimdi pi'ye bağlı cihazdan bir şarkı çalarsanız, ahududu pi'nin ses portuna bağlı hoparlöre yönlendirilmelidir.
Eureka! Başarıyla bir Bluetooth hoparlörü oluşturduk. Sesi yönlendirdik ama hepsi bu kadar değil. Yukarıdaki adımların hepsini manuel olarak yapamayız, bu yüzden bunları, basıldığında Pi'yi cihazlarla eşleştiren bir anahtarla beklediğiniz komut dosyası ve arayüz pi'yi kullanarak otomatikleştirelim.
Güzel? Şimdi işe dönelim.
Python Komut Dosyaları ile Bluetooth Eşleştirme İşlemini Otomatikleştirin
Beklenen Komut Dosyaları, bash betikleri gibidir ancak otomatiktir. Verilen kelimeyi terminalde arar ve aynı kelime geldiğinde betiğe göre komutu gönderir. Eşleştirme sürecini otomatikleştirelim. Pair_bluetooth_device.expect adlı bir dosya oluşturun
zaman aşımını ayarla 30 bluetoothctl spawn bekle "#" gönder "aracı kapalı \ r" bekleniyor "? gistered" gönder "\ r" bekle "#" gönder "aracı NoInputNoOutput \ r" bekle "Aracı kayıtlı" gönder "\ r" bekliyoruz "# "gönder" varsayılan aracı \ r "bekle" Varsayılan aracı isteği başarılı "gönder" \ r "bekle" # "gönder" \ r "tarihinde keşfedilebilir bekle" Yetkilendir "gönder" evet \ r "gönder" çıkış \ r "
Kodu kopyalayın ve aynısını dosyaya yapıştırın. Cep telefonunu ahududu pi ile eşleştirirken yaptığımız eylemleri otomatik olarak yapar. Sadece cihazın bağlanmasına izin veriyor ama güvenmiyor. Bir cihaza güvenmek için onun mac adresine ihtiyacımız var. Bu nedenle, bu bekleme komut dosyasının çıktısını, mac adresinin yakalanabileceği bir günlük dosyasına yazdıracağız.
grep -Pom 1 "(? <= Cihaz). * (? = Bağlı)"
Yukarıdaki komut, "Aygıt" ve "Bağlandı" dizesi arasındaki değeri yazdırır. Bizim durumumuzda (Cihaz 3C: 28: 6D: FD: 65: 3D Bağlı: hayır), cihazın mac adresidir.
Bize edelim bir yazma komut beklediğinin ilk argüman gibi mac adresi alacaktır güven ve o cihaza bağlanmak.
Trust_and_connect.expect adlı bir dosya oluşturun
zaman aşımını ayarla 30 bluetoothctl spawn "#" gönder "ajanı kapalı \ r" bekle "? egistered" gönder "\ r" bekle "#" gönder "ajanı " Ajan kayıtlı " gönder" \ r " bekliyoruz" # " gönder" varsayılan aracı \ r " bekle" Varsayılan aracı isteği başarılı " gönder" \ r " bekle" # " gönder" güven \ r " bekle" Değiştiriliyor " gönder" bağlan \ r " bekle" Bağlantı başarılı " gönder" çıkışı \ r "
Yukarıdaki kodu o dosyaya kopyalayın. Güvenen ve bağlanan kısmı otomatik olarak yapar.
Şimdi tüm bunları bir Python betiğine koyalım, böylece tüm eşleştirme işlemi otomatikleştirilebilir.
Bize bir Let bir dosya oluşturmak pair_and_trust_bluetooth_device.sh
cd $ (dizin adı $ 0) echo " Eşleniyor …" bekle pair_bluetooth_device.expect> wait_script.log chmod 777 bekleme_script.log uyku 2 echo " Güveniyor ve bağlanıyor.." device_mac_address = $ (cat bekleme_script.log - grep -Pom 1 " (? <= Cihaz). * (? = Bağlandı) ") echo mac adresi $ device_mac_address ise]; sonra trust_and_connect.expect $ device_mac_address bekleyin, aksi takdirde echo "Bağlı cihaz yok" fi rm wait_script.log
Yani bash betiği,
- Beklenen bir betiği çağırır (çıktısıbeklenti_script.log adlı bir dosyaya yazdırılacaktır)
- NoInputNoOutput aracısını başlatır
- Varsayılan ajan yapar
- Pi'nin keşfedilebilirliğini açar
- Biri yaptığında veya zaman aşımına uğradığında birinin bağlanmasını ve çıkmasını bekler
- 2 saniye uyu
- Cihazın mac adresi için wait_script.log dosyasını alın
- Mac_address boş ise cihaza güvenir ve cihaza bağlanır
- Kalan dosyayı wait_script.log kaldırır
Bluetooth Eşleştirme Komut Dosyasını Bir Düğme ile Tetikleyin
Şimdi , eşleştirme sürecini otomatikleştirecek komut dosyasına sahibiz. Ancak bu komut dosyası, kullanıcı istediği zaman uygun bir şekilde çalışmalıdır. Öyleyse bu betiği fiziksel bir düğme ile bağlayalım, böylece düğmeye her basıldığında bu betik çağrılır. Kesme, gömülü programlamanın hayati parçalarından biridir. Yeni başlayanlar için, algılandığında kesintiler programın normal rutinini koyar ve Interrupt Service Routine olarak bilinen önceden tanımlanmış bir ISR çalıştırır.
Öyleyse basmalı düğmeyi gpio pin 11'e bağlayalım ve buna bir ISR atayalım. ISR içinde, senaryoyu arayacağız.
Bize edelim adında bir piton dosyası oluşturmak Bluetooth-speaker-main.py ve ona aşağıdaki kodu ekleyin. Programa yorumları ekledim, bu yüzden bu kodu kullanırsanız, hala onlara sahipsiniz
#import gerekli paketleri içe aktar alt işlemi içe aktar RPi.GPIO'yu gpio olarak içe aktarma içe aktarma süresi içe aktarma os içe aktarma günlük kaydı pair_pin = 11 #fetch python komut dosyasının çalıştırıldığı dosya dizinini fileDirectory = os.path.dirname (os.path.realpath (__ dosya__)) # Günlük dosyası konumunu python komut dosyası konumu ile aynı şekilde ayarlayın logFile = fileDirectory + "/ bluetoothSpeaker.log" logging.basicConfig (filename = logFile, filemode = 'w', format = '% (name) s -% (levelname) s -% (mesaj) s ', level = logging.INFO) def pairNewDevice (channel): #ISR pin 11 için yazdırma (" Eşleştirme bekleniyor") logging.info (" Eşleştirme bekleniyor") output = subprocess.call () gpio.setmode (gpio.YAZI TAHTASI) gpio.setup (pair_pin, gpio.IN, pull_up_down = gpio.PUD_UP) deneyin: # pair_pin'i düşen kenarı algılayan bir kesme pimi olarak ayarlayın ve bunu yaptığında pairNewDevice işlevini gpio.add_event_detect (pair_pin, gpio.FALLING, callback = pairNewDevice, bouncetime = 1000) print ("Bluetooth programı başladı") logging.info ("Bluetooth programı başladı") True: time.sleep (5), KeyboardInterrupt hariç: gpio.cleanup ()
Devre şeması
Aşağıda, Bluetooth üzerinden ses aktarımı için Bluetooth eşleştirme işlemini tetiklemek üzere Raspberry Pi GPIO11 ile bir düğmeyi bağlamak için devre şeması verilmiştir.
Açılışta Bluetooth Hoparlör Python Programını başlatmak için bir Cron İşi kurun
Şimdi nihayet pi her açıldığında bu python programını başlatacak bir cron işi ayarlayalım.
crontab -e
Favori düzenleyicinizi seçin ve aşağıdaki satırı dosyanın sonuna ekleyin
@reboot python3 /home/pi/blueooth-speaker/Bluetooth-speaker-main.py
Bu , pi her açıldığında python programımızı çağıracaktır.
Ve işte bu. Kartal indi. Headless Raspberry Pi Bluetooth Hoparlör yaptınız .
Pi'nizi yeniden başlatın, telefonunuzu eşleştirin ve sesi yayınlayın.:)
Bu Raspberry Pi Bluetooth Hoparlör için tüm komut dosyaları GitHub Hesabından indirilebilir. Ayrıca aşağıda verilen videoyu kontrol edin.