Talaan ng mga Nilalaman:

Disco-pi: 8 Hakbang (na may Mga Larawan)
Disco-pi: 8 Hakbang (na may Mga Larawan)

Video: Disco-pi: 8 Hakbang (na may Mga Larawan)

Video: Disco-pi: 8 Hakbang (na may Mga Larawan)
Video: Siakol - P.I. (Lyric Video) 2024, Nobyembre
Anonim
Disco-pi
Disco-pi

Ipinapakita ng itinuturo na ito kung paano gumamit ng isang Raspberry Pi upang makontrol ang isang kulay na LED strip, batay sa musika na pinatugtog mula sa isang web browser.

Ipinapakita nito kung paano lumikha ng isang pangunahing website gamit ang Node.js sa paglipas ng HTTPS at gumamit ng socket.io sa paglipas ng WSS (Secure Websocket).

Ang website ay may isang solong pahina na kung saan ay may isang napaka-pangunahing layout. Ang webpage ay pumupuno sa isang drop down list na may mga file ng musika, na matatagpuan sa publiko / audio folder sa server. Ang pagpili ng isang pagpipilian sa listahan ay nagpe-play ng file ng musika sa webpage gamit ang HTML 5 audio element. Habang pinapatugtog ang file ng musika, ginagamit ng webpage ang interface ng AudioContext upang pag-aralan ang musika, na pagkatapos ay ipinadala sa server sa isang ligtas na koneksyon sa websocket.

Ang server na tumatakbo sa isang Raspberry Pi ay gumagamit ng library ng Node RPI WS281x Native (pambalot ang library ng WS281X ni Jeremy Garff) upang baguhin ang mga kulay ng LEDs sa isang WS2811 LED strip, batay sa data na ipinadala sa pamamagitan ng websocket.

Ang halimbawa ng code ay matatagpuan dito: disco-pi

Hakbang 1: Kagamitan

  1. Raspberry Pi - Gumamit ako ng isang Raspberry Pi 2B na inilatag ko, ngunit maaari kang makakuha ng isang Raspberry Pi 3 Starter Kit para sa humigit-kumulang CAD 100
  2. WS2811 LED Strip - Naglalaro ako ng ALITOVE 16.4ft 150 Pixels WS2811. Ito ay mayroong isang controller at isang power supply para sa halos CAD 45-50
  3. Barrel Jack Connector - Bumili ako ng isa sa aking lokal na electronics shop, tulad nito. Siguraduhin lamang kung umaangkop sa iyong supply ng kuryente
  4. Jumper Connectors / Wire - Nagkaroon ako ng ilang mga Kable ng konektor sa Babae at ilang 22 Gauge Solid hook up wire na nakahiga

Hakbang 2: Pag-set up ng Raspberry Pi

Operating System

Karaniwan kong ginagamit ang pinakabagong Raspbian build. I-download ang imahe at isulat ito sa SD Card. Kung gumagamit ka ng isang Windows computer, maaari mong gamitin ang Win32 Disk Imager upang isulat ang imahe sa SD Card.

Node.js

I-install ang pinakabagong bersyon ng Node.js. Sa oras ng pagsulat ay gumagamit ako ng 8.9.1

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

sudo apt-get install nodejs

I-install git

sudo apt-get install git

Hakbang 3: Pag-set up ng Halimbawa ng Code

I-clone ang halimbawa ng code

1. Mag-set up ng isang base folder upang mai-install

cd / opt

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

2. I-clone ang halimbawa git repository

git clone https://github.com/haydockjp/disco-pi.git"

o

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

3. I-install ang mga dependance

cd disco-pi

i-install

Maaaring tumagal ito ng 2-3 minuto

Hakbang 4: Lumikha ng isang Sertipikadong SSL Sertipiko sa Sarili

1. Lumikha ng isang pribadong key file

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

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

2. Lumikha ng isang CSR (Hiling sa Pag-sign ng Certificate)

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

Sa puntong ito sasabihan ka para sa ilang impormasyon para sa kahilingan sa sertipiko. Dahil ito ay isang pirmadong nai-sign na sertipiko, nasa sa iyo kung gaano ka tumpak na pinupunan ang mga detalye. Narito ang isang halimbawa

Pangalan ng Bansa (2 titik ng code) [AU]: CA

Pangalan ng Estado o Lalawigan (buong pangalan) [Ilang-Estado]: Pangalan ng Lokal na British Columbia (hal, lungsod) : Pangalan ng Organisasyon ng Vancouver (hal. Kumpanya) [Internet Widgits Pty Ltd]: Disco Pi Pangalan ng Yunit ng Organisasyon (hal. Seksyon) : Karaniwang Pangalan (hal. Server FQDN o IYONG pangalan) : disco-pi Email Address : [email protected] Isang hamon na password : Isang opsyonal na pangalan ng kumpanya :

Sa halimbawang ito, pindutin lamang ang bumalik upang iwanang blangko ang password ng hamon

3. Bumuo ng sertipiko

openssl x509 -req -day 1095 -sa disco-pi-csr.pem -signkey disco-pi-key.pem -out disco-pi-cert.pem

4. Para sa labis na seguridad lilikha rin kami ng isang file na Diffie Hellman Parameter

openssl dhparam -out dh_2048.pem 2048

Maaari itong tumagal ng 15-20 minuto

Hakbang 5: Pagkonekta sa Hardware

Pagkonekta sa Hardware
Pagkonekta sa Hardware
Pagkonekta sa Hardware
Pagkonekta sa Hardware
Pagkonekta sa Hardware
Pagkonekta sa Hardware
Pagkonekta sa Hardware
Pagkonekta sa Hardware

Pagpapatakbo ng LED strip

Ang LED strip ay pinalakas ng 12 volts. Ang Raspberry Pi ay may kakayahang maglabas lamang ng 3.3v o 5v at hindi kayang mag-output kahit saan malapit sa mga amp na kinakailangan upang magmaneho ng napakaraming mga LED.

Mahalaga na huwag ikonekta ang 12 volt na supply ng kuryente sa Raspberry Pi.

Ang aking strip ay mayroon ding mga karagdagang mga wire ng kuryente na konektado sa strip sa alinman sa dulo. Iminumungkahi kong i-tape mo ang mga ito upang hindi sila makipag-ugnay sa alinman sa iyong iba pang mga kagamitan.

Gawin ang mga susunod na hakbang sa iyong sariling panganib. Hindi ako responsibilidad para sa anumang maaaring maging mali.

LED Strip

Ang aking LED strip ay may tatlong mga wire:

PULA - +12 Volts

BLACK - Ground

GREEN - Data

TANDAAN: mayroong isang Din at isang Dout - Data In at Data Out. Tiyaking nagtatrabaho ka sa pagtatapos ng LED strip na nagsasabing Din.

Tinitiyak na ang Barrel Jack ay hindi nakakonekta sa power supply

1. Ikonekta ang pulang kawad mula sa LED strip sa + gilid ng Barrel Jack.

Gumamit ako ng puting 22 gauge hook up wire.

Ilagay ang kawad sa + puwang sa bareng jack at i-tornilyo ito sa lugar.

Itulak ang kabilang dulo ng kawad sa socket sa LED. Tiyaking nakakakonekta ka sa pulang kawad.

2. Ikonekta ang Itim na kawad mula sa LED strip sa - gilid ng Barrel Jack.

Gumamit ako ng isang itim na 22 gauge hook up wire.

Ilagay ang kawad sa - puwang sa bareng jack. Sa puntong ito ilagay din ang male end ng isa sa mga cable ng konektor (brown wire sa larawan) sa parehong butas at i-tornilyo ang dalawa sa lugar.

Itulak ang kabilang dulo ng itim na kawad sa socket sa LED.

Tiyaking kumokonekta ka sa itim na kawad.

3. Ikonekta ang berdeng kawad mula sa LED strip

Dalhin ang isa sa mga femal sa mga lalaking konektor na kable. Sa aking mga larawan ito ang berdeng kawad.

Ilagay ang dulo ng lalaki sa LED socket gamit ang berdeng kawad.

Ito ang data cable.

Raspberry Pi

1. Kunin ang berdeng cable ng konektor at ikonekta ito sa Raspberry Pi GPIO.

Kailangan mong ikonekta ito sa PCM_CLK (Pin 12 / GPIO 18)

2. Kunin ang itim na cable ng konektor at ikonekta ito sa Raspberry Pi GPIO.

Kailangan mong ikonekta ito sa isa sa mga bakuran. Iminumungkahi kong gumamit ka ng pin 14, ngunit maaari mo ring gamitin ang pin 6, 9, 20, 25, 30, 34 o 39.

TANDAAN: upang gumana ito ang mapagkukunan ng LED power at ang Raspberry Pi ay dapat magkaroon ng isang karaniwang batayan. Tandaan din na hindi mo dapat ikonekta ang 12 Volt + (Red wire) sa Raspberry Pi.

LED Power

Hindi mo dapat maiugnay ang iyong 12 volt na supply ng kuryente sa bareng jack

Ang lahat ng mga LED sa iyong LED strip ay dapat na sindihan ng Puti

Hakbang 6: Server Side Code

Pagpapatakbo ng code sa gilid ng server

cd /opt/com.jonhaydock/disco-pi

sudo npm magsimula

Sisimulan nito ang web server at magsisimulang makinig para sa mga kahilingan sa HTTPS at WSS.

Ang default port ay 443, ngunit maaari mo itong i-override sa pamamagitan ng pagtatakda ng variable ng kapaligiran bago simulan ang code. Halimbawa

i-export ang DISCO_PI_PORT = 1443

Ang aking LED strip ay may 150 LEDs. Kinokontrol ang mga ito sa mga pangkat ng tatlo. Nangangahulugan ito na hindi ko makontrol ang bawat LED nang paisa-isa, at kailangan kong magpadala ng sapat na impormasyon upang makontrol ang 50.

Kung ang iyong LED ay may higit pa o mas kaunti maaari mong i-override ang bilang ng mga LED na iyong kinokontrol sa pamamagitan ng pagpasa sa isang parameter sa pagsisimula. Halimbawa, kung makokontrol mo lamang ang 10 LEDs

sudo npm simulan ang 10

Ang pangunahing server code ay matatagpuan sa file ng app.js. Sinisimulan ng file na ito ang HTTPS web server at nagdaragdag din sa socket.io upang makinig para sa mga kahilingan sa websocket sa parehong port.

Upang ma-access ang website, dapat mong buksan ang isang web browser sa iyong pangunahing computer (Sinubukan ko lang ito sa Chrome) at gamitin ang IP address ng Raspberry Pi, hal.

10.0.1.2/

Maaari mong malaman ang iyong IP address mula sa linya ng utos ng Raspberry Pi.

ifconfig

Maghahatid ang webserver ng anumang nilalaman sa ilalim ng pampublikong folder. Nagde-default ito upang ipakita ang pahina ng index.html.

Mayroon itong isang dulo ng API - / api / audio. Ang puntong ito ay naghahanap para sa anumang mga file sa ilalim ng publiko / audio folder at ibabalik ang listahan. Halimbawa

["GYAKO.mp3", "Havana (feat. Young Thug).mp3", "Queen_Bohemian_Rhapsody.mp3", "Set It All Free.mp3", "This Is What You Came For (feat. Rihanna).mp3"]

Upang magdagdag ng musika bilang isang pagpipilian, kopyahin ang mga file sa folder na ito. Personal kong ginagamit ang Filezilla sa paglipas ng ssh. Ang folder na nais mong idagdag ang mga file ay /opt/com.jonhaydock/disco-pi/public/audio

Hakbang 7: Website Code

Code ng Website
Code ng Website

Kapag na-hit mo ang website dapat mong makita ang isang bagay tulad nito.

Kung nakakita ka ng babala sa seguridad ito ay dahil gumagamit kami ng isang self-sign na sertipiko ng SSL. Maaari mo itong balewalain o idagdag ito bilang isang pagbubukod.

Sa pagpili ng isang pangalan ng file, ang mapagkukunan para sa HTML 5 audio element. itatakda sa file na iyon. Kapag handa na, magsisimulang tumugtog ang musika. Kapag natapos na ang kanta ay titigil ang musika.

Kung pipiliin mo ang opsyong Wala, ang musika ay titigil sa pagtugtog.

Habang pinapatugtog ang file ng musika, ginagamit ng webpage ang interface ng AudioContext upang pag-aralan ang musika, na pagkatapos ay ipinadala sa server sa isang ligtas na koneksyon sa websocket.

Ang mensahe ay ang uri na ang socket.io sa server ay na-set up upang makinig para sa "ws2811". Naglalaman ito ng isang hanay ng 50 mga elemento, na nasa pagitan ng 0 at 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}

Gumagamit ang server ng Node RPI WS281x Native library (pambalot na aklatan ni Jeremy Garff's WS281X) upang baguhin ang mga kulay ng LEDs sa isang WS2811 LED strip, batay sa data na ipinadala sa pamamagitan ng websocket.

Hakbang 8: Panghuli

Image
Image

Dapat mong makita ang mga LED sa kulay ng pagbabago ng strip sa musika, batay sa pag-aaral ng Mabilis na Fourier Transform na tapos na sa web page.

Inaasahan kong nasiyahan ka dito. Ipaalam sa akin kung ano ang ginagawa mo dito!

TANDAAN: Kung mayroon kang anumang mga isyu

Dahil ang library na ito at ang onboard na Raspberry Pi audioboth ay gumagamit ng PWM, hindi sila maaaring magamit nang magkasama.

Maaaring kailanganin mong i-blacklist ang Broadcom audio kernel module sa pamamagitan ng paglikha ng isang file /etc/modprobe.d/snd-blacklist.conf kasama ang

blacklist snd_bcm2835

Kung ang aparato ng audio ay naglo-load pa rin pagkatapos ng blacklisting, maaaring kailangan mo ring puna ito sa file na / etc / modules. Sa mga system na walang ulo ay maaaring kailanganin mo ring pilitin ang audio sa pamamagitan ng HDMI

I-edit ang config.txt at idagdag:

hdmi_force_hotplug = 1

hdmi_force_edid_audio = 1

Kinakailangan ang isang pag-reboot upang magkabisa ang pagbabagong ito

Inirerekumendang: