Innholdsfortegnelse:

Annonseblokkerende neopiksler: 11 trinn
Annonseblokkerende neopiksler: 11 trinn

Video: Annonseblokkerende neopiksler: 11 trinn

Video: Annonseblokkerende neopiksler: 11 trinn
Video: SKR 1.4 - Основы с новой прошивкой Marlin 2.0.9.1 2024, November
Anonim
Annonseblokkerende Neopixels
Annonseblokkerende Neopixels

Jeg ønsket å lage et enkelt nettsted som fjernkontroll for en stripe med neopiksler som er koblet til min Raspberry Pi zero og fortsette å bruke den til å blokkere annonser på nettverket mitt ved hjelp av Pi-Hole. Først ville jeg bare legge til noen lysdioder på rommet mitt, men da jeg koblet til alt, skjønte jeg at jeg ikke hadde mulighet til å kontrollere dem. Så jeg bestemte meg for å lage et enkelt nettsted med noen grunnleggende kontrollalternativer ved hjelp av apache-serveren som Pi-hole-installasjonsprogrammet allerede har konfigurert. Jeg ga www-data root-tillatelser, noe som er en sikkerhetsrisiko, så du bør sannsynligvis gjøre webserveren ikke tilgjengelig for omverdenen. Dette startet hovedsakelig for min egen dokumentasjon og ble på en eller annen måte min første instruerbare;) Så jeg vil virkelig sette pris på om du kan påpeke om noe er uklart eller hvis jeg helt savnet noe.

Trinn 1: brukte materialer

  • Raspberry Pi (jeg begynte på en Pi 2 og byttet deretter til WH, gpio -pinnene kan være litt forskjellige, men ellers er hver modell fin)

    • Hvis du har en RPi uten innebygd wifi, er en wifi -adapter også nyttig.
    • Eventuelt et tilfelle for bringebær pi
  • 2 stikkontakter for mann-hunn (for eksempel)
  • Neopixels ws2811 (jeg brukte disse)
  • 1 10W strømforsyning for RPi (en gammel telefonlader vil gjøre)
  • 1 ~ 50W strømforsyning til Neopixels (jeg brukte en slik, men sannsynligvis ville en mindre være tilstrekkelig, men hvis du vil ha flere lysdioder, har du litt plass igjen å utvide.)
  • Hunkontaktkontakt (som denne)

Trinn 2: Forbered operativsystemet

Forbered operativsystemet
Forbered operativsystemet

Last ned den nyeste versjonen Rasbian fra raspberrypi.org Lite -versjonen er bra for dette prosjektet. Hvis du planlegger å bruke bringebær -pi til noe annet, kan du vurdere å installere fullversjonen med gui. Så brente jeg bildet med Etcher. Etter det for å være sikker på at det vil koble til wifi -nettverket mitt, la jeg til wpa_supplicant.conf i oppstartskatalogen til sd -kortet. Innholdet i filen skal se slik ut:

~~~

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

nettverk = {

ssid = "SSID"

psk = "PASSORD"

key_mgmt = WPA-PSK}

~~~

For å aktivere ssh opprettet jeg en fil som heter ssh (uten utvidelse) i den samme katalogen. Dette vil sørge for at du kan konfigurere alt fra en annen datamaskin i ditt lan.

Trinn 3: Koble til Neopixels

Koble til Neopixels
Koble til Neopixels
Koble til Neopixels
Koble til Neopixels

Først koblet jeg strømforsyningen til hunkontakten og satte RPi i et etui. Jeg skrudde jordkabelen fra lysdiodene (den blå kabelen) og en hann -side av en jumper wire i den negative siden av jack -kontakten. Den andre enden av startkabelen jeg koblet til en jordet pinne på gpio -hodet, jeg brukte pinne 6, men de eksakte pinnene du kan bruke vil avhenge av den eksakte modellen RPi du bruker.

For det andre koblet jeg på den positive enden av jack -kontakten 5v -kabelen fra lysdiodene (den røde kabelen). På min LED var det en jumper wire -kontakt på en ekstra jordkabel og datakabelen (den hvite kabelen). Jeg ignorerte den ekstra jordkabelen, det var unødvendig for mitt oppsett. På datakabelen koblet jeg en mannlig til kvinnelig startkabel med gpio -pinnen 12, igjen avhenger den nøyaktige pinnen du skal bruke av RPi -en. Deretter koblet jeg til strømforsyningen for RPi og piksler. Lysdiodene lyser opp et kort øyeblikk, hvis alt er riktig kablet.

Trinn 4: Start RPi

Start RPi
Start RPi

Etter å ha gitt RPi et minutt eller så å starte opp, så jeg opp IP -adressen fra bringebæret med nmap. Men hvilken som helst nettverksskanner, informasjonspanelet på ruteren din eller i de fleste tilfeller bare "raspberrypi.local" vil gjøre det. Med den informasjonen koblet jeg til RPi gjennom ssh. Standardbrukeren er pi med passordet bringebær. Så det er det første jeg endret ved å bruke 'passwd' rett etter den første påloggingen. Hvis du ønsker å få tilgang til pi -en din via ssh fra ditt lokale nettverk, bør du undersøke fail2ban og nøkkelautentisering. Jeg personlig har ikke en brukstilfelle for det, så jeg lar det stå med et passord.

For det andre oppdaterte jeg programvaren ved hjelp av `sudo apt update && sudo apt upgrade -Y`. Jeg trengte også litt ekstra programvare for å kompilere libery `sudo apt-get install scons swig git python-dev build-essential -Y`. Deretter kopierte jeg den utmerkede liberien fra Jeremy Garff på github `git clone https:// github.com/jgarff/rpi_ws281x.git`. Etter at liberien ble klonet, gikk jeg til katalogen rpi_ws281x, brukte scons og installerte deretter libary med `sudo python python/setup.py install`. I python/eksempler er en fin demo "strandtest.py" med veldig fine animasjoner som du kan starte med `sudo python python/eksempler/strandtest.py`.

Trinn 5: Pi-Hole

Pi-Hole
Pi-Hole

For å lage en nettverksvid add-blocker, er Pi-Hole perfekt. Den installeres med bare `sudo curl -sSL https://install.pi-hole.net | bash '. Den fine delen er at den også vil sette opp en webserver.

Etter at du har kjørt installasjonsprogrammet, vil du logge deg på administrasjonsstedet til ruteren og gi RPi en statisk IP-adresse og konfigurere den som DHCP-server. Hvis du har angitt en lav leietid enn PI-hullet skal fungere nå.

Trinn 6: Kontroller lysene

Kontroller lysene
Kontroller lysene
Kontroller lysene
Kontroller lysene
Kontroller lysene
Kontroller lysene

Den enkleste måten å kontrollere neopikslene på er med små python -programmer. Men å bruke ssh hver gang du vil slå på lysene er upraktisk, spesielt på en mobil enhet. Så jeg bestemte meg for å bruke et lite nettsted som fjernkontroll. DETTE ER EN SIKKERHETSRISIKO, fordi jeg ga www-data roten tillatelse uten passordbekreftelse. Du bør sannsynligvis ikke gjøre dette nettstedet tilgjengelig utenfor ditt LAN.

For å gjøre det enkelt å velge mellom dashbordet til PI -hullet og den lyse fjernkontrollen, ga jeg brukeren pi skrivetilgang til/var/www/html med `sudo chown -R pi/var/www.html`, og jeg opprettet en index.php -fil i/var/www/html/. Noe enkelt som:

~~~

Indeks Pi hull Lys fjernkontroll

~~~

er greit. Deretter opprettet jeg en ny mappe som heter lights for å ha alt fra neopikslene sammen. Her laget jeg colour.py basert på strandtest.py fra liberien.

~~~

fra neopixel import * # Importer noen biblioteker

importer sys

def led (stripe, farge, start, slutt): # Lag en funksjon for å kalle leds

for jeg i rekkevidde (start, slutt):

strip.setPixelColor (i, farge)

strip.show ()

BRIGHTNESS = int (sys.argv [4]) # Den fjerde parameteren på kommandolinjen vil være lysstyrke. (1-255)

TELLING = 50 # Mengden leds PIN = 12 # Pinnen som brukes på RPi

FREQ_HZ = 800000 # LED signalfrekvens i hertz (vanligvis 800 khz)

DMA = 5 # DMA -kanal som skal brukes for å generere signal (prøv 5)

INVERT = Falsk # Sant for å snu signalet (når du bruker NPN -transistornivå

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

strip.begin ()

R = int (sys.argv [1]) # Mengden rødt er den første parameteren

G = int (sys.argv [2]) # Mengden grønt er den andre parameteren

B = int (sys.argv [3]) # Mengden blått er den tredje parameteren

prøve:

lysdioder (stripe, farge (R, G, B), 0, 49) #Vil starte fargene med den valgte fargen og lysstyrken.

unntatt KeyboardInterrupt:

farge (stripe, farge (0, 0, 0), 0, 49)

~~~

Hvis du kjører dette med sudo på terminalen, skal lysene tennes i den angitte fargen. For å gi www-data sudo-tillatelse la jeg `www-data ALL = (ALL) NOPASSWD: ALL)` til sudoers-filen (/etc/sudoers) direkte under rotbrukeren.

Trinn 7: Slå på lysene i nettleseren

Deretter opprettet jeg en annen index.php, denne gangen i /lights. ~~~

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

~~~

Når jeg nå besøker raspberrypi.local/lights/index.php vil lysdiodene bli hvite. Selv om dette er en fin start, liker jeg å ha minst noen knapper på en fjernkontroll.

Trinn 8: Kontroller lysene fra nettleseren

Jeg opprettet et grensesnitt med buttens ved hjelp av et html -skjema. Jeg liker ikke å gjøre ting som ikke er nødvendig, så jeg opprettet en mappe som heter maler med topptekst, bunntekst og hoved php -kode. Min (foreløpig) endelige /lights/index.php ser slik ut:

~~~

~~~

For å få knappene til å fungere laget jeg en mal BasicControl.php. I dette spesifiserte jeg koden som skulle kjøres når du trykker på en knapp. Fordi jeg likte de strengeste animasjonene, inkluderte jeg den også. Strandtesten vil fortsette uendelig lenge, så jeg lagde en ny knapp for å stoppe prosessen når jeg vil.

~~~ <? php

$ I = 100;

$ R = 0;

$ G = 0;

$ B = 0;

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

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

ellers hvis (isset ($ _ POST ['rød'])) {$ R = 255; $ G = 0; $ B = 0; exec ("sudo python colour.py $ R $ G $ B $ I"); }

ellers hvis (isset ($ _ POST ['grønn'])) {$ R = 0; $ G = 255; $ B = 0; exec ("sudo python colour.py $ R $ G $ B $ I"); }

ellers hvis (isset ($ _ POST ['blå'])) {$ R = 0; $ G = 0; $ B = 255; exec ("sudo python colour.py $ R $ G $ B $ I"); }

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

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

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

~~~

Trinn 9: Lag en mal for topp- og bunntekst

Nå fungerer alt, men det er ikke så hyggelig å se på. Etter import av topptekst og bunntekst er alle elementene på nettstedet tilgjengelige, bare ikke stylet.

Header.php:

~~~

Lys

Lampjes

Grunnleggende kontroller

Avanserte kontroller

~~~

Og footer.php:

~~~

~~~

Trinn 10: Noen CSS for å få det til å se litt bedre ut

Noen CSS for å få det hele til å se litt bedre ut
Noen CSS for å få det hele til å se litt bedre ut

Som du kanskje har lagt merke til, bruker jeg en css -fil for å kontrollere oppsettet. For å sikre at fjernkontrollen min også er brukbar på mindre skjermer, brukte jeg noen css flexboxes med autowrap.

~~~

/ * Stilark for lysstyringsgrensesnittet *

* Gjelder på hver side */

body {bakgrunnsfarge: f9fcfa; font-family: Arial; margin: 0; }

h1 {farge: hvit; tekstjustering: senter; }

p {font-family: verdana; skriftstørrelse: 20px; }

h2 {}

/ * Overskriften */

.hode {høyde: 10%; display: flex; justify-content: flex-start; align-items: center; margin: 0px; polstring-venstre: 5%; bakgrunn:#3F51B5; align-items: center; }

. HeaderLinks {farge: hvit; }

.navbar {display: flex; fleks: 30%; justify-content: space-around; bakgrunnsfarge: #3F51B5; farge: hvit; }

/ * Bunntekst */

.footer {bakgrunnsfarge: #3F51B5; høyde: 10%; tekstjustering: senter; }

/ * Index.php */

.knapper {display: flex; flex-direction: rad; flex-wrap: vikle; justify-content: mellomrom; høyde: 80%; align-items: flex-start; }

.buttons_index {polstring: 0%; kantbredde: tynn; kantstil: solid; kantfarge: svart; bakgrunnsfarge: #3949ab; farge: hvit; font-family: sans-serif; bredde: 24%; høyde: 20%; }

.buttons_index: sveve {padding: 0%; kantbredde: tynn; kantstil: solid; kantfarge: svart; bakgrunnsfarge: #536DFE; farge: hvit; font-family: sans-serif; bredde: 24%; høyde: 20%; }

~~~

Trinn 11: Takk

Og det er det. Alt fungerer for meg, og jeg håper det vil fungere for deg også hvis du velger, prøv min instruerbare. Hvis du prøvde å kopiere noen kode, måtte jeg legge til noen mellomrom for å laste den opp her, så du må slette dem før koden blir nyttig igjen.

Jeg håper du likte å lese alt. Hvis du har tilbakemeldinger, vil jeg gjerne høre det!

Anbefalt: