INHOUDSOPGAWE:

Advertensieblokkerende Neopixels: 11 stappe
Advertensieblokkerende Neopixels: 11 stappe

Video: Advertensieblokkerende Neopixels: 11 stappe

Video: Advertensieblokkerende Neopixels: 11 stappe
Video: Консультант от бога Tg: cadrolikk 2024, Julie
Anonim
Neopixels wat advertensies blokkeer
Neopixels wat advertensies blokkeer

Ek wou 'n eenvoudige webwerf as afstandsbediening maak vir 'n strook neopixels wat aan my Raspberry Pi zero gekoppel is en dit aanhou gebruik om advertensies op my netwerk te blokkeer met behulp van Pi-Hole. Eerstens wou ek net 'n paar LED's in my kamer byvoeg, maar ek het besef dat ek dit nie maklik kon beheer nie. Daarom het ek besluit om 'n eenvoudige webwerf met 'n paar basiese beheeropsies te skep met behulp van die apache-bediener wat die Pi-hole-installeerder reeds opgestel het. Ek het www-data root-toestemmings verleen, wat 'n veiligheidsrisiko is, sodat u die webserver waarskynlik nie vir die buitewêreld beskikbaar moet stel nie. Dit het hoofsaaklik vir my eie dokumentasie begin en het op die een of ander manier my eerste opdrag geword;) Ek sal dit dus baie waardeer as u kan uitwys as iets onduidelik is of as ek iets heeltemal gemis het.

Stap 1: Gebruikte materiaal

  • Framboos Pi (ek het op 'n Pi 2 begin en toe verander na die WH, die gpio -penne kan effens anders wees, maar anders is elke model goed)

    • As u 'n RPi het sonder ingeboude wifi, is 'n wifi -adapter ook handig.
    • Opsioneel 'n boks vir die framboos pi
  • 2 manlike-vroulike springdrade (byvoorbeeld)
  • Neopixels ws2811 (ek het dit gebruik)
  • 1 10W -kragtoevoer vir die RPi ('n ou telefoonlaaier kan gebruik word)
  • 1 ~ 50W kragtoevoer vir die Neopixels (ek het so een gebruik, maar waarskynlik is 'n kleiner een voldoende, maar as u meer LED's wil hê, het u nog ruimte om uit te brei.)
  • Female jack connector plug (soos hierdie)

Stap 2: Berei die bedryfstelsel voor

Berei die bedryfstelsel voor
Berei die bedryfstelsel voor

Laai die nuutste weergawe Rasbian af van raspberrypi.org Die lite -weergawe is goed vir hierdie projek; as u van plan is om die framboospi ook vir iets anders te gebruik, kan u dit oorweeg om die volledige weergawe met gui te installeer. Toe verbrand ek die beeld met Etcher. Daarna, om seker te maak dat dit met my wifi -netwerk kan skakel, het ek wpa_supplicant.conf bygevoeg in die opstartgids van die sd -kaart. Die inhoud van die lêer moet so lyk:

~~~

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

netwerk = {

ssid = "SSID"

psk = "WAGWOORD"

key_mgmt = WPA-PSK}

~~~

Om ssh in staat te stel, het ek 'n lêer genaamd ssh (sonder enige uitbreiding) in dieselfde gids geskep. Dit sal verseker dat u alles vanaf 'n ander rekenaar in u netwerk kan instel.

Stap 3: Koppel die Neopixels

Koppel die Neopixels
Koppel die Neopixels
Koppel die Neopixels
Koppel die Neopixels

Eers het ek die kragtoevoer in die vroulike aansluiting gekoppel en die RPi in 'n omhulsel gesit. Ek het die grondkabel van die leds (die blou kabel) en die manlike kant van 'n springdraad in die negatiewe kant van die domkragaansluiting vasgeskroef. Die ander kant van die jumperdraad wat ek wel gekoppel het aan 'n grondpen op die gpio -kop, ek het pen 6 gebruik, maar die presiese penne wat u kan gebruik, sal afhang van die presiese model RPi wat u gebruik.

Tweedens het ek die 5V -kabel van die LED's aan die positiewe kant van die aansluiting verbind (die rooi kabel). Op my leidraad was 'n aansluitdraadverbinding op 'n ekstra grondkabel en die datakabel (die wit kabel). Ek het net die ekstra grondkabel geïgnoreer; dit was onnodig vir my opstelling. Op die datakabel het ek 'n manlike na 'n vroulike jumperdraad met die gpio -pen 12 gekoppel, die presiese pen wat u moet gebruik, hang weer af van u RPi. Toe het ek my kragbron vir die RPi en die pixels aangesluit. Die LED's het 'n kort rukkie aangesteek as alles reg is.

Stap 4: Begin die RPi

Begin die RPi
Begin die RPi

Nadat ek die RPi 'n minuut of wat gegee het om op te laai, het ek die IP -adres van die framboos met nmap opgesoek. Maar enige netwerkskandeerder, die inligtingspaneel van u router of in die meeste gevalle eenvoudig "raspberrypi.local" sal dit doen. Met die inligting het ek met RPi verbind via ssh. Die standaard gebruiker is pi met die wagwoord framboos. Dit is dus die eerste ding wat ek verander het met behulp van 'passwd' direk na die eerste aanmelding. As u toegang tot u pi wil verkry via ssh van buite u plaaslike netwerk, moet u na fail2ban en sleutelverifikasie kyk. Ek het persoonlik geen gebruik daarvoor nie, so ek sal dit net met 'n wagwoord agterlaat.

Tweedens het ek die sagteware opgedateer met behulp van 'sudo apt update && sudo apt upgrade -Y'. Ek het ook ekstra sagteware nodig gehad om die libery 'sudo apt-get install scons swig git python-dev build-essential -Y' saam te stel. Toe kopieer ek die uitstekende libery van Jeremy Garff op github `git clone https:// github.com/jgarff/rpi_ws281x.git`. Nadat die libery gekloon is, het ek na die rpi_ws281x -gids gegaan, scons gebruik en die libary geïnstalleer met 'sudo python python/setup.py install'. In python/voorbeelde is 'n goeie demo "strandtest.py" met baie netjiese animasies wat u kan begin met 'sudo python python/voorbeelde/strandtest.py'.

Stap 5: Pi-Hole

Pi-gat
Pi-gat

Om 'n netwerkwye add-blocker te skep, is Pi-Hole perfek. Dit word geïnstalleer met net `sudo curl -sSL https://install.pi-hole.net | bash '. Die goeie deel is dat dit ook 'n webbediener sal opstel.

Nadat u die installeerder uitgevoer het, wil u aanmeld op die admin-webwerf van u router en u RPi 'n statiese IP-adres gee en dit as die DHCP-bediener opstel. As u 'n lae huurperiode gestel het, behoort u PI-gat nou te werk.

Stap 6: Beheer die ligte

Beheer die ligte
Beheer die ligte
Beheer die ligte
Beheer die ligte
Beheer die ligte
Beheer die ligte

Die maklikste manier om die neopixels te beheer, is met klein luislangprogramme. Maar om ssh te gebruik elke keer as u die ligte wil aanskakel, is veral ongemaklik, veral op 'n mobiele toestel. Daarom het ek besluit om 'n klein webwerf as afstandsbediening te gebruik. Dit is 'n veiligheidsrisiko, want ek het die www-data root toestemming gegee sonder om die wagwoord te verifieer. U moet hierdie webwerf waarskynlik nie buite u netwerk beskikbaar stel nie.

Om dit makliker te maak om te kies tussen die paneelbord van PI -gat en die ligte afstandsbediening, het ek die gebruiker pi skryftoegang gegee tot/var/www/html met `sudo chown -R pi/var/www.html` en ek het 'n index.php lêer in/var/www/html/. Iets eenvoudig soos:

~~~

Indeks Pi gat Ligte afstandsbediening

~~~

is goed. Toe skep ek 'n nuwe gids genaamd lights om alles van die neopixels bymekaar te hê. Hier het ek colour.py gemaak op grond van die strandtest.py van die libery.

~~~

vanaf neopixel invoer * # Voer sommige biblioteke in

invoer sys

def led (strook, kleur, begin, einde): # Skep 'n funksie om leds te bel

vir i in bereik (begin, einde):

strip.setPixelColor (i, kleur)

strip.show ()

BRIGHTNESS = int (sys.argv [4]) # Die vierde parameter op die opdraglyn is helderheid. (1-255)

TEL = 50 # Die hoeveelheid LED's PIN = 12 # Die speld wat op die RPi gebruik word

FREQ_HZ = 800000 # LED seinfrekwensie in hertz (gewoonlik 800khz)

DMA = 5 # DMA -kanaal om te gebruik vir die opwekking van seine (probeer 5)

INVERT = Onwaar # Waar om die sein om te draai (as u NPN -transistorniveau gebruik

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

strip.begin ()

R = int (sys.argv [1]) # Die hoeveelheid rooi is die eerste parameter

G = int (sys.argv [2]) # Die hoeveelheid groen is die tweede parameter

B = int (sys.argv [3]) # Die hoeveelheid blou is die derde parameter

probeer:

LED's (strook, kleur (R, G, B), 0, 49) #Begin die latte met die gekose kleur en helderheid.

behalwe KeyboardInterrupt:

kleur (strook, Kleur (0, 0, 0), 0, 49)

~~~

As u dit met sudo op die terminale uitvoer, moet die ligte aangaan in die gespesifiseerde kleur. Om www-data sudo-toestemming te gee, het ek 'www-data ALL = (ALL) NOPASSWD: ALL)' by die sudoers-lêer (/etc/sudoers) direk onder die wortelgebruiker gevoeg.

Stap 7: Skakel die ligte aan met die blaaier

Toe skep ek 'n ander index.php, hierdie keer in /lights. ~~~

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

~~~

As ek nou raspberrypi.local/lights/index.php besoek, sal die LED's wit word. Alhoewel dit 'n goeie begin is, hou ek daarvan om ten minste 'n paar knoppies op 'n afstandsbediening te hê.

Stap 8: Beheer die ligte vanuit die blaaier

Ek het 'n koppelvlak met buttens geskep met behulp van 'n html -vorm. Ek hou nie daarvan om dinge te doen wat nie nodig is nie, en daarom het ek 'n gids met die naam templates met my kop, voettekst en die hoof php -kode geskep.

~~~

~~~

Om die knoppies te laat werk, het ek 'n sjabloon BasicControl.php gemaak. Hierin het ek die kode gespesifiseer wat uitgevoer moet word as 'n knoppie gedruk word. Omdat ek van die strandste animasies gehou het, het ek die een ook ingesluit. Die strandtoets sal oneindig lank voortduur, so ek het nog 'n knoppie gemaak om die proses te stop wanneer ek wil.

~~~ <? php

$ I = 100;

$ R = 0;

$ G = 0;

$ B = 0;

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

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

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

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

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

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

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

anders as (isset ($ _ POST ['herlaai'])) {shell_exec ('sudo herlaai nou'); }?>

~~~

Stap 9: Skep 'n sjabloon vir die kop- en voettekst

Nou werk dit alles, maar dit is nie te aangenaam om na te kyk nie. Na die invoer van die kop- en voettekst is alle elemente van die webwerf beskikbaar, net nie gestileer nie.

Header.php:

~~~

Ligte

Lampjes

Basiese kontroles

Gevorderde kontroles

~~~

En die footer.php:

~~~

~~~

Stap 10: 'n Paar CSS om dit alles 'n bietjie beter te laat lyk

Sommige CSS om dit alles 'n bietjie beter te laat lyk
Sommige CSS om dit alles 'n bietjie beter te laat lyk

Soos u dalk opgemerk het, gebruik ek 'n css -lêer om die uitleg te beheer. Om seker te maak dat my afstandsbediening ook op kleiner skerms bruikbaar is, het ek 'n paar css flexboxes met outowrap gebruik.

~~~

/ * Stylblad vir die ligbeheer -koppelvlak *

* Van toepassing op elke bladsy */

liggaam {agtergrond-kleur: f9fcfa; font-familie: Arial; marge: 0; }

h1 {kleur: wit; teks-belyning: middel; }

p {font-familie: verdana; lettergrootte: 20 px; }

h2 {}

/ * Die opskrif */

.header {hoogte: 10%; vertoon: flex; justify-content: flex-start; lyn-items: middel; marge: 0px; opvulling-links: 5%; agtergrond:#3F51B5; lyn-items: middel; }

. HeaderLinks {kleur: wit; }

.navbar {display: flex; buig: 30%; regverdig-inhoud: ruimte-om; agtergrond-kleur: #3F51B5; kleur: wit; }

/ * Die voetskrif */

.footer {agtergrond-kleur: #3F51B5; hoogte: 10%; teksbelyn: middel; }

/ * Index.php */

.knoppies {display: flex; buig rigting: ry; flex-wrap: wrap; regverdig-inhoud: spasie-tussen; hoogte: 80%; align-items: flex-start; }

.buttons_index {padding: 0%; grenswydte: dun; grensstyl: solied; randkleur: swart; agtergrond-kleur: #3949ab; kleur: wit; font-familie: sans-serif; breedte: 24%; hoogte: 20%; }

.buttons_index: sweef {padding: 0%; grenswydte: dun; grensstyl: solied; randkleur: swart; agtergrond-kleur: #536DFE; kleur: wit; font-familie: sans-serif; breedte: 24%; hoogte: 20%; }

~~~

Stap 11: Dankie

En dit is dit. Alles werk vir my, en ek hoop dat dit ook vir u sal werk as u my instruksies probeer. As u probeer het om 'n kode te kopieer, moes ek 'n paar spasies byvoeg om dit hier op te laai, sodat u dit moet verwyder voordat die kode weer nuttig is.

Ek hoop jy het dit geniet om alles te lees. As u terugvoer het, hoor ek dit graag!

Aanbeveel: