Съдържание:

Неопиксели за блокиране на реклами: 11 стъпки
Неопиксели за блокиране на реклами: 11 стъпки

Видео: Неопиксели за блокиране на реклами: 11 стъпки

Видео: Неопиксели за блокиране на реклами: 11 стъпки
Видео: Сборка ардуино + неопиксели со всяким. 2024, Ноември
Anonim
Неопиксели за блокиране на реклами
Неопиксели за блокиране на реклами

Исках да направя прост уебсайт като отдалечен за ивица неопиксели, свързани към моята нула Raspberry Pi и да продължа да го използвам, за да блокирам реклами в мрежата си с помощта на Pi-Hole. Първо просто исках да добавя някои светодиоди в стаята си, но свързвайки всичко, осъзнах, че нямам начин удобно да ги контролирам. Затова реших да създам прост уебсайт с някои основни опции за управление, използвайки сървъра apache, който инсталаторът на Pi-hole вече е настроил. Предоставих root-разрешения на www-data, което представлява риск за сигурността, така че вероятно трябва да направите уеб сървъра недостъпен за външния свят. Това започна предимно за моята собствена документация и по някакъв начин се превърна в първата ми инструкция;) Така че наистина ще съм благодарен, ако посочите, ако нещо не е ясно или ако съм пропуснал нещо напълно.

Стъпка 1: Използвани материали

  • Raspberry Pi (Започнах на Pi 2 и след това смених WH, gpio щифтовете може да са малко по -различни, но в противен случай всеки модел е добре)

    • Ако имате RPi без вграден wifi, wifi адаптерът също е полезен.
    • По желание калъф за малиново пи
  • 2 джъмперни проводници мъже-жени (например)
  • Neopixels ws2811 (използвах тези)
  • 1 10W захранване за RPi (Старо зарядно устройство за телефон ще свърши работа)
  • 1 ~ 50 W захранване за неопикселите (използвах такъв като този, но вероятно по -малък би бил достатъчен, но ако искате повече светодиоди, имате малко място за разширяване.)
  • Щепсел за женски жак (като този)

Стъпка 2: Подгответе операционната система

Подгответе операционната система
Подгответе операционната система

Изтеглете най -новата версия Rasbian от raspberrypi.org Облекчената версия е добра за този проект, ако планирате да използвате raspberry pi за нещо друго, може да помислите за инсталиране на пълната версия с gui. След това изгорих изображението с Etcher. След това, за да се уверя, че ще се свърже с моята wifi мрежа, добавих wpa_supplicant.conf в зареждащата директория на sd картата. Съдържанието на файла трябва да изглежда така:

~~~

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

мрежа = {

ssid = "SSID"

psk = "ПАРОЛ"

key_mgmt = WPA-PSK}

~~~

За да активирам ssh, създадох файл, наречен ssh (без никакво разширение) в същата директория. Това ще гарантира, че ще можете да конфигурирате всичко от друг компютър във вашата мрежа.

Стъпка 3: Свързване на неопикселите

Свързване на неопикселите
Свързване на неопикселите
Свързване на неопикселите
Свързване на неопикселите

Първо включих захранването в конектора на женския жак и сложих RPi в калъф. Завих заземителния кабел от светодиодите (синия кабел) и мъжка страна на джъмпер проводник в отрицателната страна на жака. Другият край на джъмперния проводник, който свързах със заземен щифт на заглавката на gpio, използвах щифт 6, но точните щифтове, които можете да използвате, ще зависят от точния модел RPi, който използвате.

Второ, свързах към положителния край на конектора на жака 5v кабела от светодиодите (червения кабел). На моя светодиод имаше съединителен проводник на допълнителен заземен кабел и кабел за данни (бял кабел). Просто пренебрегнах допълнителния заземен кабел, той беше ненужен за моята настройка. На кабела за данни свързах мъжки към женски джъмпер проводник с gpio pin 12, отново точният щифт, който трябва да използвате, зависи от вашия RPi. След това включих захранването си за RPi и пикселите. Светодиодите светнаха за кратко, ако всичко е свързано правилно.

Стъпка 4: Стартирайте RPi

Стартирайте RPi
Стартирайте RPi

След като дадох на RPi минута за зареждане, потърсих IP адреса от малината с nmap. Но всеки мрежов скенер, информационният панел на вашия рутер или в повечето случаи просто „raspberrypi.local“ще свършат работа. С тази информация се свързах с RPi чрез ssh. Потребителят по подразбиране е pi с паролата малинка. Това е първото нещо, което промених, използвайки `passwd` директно след първото влизане. Ако искате да получите достъп до вашето pi чрез ssh извън вашата локална мрежа, трябва да разгледате fail2ban и удостоверяване на ключа. Аз лично нямам случай на използване за това, затова ще го оставя само с парола.

Второ, актуализирах софтуера, използвайки `sudo apt update && sudo apt upgrade -Y`. Имах нужда и от допълнителен софтуер, за да компилирам libery `sudo apt-get install scons swig git python-dev build-съществен -Y`. След това копирах отличната свобода от Джеръми Гарф на github `git clone https:// github.com/jgarff/rpi_ws281x.git`. След това свободата беше клонирана, отидох в директорията rpi_ws281x, използвах scons и след това инсталирах библиотеката с `sudo python python/setup.py install`. В python/examples е хубава демонстрация "strandtest.py" с наистина спретнати анимации, които можете да започнете с `sudo python python/examples/strandtest.py`.

Стъпка 5: Pi-Hole

Pi-Hole
Pi-Hole

За да създадете блокер за добавяне в цялата мрежа, Pi-Hole е перфектен. Инсталира се само с „sudo curl -sSL https://install.pi-hole.net | баш`. Хубавото е, че ще настрои и уеб сървър.

След като стартирате инсталатора, ще искате да влезете в администраторския сайт на вашия рутер и да дадете на RPi статичен IP адрес и да го настроите като DHCP сървър. Ако сте задали ниско време на лизинг, вашата PI-дупка би трябвало да работи сега.

Стъпка 6: Контролирайте светлините

Контролирайте светлините
Контролирайте светлините
Контролирайте светлините
Контролирайте светлините
Управлявайте светлините
Управлявайте светлините

Най -лесният начин за контрол на неопикселите е с малки програми на python. Но да използвате ssh всеки път, когато искате да включите светлините, е неудобно, особено на мобилно устройство. Затова реших да използвам малък уебсайт като дистанционно управление. ТОВА Е РИСК ЗА СИГУРНОСТ, тъй като дадох root root-разрешение без проверка на парола. Вероятно не трябва да правите този сайт достъпен извън вашата мрежа.

За да улесня избора между таблото за управление на PI -дупката и светлинното дистанционно, дадох на потребителя pi достъп за запис до/var/www/html с `sudo chown -R pi/var/www.html` и създадох index.php файл в/var/www/html/. Нещо просто като:

~~~

Индекс Pi дупка Светлинно дистанционно

~~~

е наред. След това създадох нова папка, наречена светлини, за да има всичко от неопикселите заедно. Тук създадох colour.py въз основа на strandtest.py от libery.

~~~

от neopixel import * # Импортирайте някои библиотеки

import sys

def led (лента, цвят, начало, край): # Създайте функция за извикване на светодиоди

за i в обхват (начало, край):

strip.setPixelColor (i, цвят)

strip.show ()

BRIGHTNESS = int (sys.argv [4]) # Четвъртият параметър в командния ред ще бъде яркостта. (1-255)

COUNT = 50 # Размерът на светодиодите PIN = 12 # Пинът, използван на RPi

FREQ_HZ = 800000 # Честота на LED сигнала в херци (обикновено 800khz)

DMA = 5 # DMA канал за генериране на сигнал (опитайте 5)

INVERT = False # True за инвертиране на сигнала (когато се използва ниво на NPN транзистор

лента = Adafruit_NeoPixel (COUNT, PIN, FREQ_HZ, DMA, INVERT, BRIGHTNESS)

strip.begin ()

R = int (sys.argv [1]) # Количеството червено е първият параметър

G = int (sys.argv [2]) # Количеството зелено е вторият параметър

B = int (sys.argv [3]) # Количеството на синьото е третият параметър

опитвам:

светодиоди (лента, цвят (R, G, B), 0, 49) #Ще стартират разрешенията с избрания цвят и яркост.

с изключение на KeyboardInterrupt:

цвят (лента, цвят (0, 0, 0), 0, 49)

~~~

Ако стартирате това с sudo на терминала, светлините трябва да светнат в посочения цвят. За да дам разрешение на sudo на www-data, добавих „www-data ALL = (ALL) NOPASSWD: ALL)“към файла sudoers (/etc/sudoers) директно под root потребителя.

Стъпка 7: Включете осветлението с браузъра

След това създадох anonther index.php, този път в /lights. ~~~

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

~~~

Когато сега посетя raspberrypi.local/lights/index.php, светодиодите ще побелеят. Въпреки че това е хубаво начало, обичам да имам поне няколко бутона на дистанционното.

Стъпка 8: Управлявайте светлините от браузъра

Създадох интерфейс с buttens, използвайки html формуляр. Не обичам да правя неща, които не са необходими, затова създадох папка, наречена шаблони с моята заглавка, долен колонтитул и основния php код. Моят (засега) окончателен /lights/index.php изглежда така:

~~~

~~~

За да работят бутоните, направих шаблон BasicControl.php. В това посочих кода, който трябва да се изпълни при натискане на бутон. Тъй като ми харесаха най -тънките анимации, включих и тази. Най -тънкият ще продължи безкрайно дълго, затова направих друг бутон, за да спра процеса, когато пожелая.

~~~ <? 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"); }

иначе if (isset ($ _ POST ['off'])) {shell_exec ('sudo python off.py'); }

else if (isset ($ _ POST ['reboot']))) {shell_exec ('sudo reboot now'); }?>

~~~

Стъпка 9: Създайте шаблон за заглавката и долния колонтитул

Сега всичко работи, но не е много приятно за гледане. След импортирането на заглавката и долния колонтитул всички елементи на сайта са налични, само че не са стилизирани.

Header.php:

~~~

Светлини

Лампджес

Основни контроли

Разширени контроли

~~~

И footer.php:

~~~

~~~

Стъпка 10: Някои Css, за да изглежда всичко по -добре

Някои Css, за да изглежда всичко по -добре
Някои Css, за да изглежда всичко по -добре

Както може би сте забелязали, използвам css файл за контрол на оформлението. За да съм сигурен, че моето дистанционно може да се използва и на по -малки екрани, използвах някои css flexboxes с автоматично превключване.

~~~

/ * Стилова таблица за интерфейса за управление на светлината *

* Важи за всяка страница */

body {background-color: f9fcfa; семейство шрифтове: Arial; марж: 0; }

h1 {цвят: бял; подравняване на текст: център; }

p {font-family: verdana; размер на шрифта: 20px; }

h2 {}

/ * Заглавката */

.заглавие {височина: 10%; дисплей: гъвкав; justify-content: flex-start; align-items: center; марж: 0px; подложка-ляво: 5%; фон:#3F51B5; align-items: center; }

. HeaderLinks {цвят: бял; }

.navbar {дисплей: flex; гъвкавост: 30%; justify-content: пространство-около; цвят на фона: #3F51B5; цвят: бял; }

/ * Долният колонтитул */

.footer {background-color: #3F51B5; височина: 10%; подравняване на текст: център; }

/ * Index.php */

. бутони {display: flex; посока на огъване: ред; flex-wrap: wrap; justify-content: интервал между; височина: 80%; align-items: flex-start; }

.buttons_index {пълнеж: 0%; ширина на границата: тънка; бордюрен стил: плътен; цвят на границата: черен; background-color: #3949ab; цвят: бял; семейство шрифтове: sans-serif; ширина: 24%; височина: 20%; }

.buttons_index: hover {padding: 0%; ширина на границата: тънка; бордюрен стил: плътен; цвят на границата: черен; цвят на фона: #536DFE; цвят: бял; семейство шрифтове: sans-serif; ширина: 24%; височина: 20%; }

~~~

Стъпка 11: Благодаря ви

И това е. Всичко работи за мен и се надявам, че ще работи и за вас, ако изберете да опитате моите инструкции. Ако се опитате да копирате някакъв код, трябваше да добавя няколко интервала за качването му тук, така че ще трябва да ги изтриете, преди кодът да стане отново полезен.

Надявам се да ви е харесало да прочетете всичко. Ако имате обратна връзка, ще се радвам да я чуя!

Препоръчано: