Inhoudsopgave:
- Stap 1: Gebruikte materialen
- Stap 2: Bereid het besturingssysteem voor
- Stap 3: De Neopixels aansluiten
- Stap 4: Start de RPi
- Stap 5: Pi-gat
- Stap 6: Bedien de lichten
- Stap 7: Zet de lichten aan met de browser
- Stap 8: Bedien de lichten vanuit de browser
- Stap 9: Maak een sjabloon voor de kop- en voettekst
- Stap 10: wat CSS om het er allemaal een beetje beter uit te laten zien
- Stap 11: Bedankt
Video: Advertentieblokkerende Neopixels: 11 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:18
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
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
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
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
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
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
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:
Slimme bureaulamp - Slimme verlichting met Arduino - Neopixels-werkruimte: 10 stappen (met afbeeldingen)
Slimme bureaulamp | Slimme verlichting met Arduino | Neopixels-werkruimte: tegenwoordig brengen we veel tijd thuis door, studeren en werken virtueel, dus waarom zouden we onze werkruimte niet groter maken met een aangepast en slim verlichtingssysteem op Arduino en Ws2812b-leds. Hier laat ik u zien hoe u uw Smart LED bureaulamp die
DIY SMART LED MATRIX (ESP8266 + WS2812 / NeoPixels): 7 stappen (met afbeeldingen)
DIY SMART LED MATRIX (ESP8266 + WS2812 / NeoPixels): Hier is mijn inleiding tot een project dat ik u graag wil laten zien. Het gaat om een doe-het-zelf Smart LED Matrix waarmee je gegevens, zoals YouTube-statistieken, je Smart Home-statistieken, zoals temperatuur, vochtigheid, een eenvoudige klok kunt laten zien, of gewoon
NeoPixels Matrix (Snake Game: 4 stappen)
NeoPixels Matrix:Snake Game: Herinner je je nog het slangenspel dat we in onze kindertijd op onze gamebox of mobiel speelden? Vandaag gaan we leren hoe we een slangenspel kunnen maken met 8*8 NeoPixels Matrix. We kiezen Arduino uno als controlecentrum en Joystick breakout-module om samen te werken
Klepel met Arduino en Neopixels: 4 stappen
Klepel met Arduino en Neopixels: al het materiaal klaarmaken voor gebruik. Hoewel we een Arduino PRO mini moeten gebruiken, kunnen we voorlopig een Arduino UNO gaan gebruiken en zullen we later terugschakelen. Materialen:· Neo pixels strips (een korte en een die zou worden gebruikt) ·
Speel met vuur via wifi! ESP8266 en Neopixels: 8 stappen
Speel met vuur via wifi! ESP8266 & Neopixels: Creëer een cool vuursimulatie-effect met Wi-Fi draadloze bediening. Een mobiele app (voor Android-smartphones) met een mooie interface is klaar om te installeren om met je creatie te spelen! We zullen ook Arduino en ESP8266 gebruiken om de vlam te regelen. Bij de