Obsah:

Neopixely blokující reklamy: 11 kroků
Neopixely blokující reklamy: 11 kroků

Video: Neopixely blokující reklamy: 11 kroků

Video: Neopixely blokující reklamy: 11 kroků
Video: #0228 MkAvrCalculator - taktowanie procka 16 kHz 2024, Červenec
Anonim
Neopixely blokující reklamy
Neopixely blokující reklamy

Chtěl jsem vytvořit jednoduchý web jako vzdálený pro pás neopixelů připojených k mé Raspberry Pi zero a nadále jej používat k blokování reklam v mé síti pomocí Pi-Hole. Nejprve jsem chtěl do svého pokoje přidat nějaké diody, ale když jsem vše zapojil, uvědomil jsem si, že je nemám jak pohodlně ovládat. Rozhodl jsem se proto vytvořit jednoduchý web s několika základními možnostmi ovládání pomocí serveru apache, který již nainstaloval instalační program Pi-hole. Udělil jsem oprávnění www-data root, což je bezpečnostní riziko, takže byste měli webový server prokazatelně zpřístupnit vnějšímu světu. Začalo to hlavně pro moji vlastní dokumentaci a pak se to nějak stalo mým prvním instruktážním;) Takže bych opravdu ocenil, kdybyste mohli poukázat na to, že je něco nejasné nebo jestli mi něco úplně uniklo.

Krok 1: Použitý materiál

  • Raspberry Pi (Začínal jsem na Pi 2 a poté jsem přešel na WH, piny gpio se mohou mírně lišit, ale jinak je každý model v pořádku)

    • Pokud máte RPi bez vestavěného wifi, je také užitečný wifi adaptér.
    • Volitelně pouzdro pro malinový pi
  • 2 propojovací vodiče pro muže a ženy (například)
  • Neopixely ws2811 (použil jsem tyto)
  • 1 10W napájecí zdroj pro RPi (postačí stará nabíječka telefonu)
  • Napájecí zdroj 1 ~ 50 W pro Neopixely (použil jsem jeden takový, ale pravděpodobně by stačil menší, ale pokud byste chtěli více LED diod, zbývá vám prostor na rozšíření.)
  • Zásuvka konektoru samice (takto)

Krok 2: Příprava operačního systému

Připravte si operační systém
Připravte si operační systém

Stáhněte si nejnovější verzi Rasbian z raspberrypi.org Lite verze je pro tento projekt dobrá, pokud plánujete použít raspberry pi na něco jiného, můžete zvážit instalaci plné verze s gui. Poté jsem obrázek vypálil pomocí Etcheru. Poté, abych se ujistil, že se připojí k mé síti Wi -Fi, přidal jsem wpa_supplicant.conf do zaváděcího adresáře karty SD. Obsah souboru by měl vypadat takto:

~~~

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

síť = {

ssid = "SSID"

psk = "HESLO"

key_mgmt = WPA-PSK}

~~~

Abych povolil ssh, vytvořil jsem soubor s názvem ssh (bez jakékoli přípony) ve stejném adresáři. Tím zajistíte, že budete moci konfigurovat vše z jiného počítače ve vaší síti.

Krok 3: Připojení Neopixelů

Připojení Neopixelů
Připojení Neopixelů
Připojení Neopixelů
Připojení Neopixelů

Nejprve jsem zapojil napájecí zdroj do konektoru samice a vložil RPi do pouzdra. Odšrouboval jsem zemnicí kabel z LED diod (modrý kabel) a zástrčku propojovacího vodiče na zápornou stranu konektoru konektoru. Druhý konec propojovacího vodiče jsem připojil k uzemňovacímu kolíku na záhlaví gpio, použil jsem pin 6, ale přesné piny, které můžete použít, budou záviset na přesném modelu RPi, který používáte.

Za druhé jsem připojil na kladný konec konektoru jack 5v kabel z LED diod (červený kabel). Na mých LED diodách byl propojovací kabel na přídavném zemnícím kabelu a datovém kabelu (bílý kabel). Jen jsem ignoroval přídavný zemnící kabel, pro mé nastavení to bylo zbytečné. Na datovém kabelu jsem propojil propojovací kabel samec - samice s pinem gpio 12, opět přesný pin, který byste měli použít, závisí na vašem RPi. Poté jsem zapojil napájecí zdroj pro RPi a pixely. LED diody se na chvíli rozsvítily, pokud je vše správně zapojeno.

Krok 4: Spusťte RPi

Spusťte RPi
Spusťte RPi

Poté, co jsem dal RPi minutu na spuštění, jsem vyhledal IP adresu z maliny pomocí nmap. Ale jakýkoli síťový skener, informační panel vašeho routeru nebo ve většině případů jednoduše "raspberrypi.local" bude stačit. S těmito informacemi jsem se spojil s RPi přes ssh. Výchozí uživatel je pi s heslem malina. To je tedy první věc, kterou jsem změnil pomocí `passwd` bezprostředně po prvním přihlášení. Pokud byste chtěli přistupovat ke svému pi prostřednictvím ssh z mimo vaši místní síť, měli byste se podívat na autentizaci fail2ban a klíč. Osobně pro to nemám případ použití, takže to nechám jen s heslem.

Za druhé jsem aktualizoval software pomocí `sudo apt update && sudo apt upgrade -Y`. Také jsem potřeboval nějaký další software pro kompilaci libery `sudo apt-get install scons swig git python-dev build-essential -Y`. Pak jsem zkopíroval vynikající svobodu od Jeremyho Garffa na github `git clone https:// github.com/jgarff/rpi_ws281x.git`. Poté byl libery klonován, šel jsem do adresáře rpi_ws281x, použil scons a poté nainstaloval knihovnu s `sudo python python/setup.py install`. V pythonu/examples je pěkná ukázka „strandtest.py“s opravdu úhlednými animacemi, které můžete začít s `sudo python python/examples/strandtest.py`.

Krok 5: Pi-Hole

Pi-Hole
Pi-Hole

Pi-Hole je perfektní k vytvoření blokování přidávání v celé síti. Instaluje se pouze pomocí `sudo curl -sSL https://install.pi-hole.net | bash`. Pěkné na tom je, že také nastaví webový server.

Po spuštění instalačního programu se budete chtít přihlásit na administrátorský web vašeho routeru, dát vašemu RPi statickou IP adresu a nastavit jej jako DHCP server. Pokud jste nastavili nízkou dobu zapůjčení, měla by nyní fungovat vaše PI-díra.

Krok 6: Ovládejte světla

Ovládejte světla
Ovládejte světla
Ovládejte světla
Ovládejte světla
Ovládejte světla
Ovládejte světla

Nejjednodušší způsob ovládání neopixelů je pomocí malých pythonových programů. Ale používat ssh pokaždé, když chcete zapnout světla, je nepohodlné, zejména na mobilním zařízení. Rozhodl jsem se tedy použít malý web jako dálkové ovládání. TOTO JE RIZIKO BEZPEČNOSTI, protože jsem dal oprávnění www-data root bez ověření hesla. Pravděpodobně byste neměli tento web zpřístupňovat mimo vaši lan.

Aby bylo snadné si vybrat mezi palubní deskou PI -hole a dálkovým ovládáním světla, poskytl jsem uživateli pí pí přístup k/var/www/html pomocí `sudo chown -R pi/var/www.html` a vytvořil jsem soubor index.php v/var/www/html/. Něco jednoduchého jako:

~~~

Index Pi díra Dálkové ovládání světla

~~~

je v pořádku. Poté jsem vytvořil novou složku s názvem světla, aby bylo vše z neopixelů pohromadě. Zde jsem vytvořil colour.py na základě strandtest.py od svobody.

~~~

z importu neopixel * # Import některých knihoven

importovat sys

def led (pruh, barva, začátek, konec): # Vytvořte funkci pro volání LED diod

pro i v dosahu (začátek, konec):

strip.setPixelColor (i, barva)

strip.show ()

BRIGHTNESS = int (sys.argv [4]) # Čtvrtým parametrem na příkazovém řádku bude jas. (1-255)

COUNT = 50 # Počet LED diod PIN = 12 # Pin použitý na RPi

FREQ_HZ = 800 000 # frekvence signálu LED v hertzech (obvykle 800 kHz)

DMA = 5 # kanál DMA pro použití pro generování signálu (zkuste 5)

INVERT = False # True pro invertování signálu (při použití úrovně NPN tranzistoru

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

strip.begin ()

R = int (sys.argv [1]) # Množství červené je prvním parametrem

G = int (sys.argv [2]) # Druhým parametrem je množství zelené

B = int (sys.argv [3]) # Množství modré je třetím parametrem

Snaž se:

LED diody (proužek, barva (R, G, B), 0, 49) #Začne se zvolenou barvou a jasem.

kromě KeyboardInterrupt:

barva (proužek, barva (0, 0, 0), 0, 49)

~~~

Pokud to spustíte pomocí sudo na terminálu, světla by se měla rozsvítit v uvedené barvě. Abych dal www-data sudo oprávnění, přidal jsem `www-data ALL = (ALL) NOPASSWD: ALL)` do souboru sudoers (/etc/sudoers) přímo pod uživatelem root.

Krok 7: Zapněte světla v prohlížeči

Pak jsem vytvořil anonther index.php, tentokrát v /lights. ~~~

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

~~~

Když nyní navštívím raspberrypi.local/lights/index.php, LED diody zbělají. I když je to pěkný začátek, rád bych měl alespoň nějaká tlačítka na dálkovém ovládání.

Krok 8: Ovládejte světla z prohlížeče

Vytvořil jsem rozhraní s buttens pomocí html formuláře. Nerad dělám věci, které nejsou potřeba, a tak jsem vytvořil složku s názvem šablony se záhlavím, zápatím a hlavním kódem php. Můj (prozatím) final /lights/index.php vypadá takto:

~~~

~~~

Aby tlačítka fungovala, vytvořil jsem šablonu BasicControl.php. V tomto jsem zadal kód, který by měl být spuštěn při stisknutí tlačítka. Protože se mi líbily ty nejpodivnější animace, zařadil jsem i tu. Strandtest bude pokračovat nekonečně dlouho, takže jsem udělal další tlačítko pro zastavení procesu, kdykoli chci.

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

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

~~~

Krok 9: Vytvořte šablonu pro záhlaví a zápatí

Nyní to všechno funguje, ale není to příliš příjemné na pohled. Po importu záhlaví a zápatí jsou všechny prvky webu k dispozici, pouze nejsou stylizovány.

Header.php:

~~~

Světla

Lampjes

Základní ovládání

Pokročilé ovládání

~~~

A footer.php:

~~~

~~~

Krok 10: Některé CSS, aby vše vypadalo o něco lépe

Některé CSS, aby to všechno vypadalo o něco lépe
Některé CSS, aby to všechno vypadalo o něco lépe

Jak jste si možná všimli, k ovládání rozložení používám soubor css. Abych se ujistil, že je můj dálkový ovladač použitelný i na menších obrazovkách, použil jsem několik css flexboxů s automatickým zabalením.

~~~

/ * Styly pro rozhraní ovládání světla *

* Platí na každé stránce */

body {background-color: f9fcfa; rodina písem: Arial; okraj: 0; }

h1 {barva: bílá; zarovnání textu: střed; }

p {font-family: verdana; velikost písma: 20px; }

h2 {}

/ * Záhlaví */

.header {výška: 10%; displej: flex; justify-content: flex-start; align-items: center; okraj: 0px; polstrování vlevo: 5%; pozadí:#3F51B5; align-items: center; }

. HeaderLinks {barva: bílá; }

.navbar {display: flex; flex: 30%; justify-content: space-around; barva pozadí: #3F51B5; barva bílá; }

/ * Zápatí */

.footer {barva pozadí: #3F51B5; výška: 10%; zarovnání textu: střed; }

/ * Index.php */

.tlačítka {display: flex; flex-direction: řada; flex-wrap: wrap; justify-content: mezera mezi; výška: 80%; align-items: flex-start; }

.buttons_index {odsazení: 0%; šířka okraje: tenká; styl ohraničení: pevný; barva okraje: černá; barva pozadí: #3949ab; barva bílá; rodina písem: bezpatkové; šířka: 24%; výška: 20%; }

.buttons_index: hover {padding: 0%; šířka okraje: tenká; styl ohraničení: pevný; barva okraje: černá; barva pozadí: #536DFE; barva bílá; rodina písem: bezpatkové; šířka: 24%; výška: 20%; }

~~~

Krok 11: Děkuji

A to je vše. Všechno funguje pro mě a doufám, že to bude fungovat i pro vás, pokud se rozhodnete vyzkoušet můj návod. Pokud jste se pokusili zkopírovat nějaký kód, musel jsem přidat několik mezer pro jeho nahrání sem, takže je budete muset odstranit, než bude kód opět užitečný.

Doufám, že jste si čtení všeho užili. Pokud máte zpětnou vazbu, rád ji uslyším!

Doporučuje: