Cuprins:

Neopixeli de blocare a anunțurilor: 11 pași
Neopixeli de blocare a anunțurilor: 11 pași

Video: Neopixeli de blocare a anunțurilor: 11 pași

Video: Neopixeli de blocare a anunțurilor: 11 pași
Video: inel 16 leduri multicolore (3) 2024, Noiembrie
Anonim
Neopixeli de blocare a anunțurilor
Neopixeli de blocare a anunțurilor

Am vrut să fac un site web simplu la distanță pentru o bandă de neopixeli conectați la Raspberry Pi zero și să îl folosesc în continuare pentru a bloca anunțurile din rețeaua mea folosind Pi-Hole. Mai întâi am vrut doar să adaug câteva led-uri în camera mea, dar cablând totul, mi-am dat seama că nu am nicio modalitate de a le controla în mod convenabil. Așa că am decis să creez un site web simplu cu câteva opțiuni de control de bază folosind serverul apache instalat de Pi-hole deja configurat. Am acordat permisiunile de rădăcină www-data, ceea ce reprezintă un risc de securitate, deci ar trebui să faceți în mod pronunțabil serverul web să nu fie disponibil pentru lumea exterioară. Acest lucru a început în principal pentru propria mea documentație și, într-un fel, a devenit primul meu instructabil;

Pasul 1: Materiale uzate

  • Raspberry Pi (am început pe un Pi 2 și apoi am trecut la WH, pinii gpio ar putea fi ușor diferiți, altfel fiecare model este în regulă)

    • Dacă aveți un RPi fără WiFi încorporat, un adaptor wifi este de asemenea util.
    • Opțional, o carcasă pentru zmeura pi
  • 2 fire jumper masculin-feminin (de exemplu)
  • Neopixeli ws2811 (le-am folosit)
  • 1 sursă de alimentare de 10W pentru RPi (un încărcător de telefon vechi va funcționa)
  • Sursă de alimentare de 1 ~ 50W pentru Neopixeli (am folosit unul ca acesta, dar probabil unul mai mic ar fi suficient, dar dacă doriți mai multe led-uri, mai aveți puțin spațiu pentru extindere.)
  • Fișă mufă conector mufă (ca aceasta)

Pasul 2: Pregătiți sistemul de operare

Pregătiți sistemul de operare
Pregătiți sistemul de operare

Descărcați cea mai recentă versiune Rasbian de pe raspberrypi.org Versiunea lite este bună pentru acest proiect, dacă intenționați să utilizați raspberry pi și pentru altceva, ați putea lua în considerare instalarea versiunii complete cu gui. Apoi am ars imaginea cu Etcher. După aceea, pentru a mă asigura că se va conecta la rețeaua mea wifi am adăugat wpa_supplicant.conf în directorul de boot al cardului SD. Conținutul fișierului ar trebui să arate astfel:

~~~

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

rețea = {

ssid = "SSID"

psk = "PAROLĂ"

key_mgmt = WPA-PSK}

~~~

Pentru a activa ssh am creat un fișier numit ssh (fără nicio extensie) în același director. Acest lucru vă va asigura că sunteți capabil să configurați totul de pe alt computer din lan.

Pasul 3: Conectarea Neopixelilor

Conectarea Neopixelilor
Conectarea Neopixelilor
Conectarea Neopixelilor
Conectarea Neopixelilor

Mai întâi am conectat sursa de alimentare la conectorul jack feminin și am pus RPi într-o cutie. Am înșurubat cablul de masă de pe leduri (cablul albastru) și o parte tată a unui cablu jumper în partea negativă a conectorului jack. Celălalt capăt al firului jumper l-am conectat la un pin de masă de pe antetul gpio, am folosit pinul 6, dar pinii exacti pe care îi puteți folosi vor depinde de modelul exact RPi pe care îl utilizați.

În al doilea rând am conectat pe capătul pozitiv al conectorului jack cablul de 5v de la leduri (cablul roșu). Pe ledul meu era un conector de sârmă jumper pe un cablu de masă suplimentar și cablul de date (cablul alb). Tocmai am ignorat cablul de masă suplimentar, nu era necesar pentru configurarea mea. Pe cablul de date am conectat un cablu masculin la jumper cu pinul gpio 12, din nou, pinul exact pe care ar trebui să-l folosiți depinde de RPi. Apoi mi-am conectat sursa de alimentare pentru RPi și pixeli. Ledurile s-au aprins pentru o scurtă clipă, dacă totul este conectat corect.

Pasul 4: Porniți RPi

Porniți RPi
Porniți RPi

După ce am acordat RPi un minut sau cam așa pentru a porni, am căutat adresa IP de la zmeură cu nmap. Dar orice scaner de rețea, panoul de informații al routerului dvs. sau, în majoritatea cazurilor, pur și simplu „raspberrypi.local” va funcționa. Cu aceste informații m-am conectat cu RPi prin ssh. Utilizatorul implicit este pi cu parola zmeură. Deci, acesta este primul lucru pe care l-am schimbat folosind `passwd` direct după prima autentificare. Dacă doriți să accesați pi-ul dvs. prin ssh din afara rețelei locale, ar trebui să căutați în autentificarea fail2ban și cheie. Eu personal nu am un caz de utilizare pentru asta, așa că îl voi lăsa doar cu o parolă.

În al doilea rând am actualizat software-ul folosind `sudo apt update && sudo apt upgrade -Y`. De asemenea, am avut nevoie de câteva programe software suplimentare pentru a compila libery `sudo apt-get install scons swig git python-dev build-essential -Y`. Apoi am copiat excelentul libery de la Jeremy Garff pe github `git clone https:// github.com / jgarff / rpi_ws281x.git`. După aceea, liberia a fost clonată, m-am dus la directorul rpi_ws281x, am folosit scons și apoi am instalat libary cu `sudo python python / setup.py install`. În python / examples este un demo frumos „strandtest.py” cu animații foarte îngrijite pe care îl puteți începe cu `sudo python python / examples / strandtest.py`.

Pasul 5: Pi-Hole

Pi-Hole
Pi-Hole

Pentru a crea un blocaj de adăugare la nivel de rețea, Pi-Hole este perfect. Se instalează doar cu `sudo curl -sSL https://install.pi-hole.net | bash`. Partea frumoasă este că va configura și un server web.

După ce rulați programul de instalare, veți dori să vă conectați la site-ul de administrare al routerului dvs. și să oferiți RPi o adresă IP statică și să o configurați ca server DHCP. Dacă ați stabilit un timp de închiriere scăzut, ar trebui să funcționeze acum gaura dvs. PI.

Pasul 6: Controlați luminile

Controlează luminile
Controlează luminile
Controlează luminile
Controlează luminile
Controlează luminile
Controlează luminile

Cel mai simplu mod de a controla neopixeli este cu programe mici Python. Dar utilizarea ssh de fiecare dată când doriți să aprindeți luminile este incomodă, mai ales pe un dispozitiv mobil. Așa că am decis să folosesc un mic site web ca telecomandă. Acesta este un risc de securitate, deoarece am dat permisiunea de rădăcină www-data fără verificarea parolei. Probabil că nu ar trebui să faceți acest site disponibil în afara rețelei dvs.

Pentru a ușura alegerea dintre tabloul de bord al PI-hole și telecomanda ușoară, i-am oferit utilizatorului accesul de scriere pi la / var / www / html cu `sudo chown -R pi / var / www.html` și am creat un fișier index.php în / var / www / html /. Ceva simplu, cum ar fi:

~~~

Telecomandă cu gaură Pi Index

~~~

e bine. Apoi am creat un nou folder numit lumini pentru a avea totul de la neopixeli împreună. Aici am creat colour.py pe baza strandtest.py din libery.

~~~

din importul neopixel * # Importă câteva biblioteci

import sisteme

ledul def (bandă, culoare, început, sfârșit): # Creați o funcție pentru a apela leduri

pentru i în interval (început, sfârșit):

strip.setPixelColor (i, culoare)

strip.show ()

BRIGHTNESS = int (sys.argv [4]) # Al patrulea parametru de pe linia de comandă va fi luminozitatea. (1-255)

COUNT = 50 # Cantitatea de leduri PIN = 12 # Pinul utilizat pe RPi

FREQ_HZ = 800000 # frecvența semnalului LED în hertz (de obicei 800 kHz)

DMA = 5 # canal DMA de utilizat pentru generarea semnalului (încercați 5)

INVERT = False # Adevărat pentru a inversa semnalul (atunci când se utilizează nivelul tranzistorului NPN

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

strip.begin ()

R = int (sys.argv [1]) # Cantitatea de roșu este primul parametru

G = int (sys.argv [2]) # Cantitatea de verde este al doilea parametru

B = int (sys.argv [3]) # Cantitatea de albastru este al treilea parametru

încerca:

leduri (bandă, Culoare (R, G, B), 0, 49) # Vor începe letele cu culoarea și luminozitatea alese.

cu excepția KeyboardInterrupt:

culoare (bandă, culoare (0, 0, 0), 0, 49)

~~~

Dacă rulați acest lucru cu sudo pe terminal, luminile ar trebui să se aprindă în culoarea specificată. Pentru a da permisiunea www-data sudo am adăugat `www-data ALL = (ALL) NOPASSWD: ALL)` în fișierul sudoers (/ etc / sudoers) direct sub utilizatorul root.

Pasul 7: Porniți luminile cu browserul

Apoi am creat anonther index.php, de data aceasta în / lights. ~~~

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

~~~

Când vizitez acum raspberrypi.local / lights / index.php ledurile vor deveni albe. Deși acesta este un început frumos, îmi place să am cel puțin niște butoane pe o telecomandă.

Pasul 8: Controlați luminile din browser

Am creat o interfață cu butoane folosind un formular html. Nu-mi place să fac lucruri care nu sunt necesare, așa că am creat un folder numit șabloane cu antetul, subsolul și codul principal PHP.

~~~

~~~

Pentru ca butoanele să funcționeze, am realizat un șablon BasicControl.php. În aceasta am specificat codul care ar trebui executat atunci când este apăsat un buton. Pentru că mi-au plăcut animațiile de test strandt, l-am inclus și pe acela. Strandtest-ul va continua la nesfârșit, așa că am făcut un alt buton pentru a opri procesul oricând vreau.

~~~ <? php

$ I = 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 ['verde'])) {$ R = 0; $ G = 255; $ B = 0; exec ("sudo python colour.py $ R $ G $ B $ I"); }

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

else if (isset ($ _ POST ['alb'])) {$ 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'); }?>

~~~

Pasul 9: Creați un șablon pentru antet și subsol

Acum totul funcționează, dar nu este prea plăcut să te uiți. După importarea antetului și subsolului, toate elementele site-ului sunt disponibile, pur și simplu fără stil.

Header.php:

~~~

Lumini

Lampjes

Controale de bază

Controale avansate

~~~

Și footer.php:

~~~

~~~

Pasul 10: Unele CSS pentru a face totul să arate un pic mai bine

Unele CSS pentru a face totul să arate un pic mai bine
Unele CSS pentru a face totul să arate un pic mai bine

După cum ați fi observat, folosesc un fișier css pentru a controla aspectul. Pentru a mă asigura că telecomanda mea poate fi utilizată și pe ecrane mai mici, am folosit și câteva cutii flexibile CSS cu autowrap.

~~~

/ * Foaie de stil pentru interfața de control al luminii *

* Se aplică pe fiecare pagină * /

corp {fundal-culoare: f9fcfa; font-family: Arial; marja: 0; }

h1 {culoare: alb; text-align: centru; }

p {font-family: verdana; dimensiunea fontului: 20 px; }

h2 {}

/ * Antetul * /

.header {înălțime: 10%; display: flex; justify-content: flex-start; align-items: centru; marja: 0px; umplutură-stânga: 5%; fundal: # 3F51B5; align-items: centru; }

. HeaderLinks {culoare: alb; }

.navbar {display: flex; flex: 30%; justify-content: spațiu-în jur; culoare de fundal: # 3F51B5; culoare albă; }

/ * Subsolul * /

.footer {fundal-culoare: # 3F51B5; înălțime: 10%; text-align: centru; }

/ * Index.php * /

.buttons {display: flex; direcție flexibilă: rând; flex-wrap: înveliș; justify-content: spațiu între; înălțime: 80%; align-items: flex-start; }

.buttons_index {padding: 0%; lățimea marginii: subțire; stil de bordură: solid; culoarea chenarului: negru; culoare de fundal: # 3949ab; culoare albă; font-family: sans-serif; lățime: 24%; înălțime: 20%; }

.buttons_index: hover {padding: 0%; lățimea marginii: subțire; stil de bordură: solid; culoarea chenarului: negru; culoare de fundal: # 536DFE; culoare albă; font-family: sans-serif; lățime: 24%; înălțime: 20%; }

~~~

Pasul 11: Mulțumesc

Si asta e. Totul funcționează pentru mine și sper că va funcționa și pentru dvs. dacă alegeți să încercați instructivul meu. Dacă ați încercat să copiați un cod, a trebuit să adaug câteva spații pentru încărcarea acestuia aici, așa că va trebui să le ștergeți înainte ca codul să devină din nou util.

Sper că ți-a plăcut să citești totul. Dacă aveți feedback, mi-ar plăcea să-l aud!

Recomandat: