Daftar Isi:

Disko-pi: 8 Langkah (dengan Gambar)
Disko-pi: 8 Langkah (dengan Gambar)

Video: Disko-pi: 8 Langkah (dengan Gambar)

Video: Disko-pi: 8 Langkah (dengan Gambar)
Video: BATU API 2024, Juli
Anonim
Disko-pi
Disko-pi

Instruksi ini menunjukkan cara menggunakan Raspberry Pi untuk mengontrol strip LED berwarna, berdasarkan musik yang diputar dari browser web.

Ini menunjukkan cara membuat situs web dasar menggunakan Node.js melalui HTTPS dan menggunakan socket.io melalui WSS (Secure Websocket).

Situs web ini memiliki satu halaman yang memiliki tata letak yang sangat mendasar. Halaman web mengisi daftar drop-down dengan file musik, yang terletak di folder publik/audio di server. Memilih opsi dalam daftar akan memutar file musik di halaman web menggunakan elemen audio HTML 5. Saat memutar file musik, halaman web menggunakan antarmuka AudioContext untuk menganalisis musik, yang kemudian dikirim ke server melalui koneksi soket web yang aman.

Server yang berjalan pada Raspberry Pi menggunakan Node RPI WS281x Native library (membungkus library WS281X Jeremy Garff) untuk mengubah warna LED pada strip LED WS2811, berdasarkan data yang dikirim melalui websocket.

Contoh kode dapat ditemukan di sini: disco-pi

Langkah 1: Peralatan

  1. Raspberry Pi - Saya menggunakan Raspberry Pi 2B yang saya miliki, tetapi Anda bisa mendapatkan Raspberry Pi 3 Starter Kit dengan harga sekitar CAD 100
  2. WS2811 LED Strip - Saya bermain dengan ALITOVE 16.4ft 150 Pixels WS2811. Ini dilengkapi dengan pengontrol dan catu daya sekitar CAD 45-50
  3. Konektor Barrel Jack - Saya membeli satu dari toko elektronik lokal saya, kira-kira seperti ini. Pastikan jika cocok dengan catu daya Anda
  4. Konektor / Kawat Jumper - Saya memiliki beberapa kabel konektor Female to Male dan beberapa kabel pengait 22 Gauge Solid tergeletak di sekitar

Langkah 2: Menyiapkan Raspberry Pi

Sistem operasi

Saya biasanya menggunakan Raspbian build terbaru. Unduh gambar dan tulis ke Kartu SD. Jika Anda menggunakan komputer Windows, Anda dapat menggunakan Win32 Disk Imager untuk menulis gambar ke Kartu SD.

Node.js

Instal Node.js versi terbaru. Pada saat penulisan saya menggunakan 8.9.1

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

sudo apt-get install nodejs

Instal git

sudo apt-get install git

Langkah 3: Menyiapkan Kode Contoh

Kloning kode contoh

1. Siapkan folder dasar untuk menginstal ke

cd /opt

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

2. Kloning contoh repositori git

git clone

atau

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

3. Instal dependensi

cd disko-pi

instal npm

Ini mungkin memakan waktu 2-3 menit

Langkah 4: Buat Sertifikat SSL yang Ditandatangani Sendiri

1. Buat file kunci pribadi

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

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

2. Buat CSR (Permintaan Penandatanganan Sertifikat)

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

Pada titik ini Anda akan diminta untuk beberapa informasi untuk permintaan sertifikat. Karena ini adalah sertifikat yang ditandatangani sendiri, terserah Anda seberapa akurat Anda mengisi detailnya. Berikut ini contohnya

Nama Negara (kode 2 huruf) [AU]:CA

Nama Negara Bagian atau Provinsi (nama lengkap) [Some-State]:Nama Lokalitas British Columbia (misalnya, kota) :Nama Organisasi Vancouver (misalnya, perusahaan) [Internet Widgits Pty Ltd]:Nama Unit Organisasi Disko Pi (misalnya, bagian) : Nama Umum (mis. server FQDN atau nama ANDA) :disco-pi Alamat Email :[email protected] Kata sandi tantangan : Nama perusahaan opsional :

Dalam contoh ini, cukup tekan kembali untuk mengosongkan kata sandi tantangan

3. Hasilkan sertifikat

openssl x509 -req -days 1095 -in disco-pi-csr.pem -signkey disco-pi-key.pem -out disco-pi-cert.pem

4. Untuk keamanan ekstra, kami juga akan membuat file Parameter Diffie Hellman

openssl dhparam -out dh_2048.pem 2048

Ini bisa memakan waktu 15-20 menit

Langkah 5: Menghubungkan Perangkat Keras

Menghubungkan Perangkat Keras
Menghubungkan Perangkat Keras
Menghubungkan Perangkat Keras
Menghubungkan Perangkat Keras
Menghubungkan Perangkat Keras
Menghubungkan Perangkat Keras
Menghubungkan Perangkat Keras
Menghubungkan Perangkat Keras

Memberi daya pada strip LED

Strip LED ditenagai oleh 12 volt. Raspberry Pi hanya mampu menghasilkan keluaran 3.3v atau 5v dan tidak mampu menghasilkan keluaran mendekati ampli yang dibutuhkan untuk menggerakkan begitu banyak LED.

Penting untuk tidak menghubungkan catu daya 12 volt ke Raspberry Pi.

Strip saya juga memiliki kabel daya tambahan yang terhubung ke strip di kedua ujungnya. Saya sarankan Anda merekam ini sehingga mereka tidak melakukan kontak dengan peralatan Anda yang lain.

Lakukan langkah selanjutnya dengan risiko Anda sendiri. Saya tidak bertanggung jawab atas apa pun yang mungkin salah.

Jalur LED

Strip LED saya memiliki tiga kabel:

MERAH - +12 Volt

HITAM - Tanah

HIJAU - Data

CATATAN: ada Din dan Dout - Data Masuk dan Data Keluar. Pastikan Anda bekerja dengan ujung strip LED yang bertuliskan Din.

Memastikan bahwa Barrel Jack tidak terhubung ke catu daya

1. Hubungkan kabel Merah dari strip LED ke sisi + Barrel Jack.

Saya menggunakan kawat pengait 22 gauge putih.

Tempatkan kabel ke dalam slot + di jack barel dan kencangkan di tempatnya.

Dorong ujung kabel yang lain ke soket pada LED. Pastikan Anda terhubung dengan kabel merah.

2. Hubungkan kabel Hitam dari strip LED ke - sisi Barrel Jack.

Saya menggunakan kabel pengait 22 gauge hitam.

Tempatkan kabel ke dalam slot - di jack barel. Pada titik ini juga tempatkan ujung jantan dari salah satu kabel konektor (kawat coklat di foto) ke dalam lubang yang sama dan kencangkan keduanya pada tempatnya.

Dorong ujung lain dari kabel hitam ke dalam soket pada LED.

Pastikan Anda terhubung dengan kabel hitam.

3. Hubungkan kabel hijau dari strip LED

Ambil salah satu kabel konektor femal ke male. Dalam foto saya ini adalah kabel hijau.

Tempatkan ujung jantan ke dalam soket LED dengan kabel hijau.

Ini kabel datanya.

Raspberry Pi

1. Ambil kabel konektor hijau dan sambungkan ke Raspberry Pi GPIO.

Anda perlu menghubungkannya ke PCM_CLK (Pin 12 / GPIO 18)

2. Ambil kabel konektor hitam dan sambungkan ke Raspberry Pi GPIO.

Anda harus menghubungkannya ke salah satu dasar. Saya sarankan Anda menggunakan pin 14, tetapi Anda juga bisa menggunakan pin 6, 9, 20, 25, 30, 34 atau 39.

CATATAN: agar ini berfungsi, sumber daya LED dan Raspberry Pi harus memiliki kesamaan. Perhatikan juga bahwa Anda tidak boleh menghubungkan 12 Volt + (kabel Merah) ke Raspberry Pi.

Daya LED

Anda seharusnya tidak dapat menghubungkan catu daya 12 volt Anda ke jack barel

Semua LED pada strip LED Anda sekarang harus menyala PUTIH

Langkah 6: Kode Sisi Server

Menjalankan kode sisi server

cd /opt/com.jonhaydock/disco-pi

sudo npm mulai

Ini akan memulai server web dan mulai mendengarkan permintaan HTTPS dan WSS.

Port default adalah 443, tetapi Anda dapat menggantinya dengan mengatur variabel lingkungan sebelum memulai kode. Sebagai contoh

ekspor DISCO_PI_PORT=1443

Strip LED saya memiliki 150 LED. Ini dikendalikan dalam kelompok bertiga. Ini berarti bahwa saya tidak dapat mengontrol setiap LED satu per satu, dan saya perlu mengirimkan informasi yang cukup untuk mengontrol 50.

Jika LED Anda memiliki lebih atau kurang, Anda dapat mengganti jumlah LED yang Anda kendalikan dengan meneruskan parameter ke start up. Misalnya, jika Anda hanya dapat mengontrol 10 LED

sudo npm mulai 10

Kode server utama dapat ditemukan di file app.js. File ini memulai server web HTTPS dan juga menambahkan socket.io untuk mendengarkan permintaan websocket pada port yang sama.

Untuk mengakses situs web, Anda harus membuka browser web di komputer utama Anda (saya hanya menguji ini di Chrome) dan menggunakan alamat IP Raspberry Pi, mis.

10.0.1.2/

Anda dapat mengetahui alamat IP Anda dari baris perintah Raspberry Pi.

ifconfig

Server web akan menyajikan konten apa pun di bawah folder publik. Default untuk menampilkan halaman index.html.

Ini memiliki satu titik akhir API - /api/audio. Titik akhir ini mencari file apa pun di bawah folder publik/audio dan mengembalikan daftar. Sebagai contoh

["GYAKO.mp3", "Havana (feat. Young Thug).mp3", "Queen_Bohemian_Rhapsody.mp3", "Set It All Free.mp3", "Inilah Tujuanmu (feat. Rihanna).mp3"]

Untuk menambahkan musik sebagai opsi, salin file ke folder ini. Saya pribadi menggunakan Filezilla melalui ssh. Folder tempat Anda ingin menambahkan file adalah /opt/com.jonhaydock/disco-pi/public/audio

Langkah 7: Kode Situs Web

Kode Situs Web
Kode Situs Web

Ketika Anda menekan situs web Anda akan melihat sesuatu seperti ini.

Jika Anda melihat peringatan keamanan, ini karena kami menggunakan sertifikat SSL yang ditandatangani sendiri. Anda dapat mengabaikannya atau menambahkannya sebagai pengecualian.

Saat memilih nama file, sumber untuk elemen audio HTML 5. akan diatur ke file itu. Setelah siap, musik akan mulai diputar. Setelah lagu selesai musik akan berhenti.

Jika Anda memilih opsi Tidak Ada, musik akan berhenti diputar.

Saat memutar file musik, halaman web menggunakan antarmuka AudioContext untuk menganalisis musik, yang kemudian dikirim ke server melalui koneksi soket web yang aman.

Pesannya adalah jenis socket.io di server yang telah diatur untuk mendengarkan "ws2811". Ini berisi array 50 elemen, yang antara 0 dan 255.

"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}

Server menggunakan pustaka Node RPI WS281x Native (membungkus pustaka WS281X Jeremy Garff) untuk mengubah warna LED pada strip LED WS2811, berdasarkan data yang dikirim melalui soket web.

Langkah 8: Akhirnya

Image
Image

Anda akan melihat LED pada strip berubah warna dengan musik, berdasarkan analisis Fast Fourier Transform yang dilakukan di halaman web.

Saya harap Anda menikmati ini. Beri tahu saya apa yang Anda lakukan dengannya!

CATATAN: Jika Anda memiliki masalah

Karena library ini dan audio Raspberry Pi onboard keduanya menggunakan PWM, keduanya tidak dapat digunakan bersama-sama.

Anda mungkin perlu memasukkan modul kernel audio Broadcom ke daftar hitam dengan membuat file /etc/modprobe.d/snd-blacklist.conf dengan

daftar hitam snd_bcm2835

Jika perangkat audio masih memuat setelah masuk daftar hitam, Anda mungkin juga perlu mengomentarinya di file /etc/modules. Pada sistem tanpa kepala, Anda mungkin juga perlu memaksakan audio melalui HDMI

Edit config.txt dan tambahkan:

HDMI_force_hotplug=1

hdmi_force_edid_audio=1

Reboot diperlukan agar perubahan ini berlaku

Direkomendasikan: