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, Srpanj
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-Holea. Prvo sam samo htjela dodati neke LED diode u svoju sobu, ali oživljavajući sve shvatila sam da ih nemam načina prikladno kontrolirati. Stoga sam odlučio stvoriti jednostavnu web stranicu s nekim osnovnim opcijama upravljanja pomoću apache poslužitelja koji je instalacijski program Pi-hole već postavio. Odobrio sam root-dopuštenja www-data, što predstavlja sigurnosni rizik, pa biste vjerojatno trebali učiniti web poslužitelj nedostupnim vanjskom svijetu. Ovo je počelo uglavnom za moju vlastitu dokumentaciju i onda je nekako postalo moj prvi instruktor;) Stoga bih bio jako zahvalan ako biste istaknuli 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 vjerojatno bi bio dovoljan manji, ali ako želite više LED dioda, imate još prostora za proširenje.)
  • Utikač ženskog priključka (ovako)

Korak 2: Pripremite operacijski sustav

Pripremite operativni sustav
Pripremite operativni sustav

Preuzmite najnoviju verziju Rasbian s raspberrypi.org Lite verzija je dobra za ovaj projekt, ako namjeravate koristiti malinu pi i za nešto drugo, razmislite o instaliranju pune verzije s gui -jem. Zatim sam sliku snimio 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 ssh (bez ikakvog proširenja) u istom direktoriju. To će vam omogućiti da konfigurirate sve s drugog računala 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 torbicu. Odvrnuo sam kabel za uzemljenje s LED dioda (plavi kabel) i muške strane kratkospojne žice na negativnoj strani priključka utičnice. Drugi kraj žice kratkospojnika sam spojio sa iglom za uzemljenje na gpio zaglavlju, koristio sam pin 6, ali točne iglice koje možete koristiti ovisit će o točnom modelu RPi koji koristite.

Drugo, spojio sam na pozitivni kraj utičnice 5v kabel s LED dioda (crveni kabel). Na mojoj LED diodi bio je konektor za kratkospojnu žicu na dodatnom kabelu za uzemljenje i podatkovni kabel (bijeli kabel). Zanemario sam dodatni kabel za uzemljenje, bio je nepotreban za moje postavljanje. Na podatkovni kabel spojio sam mušku na žensku kratkospojnu žicu s gpio iglom 12, opet točan pin koji biste trebali 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 -ju dao minutu za pokretanje, potražio sam IP adresu od maline s nmapom. No, bilo koji mrežni skener, informacijska ploča vašeg usmjerivača ili u većini slučajeva jednostavno "raspberrypi.local" će poslužiti. S tim podacima sam se povezao s RPi -om putem ssh -a. Zadani korisnik je pi sa lozinkom malina. Dakle, to je prvo što sam promijenio koristeći `passwd` neposredno nakon prve prijave. 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 osobno 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 sastavljanje 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 sloboda je 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 lijep demo "strandtest.py" sa stvarno 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 poslužitelj.

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 programa za python. No, koristiti ssh svaki put kad želite upaliti svjetlo je nezgodno, osobito na mobilnom uređaju. Stoga sam odlučio koristiti malu web stranicu kao daljinski upravljač. OVO JE SIGURNOSNI RIZIK, jer sam dao root dopuštenje www-data bez provjere lozinke. Vjerojatno ne biste trebali učiniti ovu web lokaciju dostupnom izvan vašeg lanca.

Kako bih olakšao odabir između nadzorne ploče PI -rupe i svjetlosnog daljinskog upravljača, dao sam korisniku pi pristup za pisanje 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

~~~

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

~~~

from neopixel import * # Uvezite neke knjižnice

import sys

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

za ja u rasponu (početak, kraj):

strip.setPixelColor (i, boja)

strip.show ()

BRIGHTNESS = int (sys.argv [4]) # Četvrti parametar u naredbenom retku bit će 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 # True za invertiranje signala (kada se koristi razina 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

probati:

LED diode (trake, boje (R, G, B), 0, 49) #Pokrenuće dozvole s odabranom bojom i svjetlinom.

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. Kako bih dao sudo dopuštenje www-data, dodao sam `www-data ALL = (ALL) NOPASSWD: ALL)` u datoteku sudoers (/etc/sudoers) izravno pod root korisnikom.

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 pobijeliti. Iako je ovo lijep početak, volim imati barem neke gumbe 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 mapu pod nazivom predlošci sa svojim zaglavljem, podnožjem i glavnim php kodom. Moj (za sada) konačni /lights/index.php izgleda ovako:

~~~

~~~

Kako bi gumbi radili, napravio sam predložak BasicControl.php. Ovdje sam naveo kôd koji bi trebao biti izveden kada se pritisne tipka. Budući da su mi se svidjele najjednostavnije animacije, uključio sam i tu. Najjednostavniji ć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: Izradite 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 podnožje.php:

~~~

~~~

Korak 10: Neki CSS -i kako bi sve izgledalo bolje

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

Kao što ste mogli primijetiti, koristim css datoteku za kontrolu izgleda. Kako bih bio siguran da je moj daljinski upravljač upotrebljiv i na manjim ekranima, upotrijebio sam neke css flexboxove s automatskim premotavanjem.

~~~

/ * Tablica stilova za sučelje za upravljanje svjetlom *

* Primjenjuje se na svakoj stranici */

body {background-color: f9fcfa; font-family: Arial; marža: 0; }

h1 {boja: bijela; poravnavanje teksta: središte; }

p {font-family: verdana; font-size: 20px; }

h2 {}

/ * Zaglavlje */

.zaglavlje {visina: 10%; zaslon: savitljiv; justify-content: flex-start; align-items: centar; marža: 0px; padding-left: 5%; pozadina:#3F51B5; align-items: centar; }

. Vezevi za glave {boja: bijela; }

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

/ * Podnožje */

.podnožje {background-color: #3F51B5; visina: 10%; poravnavanje teksta: središte; }

/ * Index.php */

.gumbi {display: flex; smjer savijanja: red; flex-wrap: omot; opravdati-sadržaj: razmak između; visina: 80%; align-items: flex-start; }

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

.buttons_index: hover {padding: 0%; širina obruba: tanka; obrubljeni stil: čvrst; boja obruba: 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 vama ako odaberete isprobati moje upute. Ako ste pokušali kopirati neki kôd, morao sam dodati nekoliko razmaka za učitavanje ovdje, pa ćete ih morati izbrisati prije nego kôd ponovno postane koristan.

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

Preporučeni: