Indholdsfortegnelse:

Annonceblokerende neopixel: 11 trin
Annonceblokerende neopixel: 11 trin

Video: Annonceblokerende neopixel: 11 trin

Video: Annonceblokerende neopixel: 11 trin
Video: Лесоруб увидел тонущую в реке лошадь. Дальше случилось Невероятное! 2024, November
Anonim
Annonceblokerende Neopixels
Annonceblokerende Neopixels

Jeg ville lave et simpelt websted som fjernbetjening til en stribe neopixel forbundet til min Raspberry Pi zero og blive ved med at bruge det til at blokere annoncer på mit netværk ved hjælp af Pi-Hole. Først ville jeg bare tilføje nogle lysdioder i mit værelse, men ved at tilslutte alting indså jeg, at jeg ikke havde nogen måde at kontrollere dem bekvemt. Så jeg besluttede at oprette et simpelt websted med nogle grundlæggende kontrolmuligheder ved hjælp af apache-serveren, som Pi-hole-installationsprogrammet allerede har konfigureret. Jeg har givet www-data root-tilladelser, hvilket er en sikkerhedsrisiko, så du bør sandsynligvis gøre webserveren ikke tilgængelig for omverdenen. Dette startede hovedsageligt for min egen dokumentation og blev på en eller anden måde min første instruerbare;) Så jeg ville virkelig sætte pris på, hvis du kunne påpege, hvis noget er uklart, eller hvis jeg helt savnede noget.

Trin 1: Brugte materialer

  • Raspberry Pi (jeg startede på en Pi 2 og skiftede derefter til WH, gpio -benene kan være lidt forskellige, men ellers er hver model fin)

    • Hvis du har en RPi uden indbygget wifi, er en wifi -adapter også nyttig.
    • Eventuelt et etui til hindbær pi
  • 2 stikkontakter til hun-hun (f.eks.)
  • Neopixels ws2811 (jeg brugte disse)
  • 1 10W strømforsyning til RPi (en gammel telefon oplader kan klare)
  • 1 ~ 50W strømforsyning til Neopixels (jeg brugte sådan en, men sandsynligvis ville en mindre være tilstrækkelig, men hvis du gerne vil have flere lysdioder, har du lidt plads til at udvide.)
  • Hunstik stik (som dette)

Trin 2: Forbered operativsystemet

Forbered operativsystemet
Forbered operativsystemet

Download den nyeste version Rasbian fra raspberrypi.org Lite -versionen er fin til dette projekt, hvis du også planlægger at bruge hindbærpi til noget andet, kan du overveje at installere den fulde version med gui. Derefter brændte jeg billedet med Etcher. Derefter for at sikre, at det vil oprette forbindelse til mit wifi -netværk, tilføjede jeg wpa_supplicant.conf i boot -biblioteket på sd -kort. Filens indhold skal se sådan ud:

~~~

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

netværk = {

ssid = "SSID"

psk = "PASSWORD"

key_mgmt = WPA-PSK}

~~~

For at aktivere ssh oprettede jeg en fil kaldet ssh (uden udvidelse) i det samme bibliotek. Dette vil sikre, at du kan konfigurere alt fra en anden computer i dit lan.

Trin 3: Tilslutning af Neopixels

Tilslutning af Neopixels
Tilslutning af Neopixels
Tilslutning af Neopixels
Tilslutning af Neopixels

Først tilsluttede jeg strømforsyningen i hunstikket og satte RPi'en i et etui. Jeg skruede jordkablet af lysdioderne (det blå kabel) og en han -side af en jumper wire i den negative side af jackstikket. Den anden ende af jumperwiren sluttede jeg til en jordstift på gpio -headeren, jeg brugte pin 6, men de nøjagtige pins, du kan bruge, afhænger af den nøjagtige model RPi, du bruger.

For det andet tilsluttede jeg den positive ende af jackstikket 5v -kablet fra lysdioderne (det røde kabel). På min LED var deres en jumper wire -stik på et ekstra jordkabel og datakablet (det hvide kabel). Jeg ignorerede bare det ekstra jordkabel, det var unødvendigt for min opsætning. På datakablet tilsluttede jeg en han til hun -jumperledning med gpio pin 12, igen afhænger den nøjagtige pin, du skal bruge, af din RPi. Derefter tilsluttede jeg min strømforsyning til RPi og pixels. Lysdioderne lyste et kort øjeblik, hvis alt er korrekt forbundet.

Trin 4: Start RPi

Start RPi
Start RPi

Efter at have givet RPi et minut eller deromkring til at starte op, slog jeg IP -adressen op fra hindbæret med nmap. Men enhver netværksscanner, informationspanelet på din router eller i de fleste tilfælde simpelthen "raspberrypi.local" vil gøre det. Med disse oplysninger har jeg forbindelse til RPi via ssh. Standardbrugeren er pi med adgangskoden hindbær. Så det er det første, jeg ændrede ved hjælp af 'passwd' direkte efter det første login. Hvis du gerne vil have adgang til din pi via ssh uden for dit lokale netværk, bør du undersøge fail2ban og nøglegodkendelse. Jeg har personligt ikke en brugssag til det, så jeg vil efterlade det med kun en adgangskode.

For det andet opdaterede jeg softwaren ved hjælp af 'sudo apt update && sudo apt upgrade -Y'. Jeg havde også brug for noget ekstra software til at kompilere libery `sudo apt-get install scons swig git python-dev build-essential -Y`. Derefter kopierede jeg den fremragende libery fra Jeremy Garff på github `git clone https:// github.com/jgarff/rpi_ws281x.git`. Efter at liberien var klonet, gik jeg til biblioteket rpi_ws281x, brugte scons og installerede derefter libary med 'sudo python python/setup.py install'. I python/eksempler er en dejlig demo "strandtest.py" med virkelig pæne animationer, som du kan starte med `sudo python python/eksempler/strandtest.py`.

Trin 5: Pi-Hole

Pi-hul
Pi-hul

For at oprette en netværksvid tilføjelsesbloker er Pi-Hole perfekt. Det installeres med bare `sudo curl -sSL https://install.pi-hole.net | bash`. Den gode del er, at den også vil oprette en webserver.

Efter at have kørt installationsprogrammet vil du logge ind på din routers administrationssted og give din RPi en statisk IP-adresse og konfigurere den som DHCP-server. Hvis du har indstillet en lav leasingtid, skal dit PI-hul fungere nu.

Trin 6: Kontroller lysene

Kontroller lysene
Kontroller lysene
Kontroller lysene
Kontroller lysene
Styr lysene
Styr lysene

Den nemmeste måde at styre neopixel på er med små python -programmer. Men at bruge ssh hver gang, du vil tænde lyset, er ubelejligt, især på en mobil enhed. Så jeg besluttede at bruge et lille websted som fjernbetjening. DETTE ER EN SIKKERHEDSRISIKO, fordi jeg gav www-data root tilladelse uden adgangskodebekræftelse. Du bør sandsynligvis ikke gøre dette websted tilgængeligt uden for dit netværk.

For at gøre det let at vælge mellem instrumentbrættet for PI -hul og lysfjernbetjeningen, gav jeg brugeren pi skriveadgang til/var/www/html med `sudo chown -R pi/var/www.html`, og jeg oprettede en index.php -fil i/var/www/html/. Noget simpelt som:

~~~

Indeks Pi hul Lys fjernbetjening

~~~

er fint. Derefter oprettede jeg en ny mappe kaldet lys for at have alt fra neopixelerne sammen. Her skabte jeg colour.py baseret på strandtest.py fra liberien.

~~~

fra neopixel import * # Importer nogle biblioteker

import sys

def led (strip, farve, start, slut): # Opret en funktion til at kalde leds

for i inden for rækkevidde (start, slut):

strip.setPixelColor (i, farve)

strip.show ()

BRIGHTNESS = int (sys.argv [4]) # Den fjerde parameter på kommandolinjen er lysstyrke. (1-255)

TÆLL = 50 # Mængden af LED'er PIN = 12 # Stiften, der bruges på RPi

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

DMA = 5 # DMA -kanal, der skal bruges til at generere signal (prøv 5)

INVERT = Falsk # Sandt at invertere signalet (når du bruger NPN -transistorniveau

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

strip.begin ()

R = int (sys.argv [1]) # Mængden af rødt er den første parameter

G = int (sys.argv [2]) # Mængden af grønt er den anden parameter

B = int (sys.argv [3]) # Mængden af blå er den tredje parameter

prøve:

lysdioder (strimmel, farve (R, G, B), 0, 49) #Vil starte ladene med den valgte farve og lysstyrke.

undtagen KeyboardInterrupt:

farve (strimmel, farve (0, 0, 0), 0, 49)

~~~

Hvis du kører dette med sudo på terminalen, skal lysene tænde i den angivne farve. For at give www-data sudo-tilladelse tilføjede jeg `www-data ALL = (ALL) NOPASSWD: ALL)` til sudoers-filen (/etc/sudoers) direkte under rodbrugeren.

Trin 7: Tænd lysene med browseren

Derefter oprettede jeg en anden index.php, denne gang i /lights. ~~~

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

~~~

Når jeg nu besøger raspberrypi.local/lights/index.php bliver lysdioderne hvide. Selvom dette er en god start, kan jeg godt lide at have mindst nogle knapper på en fjernbetjening.

Trin 8: Styr lysene fra browseren

Jeg oprettede en grænseflade med buttens ved hjælp af en html -formular. Jeg kan ikke lide at gøre ting, der ikke er nødvendige, så jeg oprettede en mappe kaldet skabeloner med min sidehoved, sidefod og hoved php -koden. Min (for nu) endelige /lights/index.php ser sådan ud:

~~~

~~~

For at få knapperne til at fungere lavede jeg en skabelon BasicControl.php. I dette angav jeg den kode, der skulle udføres, når der trykkes på en knap. Fordi jeg kunne lide de strengeste animationer, inkluderede jeg den også. Strandtesten vil fortsætte uendeligt længe, så jeg lavede en anden knap for at stoppe processen, 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øn'])) {$ 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 ['hvid'])) {$ 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 ['genstart'])) {shell_exec ('sudo genstart nu'); }?>

~~~

Trin 9: Opret en skabelon til sidehoved og sidefod

Nu fungerer det hele, men det er ikke for behageligt at se på. Efter import af sidehoved og sidefod er alle elementer på webstedet tilgængelige, bare ikke stylet.

Header.php:

~~~

Lys

Lampjes

Grundlæggende kontrol

Avancerede kontroller

~~~

Og sidefoden.php:

~~~

~~~

Trin 10: Nogle CSS for at få det hele til at se lidt bedre ud

Nogle Css for at få det hele til at se lidt bedre ud
Nogle Css for at få det hele til at se lidt bedre ud

Som du måske har bemærket, bruger jeg en css -fil til at styre layoutet. For at sikre, at min fjernbetjening også kan bruges på mindre skærme, brugte jeg nogle css flexboxes med autowrap.

~~~

/ * Stilark til lysstyringsgrænsefladen *

* Gælder på hver side */

krop {baggrundsfarve: f9fcfa; font-familie: Arial; margen: 0; }

h1 {farve: hvid; tekstjustering: center; }

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

h2 {}

/ * Overskriften */

.header {højde: 10%; display: flex; justify-content: flex-start; align-items: center; margen: 0px; polstring-venstre: 5%; baggrund:#3F51B5; align-items: center; }

. HeaderLinks {farve: hvid; }

.navbar {display: flex; flex: 30%; justify-content: space-around; baggrundsfarve: #3F51B5; farve: hvid; }

/ * Sidefoden */

.footer {baggrundsfarve: #3F51B5; højde: 10%; tekstjustering: center; }

/ * Index.php */

.knapper {display: flex; flex-direction: række; flex-wrap: wrap; justify-content: mellemrum; højde: 80%; align-items: flex-start; }

.buttons_index {polstring: 0%; kantbredde: tynd; kantstil: solid; kantfarve: sort; baggrundsfarve: #3949ab; farve: hvid; font-familie: sans-serif; bredde: 24%; højde: 20%; }

.buttons_index: svæver {polstring: 0%; kantbredde: tynd; kantstil: solid; kantfarve: sort; baggrundsfarve: #536DFE; farve: hvid; font-familie: sans-serif; bredde: 24%; højde: 20%; }

~~~

Trin 11: Tak

Og det er det. Alt fungerer for mig, og jeg håber, det også vil fungere for dig, hvis du vælger, prøv min instruerbare. Hvis du forsøgte at kopiere en kode, var jeg nødt til at tilføje et par mellemrum for at uploade den her, så du bliver nødt til at slette dem, før koden bliver nyttig igen.

Jeg håber du nød at læse alt. Hvis du har feedback, vil jeg meget gerne høre det!

Anbefalede: