Inhoudsopgave:

Advertentieblokkerende Neopixels: 11 stappen
Advertentieblokkerende Neopixels: 11 stappen

Video: Advertentieblokkerende Neopixels: 11 stappen

Video: Advertentieblokkerende Neopixels: 11 stappen
Video: Hoe u advertentieblokkering in Google Chrome op Android kunt uitschakelen (2023) 2024, November
Anonim
Advertentieblokkerende Neopixels
Advertentieblokkerende Neopixels

Ik wilde een eenvoudige website maken als afstandsbediening voor een strip neopixels aangesloten op mijn Raspberry Pi zero en deze blijven gebruiken om advertenties op mijn netwerk te blokkeren met Pi-Hole. Eerst wilde ik gewoon wat leds in mijn kamer toevoegen, maar alles aansluitend realiseerde ik me dat ik ze niet gemakkelijk kon bedienen. Dus besloot ik een eenvoudige website te maken met enkele basisbesturingsopties met behulp van de apache-server die het Pi-hole-installatieprogramma al had ingesteld. Ik heb root-rechten voor www-data verleend, wat een veiligheidsrisico is, dus je moet de webserver waarschijnlijk niet beschikbaar maken voor de buitenwereld. Dit begon voornamelijk voor mijn eigen documentatie en werd toen op de een of andere manier mijn eerste instructable;) Dus ik zou het erg op prijs stellen als je zou kunnen wijzen als iets onduidelijk is of als ik iets volledig heb gemist.

Stap 1: Gebruikte materialen

  • Raspberry Pi (ik begon op een Pi 2 en veranderde toen naar de WH, de gpio-pinnen kunnen iets anders zijn, maar verder is elk model in orde)

    • Als je een RPi zonder ingebouwde wifi hebt, is een wifi-adapter ook handig.
    • Optioneel een koffer voor de frambozenpi
  • 2 mannelijke-vrouwelijke jumperdraden (bijvoorbeeld)
  • Neopixels ws2811 (ik heb deze gebruikt)
  • 1 10W voeding voor de RPi (een oude telefoonoplader is voldoende)
  • 1 ~ 50W voeding voor de Neopixels (ik heb er zo een gebruikt, maar waarschijnlijk zou een kleinere voldoende zijn, maar als je meer leds wilt, heb je nog wat ruimte over om uit te breiden.)
  • Vrouwelijke jack connector plug (zoals deze)

Stap 2: Bereid het besturingssysteem voor

Het besturingssysteem voorbereiden
Het besturingssysteem voorbereiden

Download de nieuwste versie Rasbian van raspberrypi.org De lite-versie is prima voor dit project, als je van plan bent de raspberry pi ook voor iets anders te gebruiken, kun je overwegen de volledige versie met gui te installeren. Daarna heb ik de afbeelding gebrand met Etcher. Om er zeker van te zijn dat het verbinding maakt met mijn wifi-netwerk, heb ik wpa_supplicant.conf toegevoegd in de opstartmap van de SD-kaart. De inhoud van het bestand zou er als volgt uit moeten zien:

~~~

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

netwerk={

ssid="SSID"

psk="WACHTWOORD"

key_mgmt=WPA-PSK}

~~~

Om ssh in te schakelen heb ik een bestand gemaakt met de naam ssh (zonder enige extensie) in dezelfde map. Dit zorgt ervoor dat je alles vanaf een andere computer in je lan kunt configureren.

Stap 3: De Neopixels aansluiten

De Neopixels aansluiten
De Neopixels aansluiten
De Neopixels aansluiten
De Neopixels aansluiten

Eerst heb ik de voeding in de vrouwelijke jack-connector gestoken en de RPi in een koffer gestopt. Ik heb de massakabel van de leds (de blauwe kabel) en een mannelijke kant van een jumperdraad in de negatieve kant van de jackconnector geschroefd. Het andere uiteinde van de jumperdraad die ik heb aangesloten op een aardingspin op de gpio-header, ik heb pin 6 gebruikt, maar de exacte pinnen die u kunt gebruiken, zijn afhankelijk van het exacte model RPi dat u gebruikt.

Ten tweede heb ik op het positieve uiteinde van de jack-connector de 5v-kabel van de leds aangesloten (de rode kabel). Op mijn led zat een jumper wire connector op een extra massakabel en de datakabel (de witte kabel). Ik negeerde gewoon de extra aardingskabel, die was niet nodig voor mijn opstelling. Op de datakabel heb ik een mannelijke naar vrouwelijke jumperdraad aangesloten met de gpio-pin 12, nogmaals, de exacte pin die je moet gebruiken, hangt af van je RPi. Daarna heb ik mijn voeding voor de RPi en de pixels aangesloten. De leds gingen wel even branden, als alles goed is aangesloten.

Stap 4: Start de RPi

Start de RPi
Start de RPi

Nadat ik de RPi een minuut of wat had gegeven om op te starten, zocht ik het IP-adres van de Raspberry op met nmap. Maar elke netwerkscanner, het informatiepaneel van uw router of in de meeste gevallen gewoon "raspberrypi.local" is voldoende. Met die informatie heb ik verbinding gemaakt met RPi via ssh. De standaardgebruiker is pi met het wachtwoord raspberry. Dus dat is het eerste wat ik veranderde met `passwd` direct na de eerste login. Als je toegang wilt krijgen tot je pi via ssh van buiten je lokale netwerk, moet je kijken naar fail2ban en sleutelauthenticatie. Ik heb daar persoonlijk geen use case voor, dus ik laat het met alleen een wachtwoord.

Ten tweede heb ik de software bijgewerkt met `sudo apt update && sudo apt upgrade -Y`. Ik had ook wat extra software nodig om de libery `sudo apt-get install scons swig git python-dev build-essential -Y` te compileren. Daarna kopieerde ik de uitstekende libery van Jeremy Garff op github `git clone https://github.com/jgarff/rpi_ws281x.git`. Nadat de libery was gekloond ging ik naar de rpi_ws281x directory, gebruikte scons en installeerde toen de liary met `sudo python python/setup.py install`. In python/examples staat een mooie demo "strandtest.py" met erg leuke animaties die je kunt starten met `sudo python python/examples/strandtest.py`.

Stap 5: Pi-gat

Pi-gat
Pi-gat

Om een netwerkbrede add-blocker te maken, is Pi-Hole perfect. Het wordt geïnstalleerd met alleen `sudo curl -sSL https://install.pi-hole.net | bash`. Het leuke is dat het ook een webserver zal opzetten.

Nadat u het installatieprogramma heeft uitgevoerd, wilt u inloggen op de beheerderssite van uw router en uw RPi een statisch IP-adres geven en instellen als de DHCP-server. Als je een lage leasetijd hebt ingesteld dan zou je PI-hole nu moeten werken.

Stap 6: Bedien de lichten

Bedien de lichten
Bedien de lichten
Bedien de lichten
Bedien de lichten
Bedien de lichten
Bedien de lichten

De eenvoudigste manier om de neopixels te besturen is met kleine python-programma's. Maar om ssh elke keer te gebruiken dat je de lichten wilt aanzetten is onhandig, vooral op een mobiel apparaat. Dus besloot ik een kleine website als afstandsbediening te gebruiken. DIT IS EEN VEILIGHEIDSRISICO, omdat ik de www-data root toestemming heb gegeven zonder wachtwoordverificatie. Je zou deze site waarschijnlijk niet beschikbaar moeten maken buiten je lan.

Om het gemakkelijk te maken om te kiezen tussen het dashboard van PI-hole en de light remote, gaf ik de gebruiker pi schrijftoegang tot /var/www/html met `sudo chown -R pi /var/www.html` en ik maakte een index.php-bestand in /var/www/html/. Iets simpels als:

~~~

Index Pi-gat Licht afstandsbediening

~~~

is goed. Toen heb ik een nieuwe map gemaakt met de naam lichten om alles van de neopixels bij elkaar te hebben. Hier heb ik colour.py gemaakt op basis van de strandtest.py uit de libery.

~~~

van neopixel import * # Importeer enkele bibliotheken

import systeem

def led (strip, kleur, begin, einde): # Maak een functie om leds aan te roepen

voor i in bereik (begin, einde):

strip.setPixelColor(i, kleur)

strip.show()

HELDERHEID = int(sys.argv[4]) # De vierde parameter op de commandoregel is helderheid. (1-255)

COUNT = 50 # Het aantal leds PIN = 12 # De pin gebruikt op de RPi

FREQ_HZ = 800000 # LED-signaalfrequentie in hertz (meestal 800khz)

DMA = 5 # DMA-kanaal om te gebruiken voor het genereren van signaal (probeer 5)

INVERT = False # True om het signaal om te keren (bij gebruik van NPN-transistorniveau)

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

strip.begin()

R = int(sys.argv[1]) # De hoeveelheid rood is de eerste parameter

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

B = int(sys.argv[3]) # De hoeveelheid blauw is de derde parameter

proberen:

leds (strip, kleur (R, G, B), 0, 49) #Zal de letjes starten met de gekozen kleur en helderheid.

behalve KeyboardInterrupt:

kleur(strip, Kleur(0, 0, 0), 0, 49)

~~~

Als u dit uitvoert met sudo op de terminal, moeten de lampjes in de opgegeven kleur gaan branden. Om www-data sudo toestemming te geven heb ik `www-data ALL=(ALL) NOPASSWD:ALL)` toegevoegd aan het sudoers-bestand (/etc/sudoers) direct onder de rootgebruiker.

Stap 7: Zet de lichten aan met de browser

Daarna maakte ik nog een index.php, dit keer in /lights. ~~~

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

~~~

Als ik nu naar raspberrypi.local/lights/index.php ga, worden de leds wit. Hoewel dit een mooi begin is, vind ik het prettig om op zijn minst wat knoppen op een afstandsbediening te hebben.

Stap 8: Bedien de lichten vanuit de browser

Ik heb een interface met buttens gemaakt met behulp van een html-formulier. Ik hou er niet van om dingen te doen die niet nodig zijn, dus heb ik een map gemaakt met de naam sjablonen met mijn koptekst, voettekst en de belangrijkste php-code. Mijn (voorlopig) definitieve /lights/index.php ziet er als volgt uit:

~~~

~~~

Om de knoppen te laten werken heb ik een sjabloon BasicControl.php gemaakt. Hierin heb ik de code gespecificeerd die moet worden uitgevoerd als er op een knop wordt gedrukt. Omdat ik de strandtest-animaties leuk vond, heb ik die ook opgenomen. De strandtest zal oneindig lang doorgaan, dus ik heb nog een knop gemaakt om het proces te stoppen wanneer ik maar wil.

~~~< ?php

$Ik = 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['wit'])) { $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'); } ?>

~~~

Stap 9: Maak een sjabloon voor de kop- en voettekst

Nu werkt het allemaal, maar het is niet al te prettig om naar te kijken. Na het importeren van de kop- en voettekst zijn alle elementen van de site beschikbaar, alleen niet gestyled.

Koptekst.php:

~~~

Lichten

Lampjes

Basisbediening

Geavanceerde bediening

~~~

En de footer.php:

~~~

~~~

Stap 10: wat CSS om het er allemaal een beetje beter uit te laten zien

Wat CSS om het er allemaal een beetje beter uit te laten zien
Wat CSS om het er allemaal een beetje beter uit te laten zien

Zoals je misschien hebt gemerkt, gebruik ik een css-bestand om de lay-out te beheren. Om ervoor te zorgen dat mijn afstandsbediening ook op kleinere schermen kan worden gebruikt, heb ik enkele css-flexboxen met autowrap gebruikt.

~~~

/* Stylesheet voor de lichtbesturingsinterface *

* Geldt op elke pagina */

body { achtergrondkleur: f9fcfa; font-familie: Arial; marge: 0; }

h1 { kleur: wit; tekst uitlijnen: midden; }

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

h2 { }

/* De kop */

.header { hoogte: 10%; weergave:flex; rechtvaardigen-inhoud:flex-start; align-items:center; marge: 0px; opvulling-links: 5%; achtergrond:#3F51B5; align-items: midden; }

. HeaderLinks { kleur: wit; }

.navbar { display: flex; flexibel: 30%; rechtvaardigen-inhoud:ruimte-rond; achtergrondkleur: #3F51B5; kleur wit; }

/* De voettekst */

.footer { achtergrondkleur: #3F51B5; hoogte: 10%; tekst uitlijnen: midden; }

/* Index.php */

.knoppen { display:flex; flex-richting: rij; flexomslag: omslag; rechtvaardigen-inhoud:spatie-tussen; hoogte: 80%; align-items:flex-start; }

.buttons_index { opvulling: 0%; grensbreedte: dun; randstijl: solide; randkleur: zwart; achtergrondkleur: #3949ab; kleur wit; font-familie: schreefloos; breedte: 24%; hoogte: 20%; }

.buttons_index:hover{ padding:0%; grensbreedte: dun; randstijl: solide; randkleur: zwart; achtergrondkleur: #536DFE; kleur wit; font-familie: schreefloos; breedte: 24%; hoogte: 20%; }

~~~

Stap 11: Bedankt

En dat is het. Alles werkt voor mij en ik hoop dat het ook voor jou zal werken als je ervoor kiest om mijn instructable te proberen. Als je probeerde wat code te kopiëren, moest ik een paar spaties toevoegen om het hier te uploaden, dus je zult ze moeten verwijderen voordat de code weer bruikbaar wordt.

Ik hoop dat je het leuk vond om alles te lezen. Als je feedback hebt, hoor ik het graag!

Aanbevolen: