Taula de continguts:

Neopíxels de bloqueig d'anuncis: 11 passos
Neopíxels de bloqueig d'anuncis: 11 passos

Vídeo: Neopíxels de bloqueig d'anuncis: 11 passos

Vídeo: Neopíxels de bloqueig d'anuncis: 11 passos
Vídeo: Bossa Nova Covers Popular Songs (5 Hours) 2024, De novembre
Anonim
Neopíxels de bloqueig d’anuncis
Neopíxels de bloqueig d’anuncis

Volia fer un lloc web senzill i remot per a una tira de neopíxels connectats al meu Raspberry Pi zero i continuar utilitzant-lo per bloquejar anuncis a la meva xarxa mitjançant Pi-Hole. Primer, només volia afegir alguns leds a la meva habitació, però, tot connectant-ho, em vaig adonar que no tenia forma de controlar-los convenientment. Per tant, vaig decidir crear un lloc web senzill amb algunes opcions bàsiques de control mitjançant el servidor apache que l'instal·lador de Pi-hole ja havia configurat. He concedit permisos d'arrel de dades www, que suposa un risc de seguretat, de manera que hauríeu de fer que el servidor web no estigui disponible per al món exterior. Això va començar principalment per la meva pròpia documentació i, d'alguna manera, es va convertir en el meu primer instructable;) Així que agrairia molt que poguéssiu assenyalar si alguna cosa no està clara o si he trobat a faltar alguna cosa.

Pas 1: materials usats

  • Raspberry Pi (vaig començar amb un Pi 2 i després vaig canviar a WH, els pins gpio poden ser lleugerament diferents, però en cas contrari, tots els models estan bé)

    • Si teniu un RPi sense wifi integrat, també és útil un adaptador wifi.
    • Opcionalment, una funda per al raspberry pi
  • 2 cables de pont masculí-femení (per exemple)
  • Neopíxels ws2811 (els he utilitzat)
  • 1 font d'alimentació de 10 W per al RPi (un carregador de telèfon antic farà)
  • Font d'alimentació d'1 ~ 50W per als Neopixels (n'he utilitzat un així, però probablement n'hi hauria prou amb un de més petit, però si voleu més leds, us queda espai per ampliar).
  • Endoll de connector femella (com aquest)

Pas 2: prepareu el sistema operatiu

Prepareu el sistema operatiu
Prepareu el sistema operatiu

Descarregueu la versió més recent de Rasbian des de raspberrypi.org La versió lite està bé per a aquest projecte, si teniu previst utilitzar el raspberry pi per a una altra cosa, també us recomanem que instal·leu la versió completa amb gui. Després vaig cremar la imatge amb Etcher. Després d'això, per assegurar-me que es connectarà amb la meva xarxa wifi, he afegit wpa_supplicant.conf al directori d'arrencada de la targeta sd. El contingut del fitxer hauria de ser així:

~~~

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

xarxa = {

ssid = "SSID"

psk = "CONTRASENYA"

key_mgmt = WPA-PSK}

~~~

Per habilitar ssh he creat un fitxer anomenat ssh (sense cap extensió) al mateix directori. Això us assegurarà que pugueu configurar tot el que vulgueu des d’un altre equip al vostre lan.

Pas 3: Connexió dels Neopíxels

Connexió dels Neopíxels
Connexió dels Neopíxels
Connexió dels Neopíxels
Connexió dels Neopíxels

Primer vaig endollar la font d'alimentació del connector femella i vaig posar el RPi en una funda. Vaig cargolar el cable de terra dels leds (el cable blau) i un costat mascle d'un cable de pont al costat negatiu del connector de la presa. L'altre extrem del cable de pont que vaig connectar a un pin de terra de la capçalera de gpio, he utilitzat el pin 6, però els pins exactes que podeu utilitzar dependran del model RPi exacte que utilitzeu.

En segon lloc, vaig connectar a l'extrem positiu del connector de la presa el cable de 5 V dels leds (el cable vermell). Al meu led, hi havia un connector de cable de pont en un cable de terra addicional i el cable de dades (el cable blanc). Acabo d'ignorar el cable de terra addicional, no era necessari per a la meva configuració. Al cable de dades he connectat un cable de pont masculí a femella amb el pin gpio 12, de nou, el pin exacte que heu d'utilitzar depèn del vostre RPi. Després vaig endollar la font d'alimentació del RPi i dels píxels. Els leds es van encendre durant un breu moment, si tot està connectat correctament.

Pas 4: inicieu el RPi

Inicieu el RPi
Inicieu el RPi

Després de donar al RPi un minut aproximadament per arrencar, vaig buscar l'adreça IP del gerd amb nmap. Però qualsevol escàner de xarxa, el tauler d'informació del vostre encaminador o, en la majoria dels casos, simplement "raspberrypi.local" ho farà. Amb aquesta informació em vaig connectar amb RPi mitjançant ssh. L’usuari per defecte és pi amb la contrasenya raspberry. Per tant, això és el primer que he canviat amb `passwd` directament després del primer inici de sessió. Si voleu accedir al vostre pi mitjançant ssh des de fora de la vostra xarxa local, hauríeu de buscar l'autenticació de claus i fall2ban. Personalment, no en tinc cap cas d’ús, així que el deixaré només amb una contrasenya.

En segon lloc, he actualitzat el programari utilitzant `sudo apt update && sudo apt upgrade -Y`. També necessitava un programari addicional per compilar el libery `sudo apt-get install scons swig git python-dev build-essential -Y`. Després vaig copiar l'excel·lent libery de Jeremy Garff a github `git clone https:// github.com / jgarff / rpi_ws281x.git`. Després d'això es va clonar el libery, vaig anar al directori rpi_ws281x, vaig utilitzar scons i després vaig instal·lar el libary amb `sudo python python / setup.py install`. A python / examples hi ha una bonica demostració "strandtest.py" amb animacions molt netes que podeu començar amb `sudo python python / examples / strandtest.py`.

Pas 5: Pi-Hole

Pi-Hole
Pi-Hole

Per crear un bloqueig d’afegits a tota la xarxa, Pi-Hole és perfecte. S'instal·la només amb `sudo curl -sSL https://install.pi-hole.net | bash`. La part positiva és que també configurarà un servidor web.

Després d’executar l’instal·lador, voldreu iniciar sessió al lloc d’administració del vostre enrutador i donar-li al vostre RPi una adreça IP estàtica i configurar-lo com a servidor DHCP. Si heu establert un temps de lloguer baix, el vostre forat PI hauria de funcionar ara.

Pas 6: Controleu els llums

Controla les llums
Controla les llums
Controla les llums
Controla les llums
Controla les llums
Controla les llums

La forma més fàcil de controlar els neopíxels és amb petits programes python. Però utilitzar ssh cada vegada que vulgueu encendre els llums és incòmode, sobretot en un dispositiu mòbil. Així que vaig decidir utilitzar un lloc web petit com a control remot. AQUEST ÉS UN RISC DE SEGURETAT, perquè vaig donar permís a l'arrel www-data sense verificar la contrasenya. Probablement no hauríeu de fer que aquest lloc estigui disponible fora de la vostra xarxa.

Per facilitar la tria entre el tauler de PI-hole i el control remot de llum, vaig donar a l’usuari pi accés d’escriptura a / var / www / html amb `sudo chown -R pi / var / www.html` i vaig crear un fitxer index.php a / var / www / html /. Alguna cosa senzilla com:

~~~

Índex Pi forat a distància

~~~

està bé. Després vaig crear una nova carpeta anomenada llums per tenir-ho tot des dels neopíxels junts. Aquí he creat colour.py basat en el strandtest.py de la biblioteca.

~~~

des de la importació neopixel * # Importa algunes biblioteques

importar sistemes

led def (tira, color, inici, final): # Creeu una funció per cridar leds

per a mi en el rang (inici, fi):

strip.setPixelColor (i, color)

strip.show ()

BRIGHTNESS = int (sys.argv [4]) # El quart paràmetre de la línia d'ordres serà la brillantor. (1-255)

COUNT = 50 # La quantitat de leds PIN = 12 # El pin que s'utilitza al RPi

FREQ_HZ = 800000 # freqüència del senyal LED en Hz (normalment 800 kHz)

DMA = 5 # canal DMA que cal utilitzar per generar senyal (proveu 5)

INVERT = False # True per invertir el senyal (quan s'utilitza el nivell de transistor NPN

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

strip.begin ()

R = int (sys.argv [1]) # La quantitat de vermell és el primer paràmetre

G = int (sys.argv [2]) # La quantitat de verd és el segon paràmetre

B = int (sys.argv [3]) # La quantitat de blau és el tercer paràmetre

provar:

leds (tira, Color (R, G, B), 0, 49) # Iniciarà els leters amb el color i la brillantor escollits.

excepte KeyboardInterrupt:

color (tira, color (0, 0, 0), 0, 49)

~~~

Si executeu això amb sudo al terminal, els llums haurien d’encendre’s amb el color especificat. Per donar permís a www-data sudo, he afegit "www-data ALL = (ALL) NOPASSWD: ALL)" al fitxer sudoers (/ etc / sudoers) directament sota l'usuari root.

Pas 7: enceneu els llums amb el navegador

Després vaig crear anonther index.php, aquesta vegada a / lights. ~~~

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

~~~

Quan ara visiti raspberrypi.local / lights / index.php, els leds es tornaran blancs. Tot i que és un bon començament, m'agrada tenir almenys alguns botons en un comandament a distància.

Pas 8: Controleu els llums des del navegador

Vaig crear una interfície amb buttens mitjançant un formulari html. No m'agrada fer coses que no són necessàries, així que he creat una carpeta anomenada plantilles amb la capçalera, el peu de pàgina i el codi php principal. El meu (per ara) final /lights/index.php té aquest aspecte:

~~~

~~~

Per fer funcionar els botons he creat una plantilla BasicControl.php. En això he especificat el codi que s'hauria d'executar quan es prem un botó. Com que m’agradaven les animacions de proves més complexes, també les vaig incloure. La prova de cadena continuarà infinitament, de manera que he fet un altre botó per aturar el procés sempre que vulgui.

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

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

else if (isset ($ _ POST ['blanc'])) {$ 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 ['reiniciar']))) {shell_exec ('sudo reiniciar ara'); }?>

~~~

Pas 9: creeu una plantilla per a la capçalera i el peu de pàgina

Ara tot funciona, però no és massa agradable de mirar. Després d'importar la capçalera i el peu de pàgina, tots els elements del lloc estan disponibles, però no tenen estil.

Header.php:

~~~

Llums

Lampjes

Controls bàsics

Controls avançats

~~~

I el footer.php:

~~~

~~~

Pas 10: alguns CSS perquè tot sembli una mica millor

Alguns CSS perquè tot sembli una mica millor
Alguns CSS perquè tot sembli una mica millor

Com hauríeu notat, estic fent servir un fitxer css per controlar el disseny. Per assegurar-me que el comandament a distància es pugui utilitzar en pantalles més petites, també he utilitzat algunes caixes flexibles CSS amb embolcall automàtic.

~~~

/ * Full d'estil per a la interfície de control de llum *

* S'aplica a totes les pàgines * /

cos {fons-color: f9fcfa; font-family: Arial; marge: 0; }

h1 {color: blanc; text-align: centre; }

p {font-family: verdana; mida de la lletra: 20 px; }

h2 {}

/ * La capçalera * /

.header {altura: 10%; pantalla: flex; justify-content: flex-start; align-items: centre; marge: 0px; farciment-esquerra: 5%; fons: # 3F51B5; align-items: centre; }

. HeaderLinks {color: white; }

.navbar {display: flex; flex: 30%; justify-content: espai al voltant; color de fons: # 3F51B5; color: blanc; }

/ * El peu de pàgina * /

.footer {background-color: # 3F51B5; alçada: 10%; text-align: centre; }

/ * Index.php * /

.buttons {display: flex; flex-direction: fila; flex-wrap: embolcall; justify-content: espai entre; alçada: 80%; align-items: flex-start; }

.buttons_index {farcit: 0%; ample de vora: prim; estil de vora: sòlid; color de la vora: negre; color de fons: # 3949ab; color: blanc; font-family: sans-serif; amplada: 24%; alçada: 20%; }

.buttons_index: hover {padding: 0%; ample de vora: prim; estil de vora: sòlid; color de la vora: negre; color de fons: # 536DFE; color: blanc; font-family: sans-serif; amplada: 24%; alçada: 20%; }

~~~

Pas 11: gràcies

I ja està. Tot funciona per a mi i espero que també funcioni per a vosaltres si trieu provar la meva instrucció. Si heu intentat copiar algun codi, hauria d'afegir alguns espais per penjar-lo aquí, de manera que haurà de suprimir-los abans que el codi torni a ser útil.

Espero que us hagi agradat llegir-ho tot. Si teniu comentaris, m'encantaria escoltar-los.

Recomanat: