Talaan ng mga Nilalaman:

Mga Neopixel na Harang sa Ad: 11 Mga Hakbang
Mga Neopixel na Harang sa Ad: 11 Mga Hakbang

Video: Mga Neopixel na Harang sa Ad: 11 Mga Hakbang

Video: Mga Neopixel na Harang sa Ad: 11 Mga Hakbang
Video: MAYBISITA SI KA POBRE TV FOOD TRIP. 2024, Hulyo
Anonim
Mga Neopixel na humaharang sa ad
Mga Neopixel na humaharang sa ad

Nais kong gumawa ng isang simpleng website bilang remote para sa isang strip ng neopixels na konektado sa aking Raspberry Pi zero at patuloy na gamitin ito upang harangan ang mga ad sa aking network gamit ang Pi-Hole. Una Nais ko lamang na magdagdag ng ilang mga leds sa aking silid, ngunit ang lahat ng mga kable natanto ko na wala akong paraan upang maginhawang kontrolin ang mga ito. Kaya't nagpasya akong lumikha ng isang simpleng website na may ilang mga pangunahing pagpipilian sa kontrol gamit ang apache server na naka-set up na ang installer ng Pi-hole. Nagbigay ako ng mga pahintulot sa ugat ng www-data, na kung saan ay isang peligro sa seguridad, kaya dapat mong pronbably gawin ang webserver na hindi magagamit sa labas ng mundo. Nagsimula ito pangunahin para sa aking sariling dokumentasyon at sa paanuman ay naging aking unang itinuro;) Kaya't talagang pahalagahan ko kung maaari mong ituro Kung ang isang bagay ay hindi malinaw o kung ganap kong napalampas ang isang bagay.

Hakbang 1: Mga Ginamit na Kagamitan

  • Raspberry Pi (Nagsimula ako sa isang Pi 2 at pagkatapos ay binago sa WH, ang mga gpio pin ay maaaring naiiba nang kaunti ngunit kung hindi man ay maayos ang bawat modelo)

    • Kung mayroon kang isang RPi nang walang built in na wifi, kapaki-pakinabang din ang isang wifi adapter.
    • Opsyonal na isang kaso para sa raspberry pi
  • 2 Mga male-female jumper wires (halimbawa)
  • Neopixels ws2811 (ginamit ko ito)
  • 1 10W power supply para sa RPi (Gagawa ng isang lumang charger ng telepono)
  • 1 ~ 50W power supply para sa Neopixels (Gumamit ako ng tulad nito, ngunit marahil ang isang mas maliit ay sapat, ngunit kung nais mo ng higit pang mga leds, mayroon kang natitirang silid upang mapalawak.)
  • Plug ng konektor ng babaeng jack (tulad nito)

Hakbang 2: Ihanda ang Operating System

Ihanda ang Operating System
Ihanda ang Operating System

I-download ang pinakabagong bersyon Rasbian mula sa raspberrypi.org Ang lite bersyon ay mabuti para sa proyektong ito, kung balak mong gamitin ang raspberry pi para sa iba pa maaari mo ring isaalang-alang ang pag-install ng buong bersyon sa gui. Pagkatapos ay sinunog ko ang imahen kasama si Etcher. Pagkatapos nito upang matiyak na makakonekta ito sa aking wifi network nagdagdag ako ng wpa_supplicant.conf sa boot Directory ng sd card. Ang nilalaman ng file ay dapat magmukhang ganito:

~~~

ctrl_interface = DIR = / var / run / wpa_supplicant GROUP = netdev update_config = 1

network = {

ssid = "SSID"

psk = "PASSWORD"

key_mgmt = WPA-PSK}

~~~

Upang paganahin ang ssh lumikha ako ng isang file na tinatawag na ssh (nang walang anumang extension) sa parehong direktoryo. Sisiguraduhin nitong makakapag-configure ka ng bawatting mula sa ibang computer sa iyong lan.

Hakbang 3: Pagkonekta sa Neopixels

Pagkonekta sa mga Neopixel
Pagkonekta sa mga Neopixel
Pagkonekta sa mga Neopixel
Pagkonekta sa mga Neopixel

Una kong isinaksak ang suplay ng kuryente sa babaeng konektor ng jack at inilagay ang RPi sa isang kaso. Inikot ko ang ground cable mula sa mga leds (ang asul na cable) at isang lalaki na bahagi ng isang jumper wire sa negatibong bahagi ng jack konektor. Ang kabilang dulo ng wire ng jumper ay kumonekta ako sa isang ground pin sa header ng gpio, gumamit ako ng pin 6 ngunit ang eksaktong mga pin na maaari mong magamit ay nakasalalay sa eksaktong modelo ng RPi na iyong ginagamit.

Pangalawa ay nakakonekta ako sa positibong dulo ng jack konektor ng 5v cable mula sa mga leds (ang pulang cable). Sa aking pinuno ang kanilang ay isang jumper wire konektor sa isang karagdagang ground cable at ang data cable (ang puting cable). Hindi ko nalang pinansin ang karagdagang ground cable, hindi kinakailangan para sa aking pag-set up. Sa data cable kinonekta ko ang isang lalaki sa babaeng jumper wire na may gpio pin 12, muli ang eksaktong pin na dapat mong gamitin ay nakasalalay sa iyong RPi. Pagkatapos ay isinaksak ko ang aking supply ng kuryente para sa RPi at mga pixel. Ang mga leds ay lumiwanag para sa isang maikling sandali, kung ang lahat ay na-wire nang tama.

Hakbang 4: Simulan ang RPi

Simulan ang RPi
Simulan ang RPi

Bukod sa pagbibigay ng RPi isang minuto o higit pa upang mag-boot up, tiningnan ko ang IP adress mula sa raspberry na may nmap. Ngunit ang anumang scanner ng network, ang panel ng impormasyon ng iyong router o sa karamihan ng mga kaso simpleng "raspberrypi.local" ay gagawin. Sa impormasyong iyon nakakonekta ako sa RPi sa pamamagitan ng ssh. Ang default na gumagamit ay pi na may password raspberry. Kaya't iyon ang unang bagay na binago ko gamit ang `passwd` nang direkta pagkatapos ng unang pag-login. Kung nais mong i-access ang iyong pi sa pamamagitan ng ssh mula sa labas ng iyong lokal na network, dapat mong tingnan ang fail2ban at key na pagpapatotoo. Ako mismo ay walang use case para doon, kaya iiwan ko ito sa isang password lamang.

Pangalawa ay na-update ko ang software gamit ang `sudo apt update && sudo apt upgrade -Y`. Kailangan ko rin ng ilang karagdagang software upang maipon ang libery `sudo apt-get install scons swig git python-dev build-essential -Y`. Pagkatapos kinopya ko ang mahusay na libery mula kay Jeremy Garff sa github `git clone https:// github.com / jgarff / rpi_ws281x.git`. Pagkatapos nito ay na-clone ang libery nagpunta ako sa direktoryo ng rpi_ws281x, gumamit ng mga scon at pagkatapos ay na-install ang libary na may `sudo python python / setup.py install`. Sa sawa / halimbawa ay isang magandang demo na "strandtest.py" na may talagang malinis na mga animasyon na maaari mong simulan sa `sudo python python / halimbawa / strandtest.py`.

Hakbang 5: Pi-Hole

Pi-Hole
Pi-Hole

Upang lumikha ng isang malawak na pagdaragdag ng blocker ng network, perpekto ang Pi-Hole. Nag-i-install ito gamit ang `sudo curl -sSL https://install.pi-hole.net | bash`. Ang magandang bahagi ay magse-set-up din ito ng isang web server.

Matapos patakbuhin ang installer gugustuhin mong mag-log in sa admin site ng iyong router at bigyan ang iyong RPi ng isang static IP-adress at i-set up ito bilang DHCP Server. Kung nagtakda ka ng isang mababang oras ng pag-upa kaysa sa iyong PI-hole ay dapat na gumana ngayon.

Hakbang 6: Kontrolin ang mga Ilaw

Kontrolin ang mga Ilaw
Kontrolin ang mga Ilaw
Kontrolin ang mga Ilaw
Kontrolin ang mga Ilaw
Kontrolin ang mga Ilaw
Kontrolin ang mga Ilaw

Ang pinakamadaling paraan upang makontrol ang mga neopixel ay ang mga maliliit na programa ng sawa. Ngunit upang magamit ang bawat isa at sa tuwing nais mong i-on ang mga ilaw ay hindi maginhawa, lalo na sa isang mobile device. Kaya't nagpasya akong gumamit ng isang maliit na website bilang remote control. ITO AY ISANG PANGKALAHATANG RISK, dahil binigyan ko ang pahintulot na root ng www-data nang walang pag-verify ng password. Marahil ay hindi mo dapat gawing magagamit ang site na ito sa labas ng iyong lan.

Upang gawing madali upang pumili sa pagitan ng dashboard ng PI-hole at ng ilaw na remote, binigyan ko ang gumagamit pi sumulat ng access sa / var / www / html na may `sudo chown -R pi / var / www.html` at lumikha ako ng index.php file sa / var / www / html /. Isang simpleng bagay tulad ng:

~~~

Ang index ng butas ng Pi ay malayo

~~~

ay ayos. Pagkatapos ay lumikha ako ng isang bagong folder na tinatawag na mga ilaw upang magkasama ang lahat mula sa mga neopixel. Dito ako lumikha ng colour.py batay sa strandtest.py mula sa libery.

~~~

mula sa neopixel import * # Mag-import ng ilang mga aklatan

import sys

def led (strip, color, start, end): # Lumikha ng isang function na tumawag sa mga leds

para sa ako sa saklaw (pagsisimula, pagtatapos):

strip.setPixelColor (i, kulay)

strip.show ()

BRIGHTNESS = int (sys.argv [4]) # Ang ika-apat na parameter sa commandline ay ang ningning. (1-255)

COUNT = 50 # Ang dami ng leds PIN = 12 # Ang ginamit na pin sa RPi

FREQ_HZ = 800000 # LED frequency signal sa hertz (karaniwang 800khz)

DMA = 5 # DMA channel na gagamitin para sa pagbuo ng signal (subukan 5)

INVERT = Mali # True upang baligtarin ang signal (kapag gumagamit ng NPN antas ng transistor

strip = Adafruit_NeoPixel (COUNT, PIN, FREQ_HZ, DMA, INVERT, BRIGHTNESS)

strip.begin ()

R = int (sys.argv [1]) # Ang dami ng pula ang unang parameter

G = int (sys.argv [2]) # Ang dami ng berde ay ang pangalawang paramter

B = int (sys.argv [3]) # Ang dami ng asul ay ang pangatlong parameter

subukan:

leds (hubad, Kulay (R, G, B), 0, 49) #Simulan ang mga let sa may piniling kulay at ningning.

maliban sa KeyboardInterrupt:

kulay (strip, Kulay (0, 0, 0), 0, 49)

~~~

Kung patakbuhin mo ito gamit ang sudo sa terminal ang mga ilaw ay dapat na magpatuloy sa tinukoy na kulay. Upang mabigyan ang pahintulot ng www-data sudo idinagdag ko ang `www-data ALL = (LAHAT) NOPASSWD: LAHAT)` sa sudoers file (/ etc / sudoers) nang direkta sa ilalim ng root user.

Hakbang 7: I-on ang Mga Ilaw Gamit ang Browser

Pagkatapos ay lumikha ako ng anonther index.php, sa oras na ito sa / ilaw. ~~~

< ?php $R = 100; $G = 100; $B = 100; $BRIGHTNESS = 100; exec("sudo python colour.py $R $G $B $BRIGHTNESS"); ?>

~~~

Kapag bumisita ako ngayon sa raspberrypi.local / lights / index.php magiging maputi ang mga leds. Kahit na ito ay isang magandang pagsisimula, nais kong magkaroon ng kahit ilang mga pindutan sa isang remote.

Hakbang 8: Kontrolin ang Mga Ilaw Mula sa Browser

Lumikha ako ng isang interface na may mga pantal gamit ang isang form na html. Ayokong gawin ang mga bagay na hindi kailangan, kaya lumikha ako ng isang folder na tinatawag na mga template kasama ang aking header, footer at ang pangunahing php code. Ang aking (sa ngayon) panghuli / lights/index.php ay ganito:

~~~

~~~

Upang mapagana ang mga pindutan gumawa ako ng isang template na BasicControl.php. Sa ito ay tinukoy ko ang code na dapat ipatupad kapag ang isang pindutan ay pinindot. Dahil nagustuhan ko ang mga nakakamanghang animasyon na isinama ko rin ang isa. Ang strandtest ay magpapatuloy sa haba ng infinit, kaya gumawa ako ng isa pang pindutan upang ihinto ang mga proces kahit kailan ko gusto.

~~~ <? php

$ I = 100;

$ R = 0;

$ G = 0;

$ B = 0;

kung (mag-isyu ($ _ POST ['strandtest_start'])) {exec ("sudo python strandtest.py"); }

kung hindi man (mag-isyu ($ _ POST ['strandtest_stop'])) {exec ("sudo pkill -9 -f strandtest.py"); }

kung hindi man (mag-isyu ($ _ POST ['pula'])) {$ R = 255; $ G = 0; $ B = 0; exec ("sudo python colour.py $ R $ G $ B $ I"); }

kung hindi man (mag-isyu ($ _ POST ['berde'])) {$ R = 0; $ G = 255; $ B = 0; exec ("sudo python colour.py $ R $ G $ B $ I"); }

kung hindi man (mag-isyu ($ _ POST ['blue'])) {$ R = 0; $ G = 0; $ B = 255; exec ("sudo python colour.py $ R $ G $ B $ I"); }

kung hindi man (mag-isyu ($ _ POST ['puti'])) {$ R = 255; $ G = 255; $ B = 255; exec ("sudo python colour.py $ R $ G $ B $ I"); }

kung hindi man (mag-isyu ($ _ POST ['off'])) {shell_exec ('sudo python off.py'); }

kung hindi man (mag-isyu ($ _ POST ['reboot'])) {shell_exec ('sudo reboot now'); }?>

~~~

Hakbang 9: Lumikha ng isang Template para sa Header at Footer

Ngayon lahat ito ay gumagana, ngunit hindi ito masyadong kaaya-aya tingnan. Matapos ang pag-import ng header at footer lahat ng mga elemento ng site ay magagamit, hindi lamang naka-istilo.

Header.php:

~~~

Mga ilaw

Lampjes

Pangunahing Mga Pagkontrol

Mga Advanced na Kontrol

~~~

At ang footer.php:

~~~

~~~

Hakbang 10: Ang Ilang Css upang Gawin itong Lahat na Mukhang Mas Mabuti

Ang ilang mga Css upang Gawin itong Lahat ng Mukhang Mas Mabuti
Ang ilang mga Css upang Gawin itong Lahat ng Mukhang Mas Mabuti

Tulad ng napansin mo, gumagamit ako ng isang css file upang makontrol ang layout. Upang matiyak na ang aking remote ay magagamit sa mas maliit na mga screen pati na rin gumamit ako ng ilang mga css flexbox na may autowrap.

~~~

/ * Stylesheet para sa interface ng kontrol ng ilaw *

* Nalalapat sa bawat pahina * /

katawan {background-color: f9fcfa; font-family: Arial; margin: 0; }

h1 {kulay: puti; text-align: gitna; }

p {font-family: verdana; laki ng font: 20px; }

h2 {}

/ * Ang header * /

.header {taas: 10%; ipakita: baluktot; bigyang katwiran-nilalaman: flex-start; align-item: gitna; margin: 0px; padding-left: 5%; background: # 3F51B5; align-item: gitna; }

. HeaderLinks {kulay: puti; }

.navbar {display: flex; baluktot: 30%; bigyang katwiran-nilalaman: space-around; kulay sa background: # 3F51B5; kulay puti; }

/ * Ang footer * /

.footer {background-color: # 3F51B5; taas: 10%; text-align: gitna; }

/ * Index.php * /

.buttons {display: flex; baluktot-direksyon: hilera; baluktot-balot: balot; bigyang katwiran-nilalaman: space-pagitan; taas: 80%; align-item: flex-start; }

.buttons_index {padding: 0%; border-width: manipis; border-style: solid; border-color: itim; kulay sa background: # 3949ab; kulay puti; font-family: sans-serif; lapad: 24%; taas: 20%; }

.buttons_index: hover {padding: 0%; border-width: manipis; border-style: solid; border-color: itim; kulay sa background: # 536DFE; kulay puti; font-family: sans-serif; lapad: 24%; taas: 20%; }

~~~

Hakbang 11: Salamat

At yun lang. Ang lahat ay gumagana para sa akin at inaasahan kong gagana ito para sa iyo din kung pipiliin mong subukan ang aking itinuro. Kung sinubukan mong kopyahin ang ilang code, kailangan kong magdagdag ng ilang mga puwang para sa pag-upload dito, kaya't tatanggalin mo ang mga ito bago maging kapaki-pakinabang muli ang code.

Sana nasiyahan ka sa pagbabasa ng lahat. Kung mayroon kang puna, nais kong marinig ito!

Inirerekumendang: