İçindekiler:

Disco-pi: 8 Adım (Resimli)
Disco-pi: 8 Adım (Resimli)

Video: Disco-pi: 8 Adım (Resimli)

Video: Disco-pi: 8 Adım (Resimli)
Video: Cin Çıkarma Seansı Remix! 2024, Temmuz
Anonim
disko-pi
disko-pi

Bu talimat, bir web tarayıcısından çalınan müziğe dayalı olarak renkli bir LED şeridi kontrol etmek için bir Raspberry Pi'nin nasıl kullanılacağını gösterir.

HTTPS üzerinden Node.js kullanarak temel bir web sitesinin nasıl oluşturulacağını ve WSS (Güvenli Websoketi) üzerinden socket.io'nun nasıl kullanılacağını gösterir.

Web sitesi, çok basit bir düzene sahip tek bir sayfaya sahiptir. Web sayfası, sunucudaki genel/ses klasöründe bulunan müzik dosyalarını içeren bir açılır liste oluşturur. Listede bir seçeneğin seçilmesi, HTML 5 ses öğesini kullanarak web sayfasındaki müzik dosyasını oynatır. Müzik dosyasını çalarken, web sayfası müziği analiz etmek için AudioContext arayüzünü kullanır ve bu daha sonra güvenli bir websocket bağlantısı üzerinden sunucuya gönderilir.

Bir Raspberry Pi üzerinde çalışan sunucu, web yuvası aracılığıyla gönderilen verilere dayalı olarak bir WS2811 LED şeridindeki LED'lerin renklerini değiştirmek için Node RPI WS281x Native kitaplığını (Jeremy Garff'ın WS281X kitaplığını saran) kullanır.

Örnek kod burada bulunabilir: disco-pi

Adım 1: Ekipman

  1. Raspberry Pi - Ortada duran bir Raspberry Pi 2B kullandım, ancak yaklaşık 100 CAD karşılığında bir Raspberry Pi 3 Başlangıç Kiti alabilirsiniz.
  2. WS2811 LED Strip - ALITOVE 16.4ft 150 Piksel WS2811 ile oynuyordum. Bu, yaklaşık 45-50 CAD için bir kontrolör ve bir güç kaynağı ile birlikte gelir
  3. Barrel Jack Connector - Yerel elektronik mağazamdan bir tane aldım, bunun gibi bir şey. Sadece güç kaynağınıza uyup uymadığından emin olun
  4. Jumper Konnektörler / Tel - Bazı Dişi-Erkek konektör kablolarım ve etrafta yatan bazı 22 Gauge Solid bağlantı telim vardı

2. Adım: Ahududu Pi'yi Ayarlama

İşletim sistemi

Normalde en son Raspbian yapısını kullanırım. Resmi indirin ve SD Karta yazın. Windows bilgisayar kullanıyorsanız, görüntüyü SD Karta yazmak için Win32 Disk Imager'ı kullanabilirsiniz.

Node.js

Node.js'nin en son sürümünü yükleyin. Yazarken 8.9.1 kullanıyorum

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -

sudo apt-get kurulum düğümü

git'i yükle

sudo apt-get kurulum git

Adım 3: Örnek Kodu Ayarlama

Örnek kodu klonlayın

1. Yüklemek için bir temel klasör oluşturun

cd /opt

sudo mkdir com.jonhaydock sudo chown pi:pi com.jonhaydockcd com.jonhaydock

2. Örnek git deposunu klonlayın

git klon

veya

git klon [email protected]:haydockjp/disco-pi.git

3. Bağımlılıkları yükleyin

cd disko-pi

npm kurulumu

Bu 2-3 dakika sürebilir

4. Adım: Kendinden İmzalı SSL Sertifikası Oluşturun

1. Özel bir anahtar dosyası oluşturun

cd /opt/com.jonhaydock/disco-pi/certs

openssl genrsa -out disko-pi-key.pem 2048

2. Bir CSR (Sertifika İmzalama Talebi) oluşturun

openssl req -new -key disko-pi-key.pem -out disko-pi-csr.pem

Bu noktada sizden sertifika talebi için bazı bilgiler istenecektir. Bu kendinden imzalı bir sertifika olduğundan, ayrıntıları ne kadar doğru dolduracağınız size kalmış. İşte bir örnek

Ülke Adı (2 harfli kod) [AU]:CA

Eyalet veya İl Adı (tam ad) [Bazı Eyalet]:British Columbia Yerellik Adı (örn. şehir) :Vancouver Kuruluş Adı (örn. şirket) [Internet Widgits Pty Ltd]:Disco Pi Kuruluş Birimi Adı (örn. bölüm) : Ortak Ad (örn. sunucu FQDN'si veya SİZİN adınız) :disco-pi E-posta Adresi :[email protected] Bir sorgulama parolası : İsteğe bağlı bir şirket adı :

Bu örnekte, meydan okuma şifresini boş bırakmak için sadece geri tuşuna basın

3. Sertifikayı oluşturun

openssl x509 -req -days 1095 -disco-pi-csr.pem'de -signkey disko-pi-key.pem -out disco-pi-cert.pem

4. Ekstra güvenlik için ayrıca bir Diffie Hellman Parameters dosyası oluşturacağız.

openssl dhparam -out dh_2048.pem 2048

Bu 15-20 dakika sürebilir

Adım 5: Donanımı Bağlama

Donanımı Bağlama
Donanımı Bağlama
Donanımı Bağlama
Donanımı Bağlama
Donanımı Bağlama
Donanımı Bağlama
Donanımı Bağlama
Donanımı Bağlama

LED şeridine güç verme

LED şerit 12 volt ile çalışır. Raspberry Pi, yalnızca 3.3v veya 5v çıkış verme kapasitesine sahiptir ve bu kadar çok LED'i çalıştırmak için gereken amfilerin yakınında herhangi bir yerde çıkış verme yeteneğine sahip değildir.

12 voltluk güç kaynağını Raspberry Pi'ye bağlamamak önemlidir.

Şeridim ayrıca her iki ucunda şeride bağlı ek güç kablolarına sahipti. Bunları bantlamanızı öneririm, böylece diğer ekipmanlarınızla temas etmesinler.

Sonraki adımları kendi sorumluluğunuzda gerçekleştirin. Yanlış gidebilecek hiçbir şey için sorumluluk kabul etmiyorum.

LED şerit

LED şeridimde üç kablo var:

KIRMIZI - +12 Volt

SİYAH - Zemin

YEŞİL - Veri

NOT: Din ve Dout vardır - Veri Girişi ve Veri Çıkışı. Din yazan LED şeridin ucuyla çalıştığınızdan emin olun.

Namlu Jakının güç kaynağına bağlı olmadığından emin olmak

1. LED şeridinden gelen Kırmızı kabloyu Barrel Jack'in + tarafına bağlayın.

Beyaz bir 22 gauge kanca teli kullandım.

Kabloyu namlu jakındaki + yuvasına yerleştirin ve yerine vidalayın.

Kablonun diğer ucunu LED üzerindeki sokete itin. Kırmızı kabloyla bağlandığınızdan emin olun.

2. LED şeridinden gelen Siyah kabloyu Barrel Jack'in - tarafına bağlayın.

Siyah bir 22 gauge kanca teli kullandım.

Kabloyu namlu jakındaki - yuvaya yerleştirin. Bu noktada konektör kablolarından birinin (fotoğraftaki kahverengi tel) erkek ucunu da aynı deliğe yerleştirin ve her ikisini de yerine vidalayın.

Siyah kablonun diğer ucunu LED üzerindeki yuvaya itin.

Siyah kabloyla bağlandığınızdan emin olun.

3. Yeşil kabloyu LED şeridinden bağlayın

Dişi-erkek konnektör kablolarından birini alın. Fotoğraflarımda bu yeşil tel.

Erkek ucunu yeşil kablo ile LED soketine yerleştirin.

Bu veri kablosu.

Ahududu Pi

1. Yeşil bağlantı kablosunu alın ve Raspberry Pi GPIO'ya bağlayın.

PCM_CLK'ya bağlamanız gerekir (Pin 12 / GPIO 18)

2. Siyah bağlantı kablosunu alın ve Raspberry Pi GPIO'ya bağlayın.

Topraklardan birine bağlamanız gerekir. Pin 14'ü kullanmanızı öneririm, ancak pin 6, 9, 20, 25, 30, 34 veya 39'u da kullanabilirsiniz.

NOT: Bunun çalışması için LED güç kaynağı ve Raspberry Pi'nin ortak bir zemine sahip olması gerekir. Ayrıca 12 Volt + (Kırmızı kablo) Raspberry Pi'ye bağlamamanız gerektiğini de unutmayın.

LED Gücü

12 voltluk güç kaynağınızı namlu jakına bağlayamamalısınız.

LED şeridinizdeki tüm LED'ler şimdi BEYAZ renkte yanmalıdır

Adım 6: Sunucu Tarafı Kodu

Sunucu tarafı kodunu çalıştırma

cd /opt/com.jonhaydock/disco-pi

sudo npm başlangıcı

Bu, web sunucusunu başlatacak ve HTTPS ve WSS isteklerini dinlemeye başlayacaktır.

Varsayılan bağlantı noktası 443'tür, ancak kodu başlatmadan önce bir ortam değişkeni ayarlayarak bunu geçersiz kılabilirsiniz. Örneğin

dışa aktar DISCO_PI_PORT=1443

LED şeridimde 150 LED var. Bunlar üçlü gruplar halinde kontrol edilir. Bu, her LED'i ayrı ayrı kontrol edemediğim ve 50'yi kontrol etmek için yeterli bilgiyi göndermem gerektiği anlamına geliyor.

LED'inizde az veya çok varsa, bir parametreyi devreye alarak kontrol ettiğiniz LED sayısını geçersiz kılabilirsiniz. Örneğin, yalnızca 10 LED'i kontrol edebiliyorsanız

sudo npm başlangıç 10

Ana sunucu kodu app.js dosyasında bulunabilir. Bu dosya HTTPS web sunucusunu başlatır ve aynı bağlantı noktasındaki websocket isteklerini dinlemek için socket.io'ya ekler.

Web sitesine erişmek için ana bilgisayarınızda bir web tarayıcısı açmalı (bunu yalnızca Chrome'da test ettim) ve Raspberry Pi'nin IP adresini kullanmalısınız, örn.

10.0.1.2/

Raspberry Pi komut satırından IP adresinizi öğrenebilirsiniz.

ifconfig

Web sunucusu, ortak klasör altındaki herhangi bir içeriği sunacaktır. index.html sayfasını görüntülemek için varsayılandır.

Bir API bitiş noktası vardır - /api/audio. Bu bitiş noktası, public/audio klasörü altındaki dosyaları arar ve listeyi döndürür. Örneğin

["GYAKO.mp3", "Havana (feat. Young Thug).mp3", "Queen_Bohemian_Rhapsody.mp3", "Set It All Free.mp3", "Bu Ne İçin Geldi (feat. Rihanna).mp3"]

Bir seçenek olarak müzik eklemek için dosyaları bu klasöre kopyalayın. Ben şahsen ssh üzerinden Filezilla kullanıyorum. Dosya eklemek istediğiniz klasör /opt/com.jonhaydock/disco-pi/public/audio

7. Adım: Web Sitesi Kodu

Web Sitesi Kodu
Web Sitesi Kodu

Web sitesine girdiğinizde böyle bir şey görmelisiniz.

Bir güvenlik uyarısı görürseniz bunun nedeni, kendinden imzalı bir SSL sertifikası kullanmamızdır. Bunu yok sayabilir veya istisna olarak ekleyebilirsiniz.

Bir dosya adı seçildiğinde, HTML 5 ses öğesinin kaynağı. bu dosyaya ayarlanacaktır. Hazır olduğunda, müzik çalmaya başlayacaktır. Şarkı bittiğinde müzik duracaktır.

Hiçbiri seçeneğini seçerseniz, müzik çalmayı durduracaktır.

Müzik dosyasını çalarken, web sayfası müziği analiz etmek için AudioContext arayüzünü kullanır ve bu daha sonra güvenli bir websocket bağlantısı üzerinden sunucuya gönderilir.

Mesaj, sunucudaki socket.io'nun "ws2811"i dinlemek üzere ayarlandığı türdendir. 0 ile 255 arasında 50 elemanlık bir dizi içerir.

"ws2811", {"0":251, "1":252, "2":241, "3":217, "4":193, "5":164, "6":148, "7":139, "8":110, "9":96, "10":81, "11":67, "12":72, "13":66, "14":60, "15":60, "16":63, "17":54, "18":37, "19":30, "20":31, "21":26, "22":13, "23":3, " 24":10, "25":7, "26":6, "27":0, "28":0, "29":0, "30":1, "31":8, "32":12, "33":3, "34":2, "35":2, "36":0, "37":0, "38":0, "39":0, "40":0, "41":0, "42":0, "43":0, "44":0, "45":0, "46":0, "47":0, "48":0, " 49":0}

Sunucu, web soketi aracılığıyla gönderilen verilere dayalı olarak bir WS2811 LED şeridindeki LED'lerin renklerini değiştirmek için Node RPI WS281x Native kitaplığını (Jeremy Garff'ın WS281X kitaplığını sarar) kullanır.

Adım 8: Sonunda

Image
Image

Web sayfasında yapılan Fast Fourier Transform analizine göre şerit üzerindeki LED'lerin müzikle birlikte renk değiştirdiğini görmelisiniz.

Umarım bundan zevk alırsınız. Bununla ne yapacağını bana bildir!

NOT: Herhangi bir sorununuz varsa

Bu kitaplık ve yerleşik Raspberry Pi audio ikisi de PWM kullandığından birlikte kullanılamazlar.

İle /etc/modprobe.d/snd-blacklist.conf dosyası oluşturarak Broadcom ses çekirdeği modülünü kara listeye almanız gerekebilir.

kara liste snd_bcm2835

Ses cihazı kara listeye alındıktan sonra hala yükleniyorsa, /etc/modules dosyasında da yorum yapmanız gerekebilir. Başsız sistemlerde sesi hdmi üzerinden zorlamanız gerekebilir.

config.txt dosyasını düzenleyin ve şunu ekleyin:

hdmi_force_hotplug=1

hdmi_force_edid_audio=1

Bu değişikliğin geçerli olması için yeniden başlatma gerekiyor

Önerilen: