Sadržaj:

Neopikseli za blokiranje oglasa: 11 koraka
Neopikseli za blokiranje oglasa: 11 koraka

Video: Neopikseli za blokiranje oglasa: 11 koraka

Video: Neopikseli za blokiranje oglasa: 11 koraka
Video: Крушение Подводной Атомной лодки USS Thresher 2024, Juli
Anonim
Neopikseli za blokiranje oglasa
Neopikseli za blokiranje oglasa

Htio sam napraviti jednostavnu web stranicu udaljenu za traku neopiksela povezanu s mojom Raspberry Pi zero i nastaviti je koristiti za blokiranje oglasa na svojoj mreži pomoću Pi-Hole-a. Prvo sam samo htjela dodati neke LED diode u svoju sobu, ali oživljavajući sve shvatila sam da nemam načina da ih prikladno kontroliram. Zato sam odlučio stvoriti jednostavnu web stranicu s nekim osnovnim opcijama kontrole koristeći apache poslužitelj koji je instalacijski program Pi-hole već postavio. Dodijelio sam root-dozvole www-data, što predstavlja sigurnosni rizik, pa biste vjerojatno trebali učiniti web server nedostupnim vanjskom svijetu. Ovo je počelo uglavnom zbog moje vlastite dokumentacije, a onda je nekako postalo moj prvi instruktor;) Stoga bih bio jako zahvalan ako biste istakli ako je nešto nejasno ili ako sam nešto potpuno propustio.

Korak 1: Korišteni materijali

  • Raspberry Pi (počeo sam na Pi 2, a zatim promijenio na WH, gpio pinovi mogu biti malo drugačiji, ali inače je svaki model u redu)

    • Ako imate RPi bez ugrađenog WiFi -ja, koristan je i WiFi adapter.
    • Po želji futrola za malinu pi
  • 2 muško-ženske kratkospojne žice (na primjer)
  • Neopikseli ws2811 (koristio sam ove)
  • 1 napajanje od 10 W za RPi (može i stari punjač za telefon)
  • Napajanje od 1 ~ 50 W za neopiksele (koristio sam jedan ovakav, ali vjerovatno bi mi bio dovoljan manji, ali ako želite više LED dioda, imate još prostora za proširenje.)
  • Utikač ženskog priključka (ovako)

Korak 2: Pripremite operativni sistem

Pripremite operativni sistem
Pripremite operativni sistem

Preuzmite najnoviju verziju Rasbian sa raspberrypi.org Lite verzija je dobra za ovaj projekat, ako planirate da koristite malinu pi i za nešto drugo, razmislite o instaliranju pune verzije sa gui. Zatim sam snimio sliku Etcherom. Nakon toga, kako bih bio siguran da će se povezati s mojom WiFi mrežom, dodao sam wpa_supplicant.conf u direktorij za pokretanje sd kartice. Sadržaj datoteke trebao bi izgledati ovako:

~~~

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

mreža = {

ssid = "SSID"

psk = "LOZINKA"

key_mgmt = WPA-PSK}

~~~

Da bih omogućio ssh, stvorio sam datoteku pod nazivom ssh (bez ikakvih ekstenzija) u istom direktoriju. Ovo će vam omogućiti da konfigurirate sve sa drugog računara na svom LAN -u.

Korak 3: Povezivanje neopiksela

Povezivanje neopiksela
Povezivanje neopiksela
Povezivanje neopiksela
Povezivanje neopiksela

Prvo sam priključio napajanje u ženski konektor i stavio RPi u futrolu. Odvrnuo sam kabel za uzemljenje s LED dioda (plavi kabel) i muške strane kratkospojnika na negativnoj strani konektora za utičnicu. Drugi kraj kratkospojnika sam spojio na pin za uzemljenje na gpio zaglavlju, koristio sam pin 6, ali tačne pinove koje možete koristiti ovisit će o modelu RPi koji koristite.

Drugo, spojio sam na pozitivni kraj utičnice 5v kabel sa LED dioda (crveni kabel). Na mojoj LED traci bio je konektor za kratkospojnu žicu na dodatnom uzemljeničkom kabelu i podatkovni kabel (bijeli kabel). Zanemario sam dodatni kabel za uzemljenje, nije mi bio potreban za postavljanje. Na podatkovnom kablu spojio sam mušku na žensku kratkospojnu žicu s gpio iglom 12, opet tačan pin koji trebate koristiti ovisi o vašem RPi. Zatim sam priključio napajanje za RPi i piksele. LED diode su zasvijetlile nakratko, ako je sve ispravno ožičeno.

Korak 4: Pokrenite RPi

Pokrenite RPi
Pokrenite RPi

Nakon što sam RPi -u dao minutu za pokretanje, potražio sam IP adresu od maline sa nmap -om. No, bilo koji mrežni skener, informacijska ploča vašeg usmjerivača ili u većini slučajeva jednostavno "raspberrypi.local" će biti dovoljni. S tim podacima sam se povezao s RPi -om putem ssh -a. Zadani korisnik je pi sa lozinkom malina. To je prvo što sam promijenio koristeći `passwd` neposredno nakon prvog prijavljivanja. Ako želite svom pi pristupiti putem ssh -a izvan vaše lokalne mreže, trebali biste provjeriti fail2ban i provjeru autentičnosti ključa. Ja lično nemam slučaj upotrebe za to, pa ću ostaviti samo lozinku.

Drugo, ažurirao sam softver koristeći `sudo apt update && sudo apt upgrade -Y`. Trebao mi je i dodatni softver za kompajliranje libery `sudo apt-get install scons swig git python-dev build-essential -Y`. Zatim sam kopirao izvrsnu slobodu od Jeremyja Garffa na github `git clone https:// github.com/jgarff/rpi_ws281x.git`. Nakon toga je sloboda klonirana, otišao sam u direktorij rpi_ws281x, upotrijebio scons i zatim instalirao biblioteku sa `sudo python python/setup.py install`. U pythonu/examples je lijepa demonstracija "strandtest.py" sa zaista urednim animacijama koje možete započeti sa `sudo python python/examples/strandtest.py`.

Korak 5: Pi-Hole

Pi-Hole
Pi-Hole

Za stvaranje blokatora dodavanja na čitavoj mreži, Pi-Hole je savršen. Instalira se samo `sudo curl -sSL https://install.pi-hole.net | bash`. Lijepo je to što će postaviti i web server.

Nakon pokretanja instalacijskog programa, htjet ćete se prijaviti na administratorsko mjesto vašeg usmjerivača i svom RPi-u dati statičku IP adresu i postaviti ga kao DHCP poslužitelj. Ako ste postavili kratko vrijeme najma, vaša bi PI rupa sada trebala raditi.

Korak 6: Upravljajte svjetlima

Upravljajte svjetlima
Upravljajte svjetlima
Upravljajte svjetlima
Upravljajte svjetlima
Upravljajte svjetlima
Upravljajte svjetlima

Najlakši način za kontrolu neopiksela je pomoću malih python programa. No, koristiti ssh svaki put kad želite upaliti svjetlo nije zgodno, posebno na mobilnom uređaju. Stoga sam odlučio koristiti malu web stranicu kao daljinski upravljač. OVO JE SIGURNOSNI RIZIK, jer sam dao root dozvolu www-data bez provjere lozinke. Vjerovatno ne biste trebali učiniti ovu web lokaciju dostupnom izvan vašeg lanca.

Da bih olakšao izbor između nadzorne ploče PI -rupe i svjetlosnog daljinskog upravljača, korisniku pi sam dao pristup pisanju u/var/www/html sa `sudo chown -R pi/var/www.html` i stvorio sam index.php datoteka u/var/www/html/. Nešto jednostavno poput:

~~~

Index Pi rupa Svjetlosni daljinski

~~~

je u redu. Zatim sam stvorio novu mapu koja se zove svjetla kako bi sve od neopiksela bilo zajedno. Ovdje sam stvorio colour.py na osnovu strandtest.py iz slobode.

~~~

from neopixel import * # Uvezite neke biblioteke

import sys

def led (traka, boja, početak, kraj): # Kreirajte funkciju za pozivanje LED dioda

za i u dometu (početak, kraj):

strip.setPixelColor (i, boja)

strip.show ()

BRIGHTNESS = int (sys.argv [4]) # Četvrti parametar na komandnoj liniji će biti svjetlina. (1-255)

COUNT = 50 # Količina LED dioda PIN = 12 # Pin koji se koristi na RPi

FREQ_HZ = 800000 # Frekvencija LED signala u hercima (obično 800 kHz)

DMA = 5 # DMA kanal za generiranje signala (probajte 5)

INVERT = False # Tačno za invertiranje signala (kada se koristi nivo NPN tranzistora

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

strip.begin ()

R = int (sys.argv [1]) # Količina crvene boje je prvi parametar

G = int (sys.argv [2]) # Količina zelene boje je drugi parametar

B = int (sys.argv [3]) # Količina plave boje je treći parametar

probaj:

LED diode (traka, boja (R, G, B), 0, 49) #Pokrenuće dozvole sa izabranom bojom i osvetljenošću.

osim KeyboardInterrupt:

boja (traka, boja (0, 0, 0), 0, 49)

~~~

Ako ovo pokrenete sa sudo na terminalu, svjetla bi se trebala uključiti u navedenoj boji. Da bih dao sudo dozvolu www-data, dodao sam `www-data ALL = (ALL) NOPASSWD: ALL)` u sudoers datoteku (/etc/sudoers) direktno ispod root korisnika.

Korak 7: Uključite svjetla pomoću preglednika

Zatim sam stvorio još jedan index.php, ovaj put u /lights. ~~~

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

~~~

Kad sad posjetim raspberrypi.local/lights/index.php LED diode će postati bijele. Iako je ovo lijep početak, volio bih imati barem neke tipke na daljinskom upravljaču.

Korak 8: Upravljajte svjetlima iz preglednika

Napravio sam sučelje s buttensima koristeći html obrazac. Ne volim raditi stvari koje nisu potrebne, pa sam stvorio fasciklu pod nazivom predlošci sa mojim zaglavljem, podnožjem i glavnim php kodom. Moj (za sada) final /lights/index.php izgleda ovako:

~~~

~~~

Da bi tasteri radili, napravio sam predložak BasicControl.php. U ovome sam naveo kôd koji treba izvršiti kada se pritisne dugme. Budući da su mi se svidjele najjednostavnije animacije, uključio sam i tu. Najbrži će se nastaviti beskonačno dugo, pa sam napravio još jedno dugme za zaustavljanje procesa kad god želim.

~~~ <? php

$ I = 100;

$ R = 0;

$ G = 0;

$ B = 0;

if (isset ($ _ POST ['strandtest_start']))) {exec ("sudo python strandtest.py"); }

else if (isset ($ _ POST ['strandtest_stop']))) {exec ("sudo pkill -9 -f strandtest.py"); }

else if (isset ($ _ POST ['red']))) {$ R = 255; $ G = 0; $ B = 0; exec ("sudo python colour.py $ R $ G $ B $ I"); }

else if (isset ($ _ POST ['green']))) {$ R = 0; $ G = 255; $ B = 0; exec ("sudo python colour.py $ R $ G $ B $ I"); }

else if (isset ($ _ POST ['blue']))) {$ R = 0; $ G = 0; $ B = 255; exec ("sudo python colour.py $ R $ G $ B $ I"); }

else if (isset ($ _ POST ['white']))) {$ R = 255; $ G = 255; $ B = 255; exec ("sudo python colour.py $ R $ G $ B $ I"); }

else if (isset ($ _ POST ['off']))) {shell_exec ('sudo python off.py'); }

else if (isset ($ _ POST ['reboot']))) {shell_exec ('sudo reboot now'); }?>

~~~

Korak 9: Kreirajte predložak zaglavlja i podnožja

Sada sve funkcionira, ali nije previše ugodno za pogledati. Nakon uvoza zaglavlja i podnožja svi elementi web stranice su dostupni, samo ne stilizirani.

Header.php:

~~~

Svjetla

Lampjes

Osnovne kontrole

Napredne kontrole

~~~

I footer.php:

~~~

~~~

Korak 10: Malo CSS -a kako bi sve izgledalo bolje

Neki CSS -i kako bi sve izgledalo bolje
Neki CSS -i kako bi sve izgledalo bolje

Kao što ste možda primijetili, koristim css datoteku za kontrolu izgleda. Da bih bio siguran da je moj daljinski upravljač upotrebljiv i na manjim ekranima, koristio sam neke css flexboxe sa automatskim premotavanjem.

~~~

/ * Tabela stilova za interfejs za kontrolu svetla *

* Primjenjuje se na svakoj stranici */

body {background-color: f9fcfa; porodica fontova: Arial; marža: 0; }

h1 {boja: bijela; poravnavanje teksta: centar; }

p {font-family: verdana; font-veličina: 20px; }

h2 {}

/ * Zaglavlje */

.zaglavlje {visina: 10%; prikaz: flex; justify-content: flex-start; align-items: center; margina: 0px; padding-left: 5%; pozadina:#3F51B5; align-items: center; }

. Vezevi za glave {boja: bijela; }

.navbar {display: flex; fleks: 30%; justify-content: prostor oko; boja pozadine: #3F51B5; boja: bijela; }

/ * Podnožje */

.footer {background-color: #3F51B5; visina: 10%; poravnavanje teksta: centar; }

/ * Index.php */

. tasteri {display: flex; smjer savijanja: red; flex-wrap: wrap; justify-content: razmak između; visina: 80%; align-items: flex-start; }

.buttons_index {padding: 0%; širina ivice: tanka; rubni stil: čvrst; bordura: crna; boja pozadine: #3949ab; boja: bijela; font-family: sans-serif; širina: 24%; visina: 20%; }

.buttons_index: hover {padding: 0%; širina ivice: tanka; rubni stil: čvrst; bordura: crna; boja pozadine: #536DFE; boja: bijela; font-family: sans-serif; širina: 24%; visina: 20%; }

~~~

Korak 11: Hvala vam

I to je to. Sve radi za mene i nadam se da će uspjeti i za vas ako odaberete isprobati moje upute. Ako ste pokušali kopirati neki kôd, morao sam dodati nekoliko razmaka za postavljanje ovdje, pa ćete ih morati izbrisati prije nego kôd ponovo postane koristan.

Nadam se da ste uživali čitajući sve. Ako imate povratne informacije, volio bih ih čuti!

Preporučuje se: