Мазмуну:

Жарнакты бөгөөчү неопикселдер: 11 кадам
Жарнакты бөгөөчү неопикселдер: 11 кадам

Video: Жарнакты бөгөөчү неопикселдер: 11 кадам

Video: Жарнакты бөгөөчү неопикселдер: 11 кадам
Video: Даражарнақты және қосжарнақты өсімдіктер. 8 сынып. 2024, Ноябрь
Anonim
Adoping Neopixels
Adoping Neopixels

Мен Raspberry Pi нөлүмө туташкан неопикселдердин тилкеси үчүн жөнөкөй веб-сайтты алыстан түзүп, Pi-Hole аркылуу тармагымдагы жарнамаларды бөгөө үчүн колдонууну кааладым. Биринчиден, мен бөлмөмө бир нече лед кошуп алгым келди, бирок бардыгын зым менен туташтырып, аларды ыңгайлуу түрдө башкара албай турганымды түшүндүм. Ошентип, Pi-hole орнотуучусу буга чейин орнотулган apache серверин колдонуп, кээ бир негизги башкаруу жолдору бар жөнөкөй вебсайт түзүүнү чечтим. Мен www-data root уруксаттарын бердим, бул коопсуздук коркунучу, андыктан веб-серверди тышкы дүйнө үчүн жеткиликтүү кылбоо керек. Бул негизинен жеке документтерим үчүн башталды жана кандайдыр бир жол менен менин биринчи инструктивим болуп калды;) Ошентип, эгерде бир нерсе түшүнүксүз болсо же мен бир нерсени толугу менен сагынып калсам, көрсөтсөңүз, мен абдан ыраазы болом.

1 -кадам: колдонулган материалдар

  • Raspberry Pi (мен Pi 2де баштадым, андан кийин WHге өзгөрдүм, gpio казыктары бир аз башкача болушу мүмкүн, бирок антпесе ар бир модель жакшы)

    • Эгерде сизде Wi -Fi орнотулбаган RPi болсо, анда Wi -Fi адаптери дагы пайдалуу болот.
    • Милдеттүү түрдө малина пи үчүн бир жагдай
  • 2 Эркек-ургаачы секирүүчү зымдар (мисалы)
  • Neopixels ws2811 (мен муну колдондум)
  • RPi үчүн 10W кубаттуулугу (Эски телефондун заряддагыч түзүлүшү)
  • Neopixels үчүн 1 ~ 50W электр менен камсыздоо (мен муну колдонгом, бирок, балким кичирээк бирөө жетиштүү болмок, бирок эгерде көбүрөөк леддерди кааласаңыз, анда сизде кеңейтүү үчүн бош орун бар.)
  • Аялдын уячасынын туташтыргычы (ушундай)

2 -кадам: Иштетүү системасын даярдаңыз

Иштетүү системасын даярдаңыз
Иштетүү системасын даярдаңыз

Raspberrypi.org сайтынан Rasbian акыркы версиясын жүктөп алыңыз Бул долбоор үчүн лит версиясы жакшы, эгер сиз малина пиин башка нерсеге колдонууну пландап жатсаңыз, анда gui менен толук версиясын орнотууну ойлонсоңуз болот. Анан мен Etcher менен сүрөттү өрттөп жибердим. Андан кийин, ал менин Wi -Fi тармагыма туташаарына ынануу үчүн, мен SD картанын жүктөө каталогуна wpa_supplicant.conf коштум. Файлдын мазмуну мындай болушу керек:

~~~

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

тармак = {

ssid = "SSID"

psk = "ПАРОЛЬ"

key_mgmt = WPA-PSK}

~~~

Sshти иштетүү үчүн, мен ошол каталогдо ssh (эч кандай кеңейтүүсүз) деп аталган файлды түздүм. Бул сиздин lan башка компьютерден бардыгын конфигурациялай алаарыңызды текшерет.

3 -кадам: Неопикселдерди туташтыруу

Неопикселдерди туташтыруу
Неопикселдерди туташтыруу
Неопикселдерди туташтыруу
Неопикселдерди туташтыруу

Биринчиден, мен аялдын уячасынын туташтыргычы менен электр энергиясын сайып, бир корпуска RPi салып койдум. Мен жер кабелин ледтерден (көк кабель) жана секирүүчү зымдын эркек тарабын джек коннекторунун терс жагына бурап алдым. Өткөргүч зымдын экинчи учу мен gpio башындагы жерге туташтыргычка туташтырылдым, мен 6 -пинди колдондум, бирок так такалар сиз колдонуп жаткан RPi моделине жараша болот.

Экинчиден, мен джек туташтыргычынын оң жагына 5в кабелди ледтерден (кызыл кабель) туташтырдым. Менин жолумда алар кошумча жер кабелиндеги секиргич зым туташтыргычы жана маалымат кабели (ак кабель) болгон. Мен жөн гана кошумча жер кабелин этибарга алган жокмун, бул менин орнотуум үчүн керексиз эле. Маалымат кабелинде мен эркекти аял менен секирүүчү зымга gpio pin 12 менен туташтырдым, дагы сиз колдонуу керек болгон так сиздин RPiге көз каранды. Андан кийин мен RPi жана пикселдер үчүн электр энергиясын сайдым. Леддер кыска убакытка жарык чачты, эгерде баары туура зымдалса.

4 -кадам: RPi баштоо

RPi баштаңыз
RPi баштаңыз

Кийинчерээк жүктөө үчүн RPiге бир мүнөт же андан көп убакыт берип, мен nmap менен малинадан IP дарегин карадым. Бирок ар кандай тармак сканери, роутериңиздин маалымат панели же көпчүлүк учурда жөн гана "raspberrypi.local" жасайт. Бул маалымат менен мен ssh. The аркылуу RPi менен туташтым демейки колдонуучу малина сырсөзү менен pi. Ошентип, мен биринчи жолу киргенден кийин түздөн -түз passwd'ди колдонуп өзгөрттүм. Эгерде сиз пиңизге ssh аркылуу жергиликтүү тармагыңыздын сыртынан киргиңиз келсе, fail2ban жана ачкычтын аныктыгын текшеришиңиз керек. Менин жеке колумда мындай учур жок, ошондуктан мен аны сырсөз менен эле калтырам.

Экинчиден, мен программаны sudo apt update && sudo apt upgrade -Y` аркылуу жаңырттым. Мага ошондой эле libery `sudo apt-get scons swig git python-dev build-essential -Y` компиляциялоо үчүн кошумча программалык камсыздоо керек болчу. Андан кийин мен Джереми Гарфтан мыкты либерияны github `git clone https:// github.com/jgarff/rpi_ws281x.git`ге көчүрдүм. Андан кийин либерий клондолду, мен rpi_ws281x каталогуна бардым, скондорду колдондум, андан кийин libary'ди sudo python python/setup.py install` менен орноттум. Python/мисалдарда чындыгында тыкан анимациялары бар "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 | bash`. Жакшы жагы-бул веб-серверди да орнотот.

Орноткучту иштеткенден кийин, роутериңиздин административдик сайтына кирип, RPiге статикалык IP дарегин берип, аны DHCP Server катары орнотууну каалайсыз. Эгерде сиз төмөн ижара убакытын белгилесеңиз, сиздин PI-тешик азыр иштеши керек.

6 -кадам: Жарыкты көзөмөлдөө

Жарыктарды көзөмөлдөө
Жарыктарды көзөмөлдөө
Жарыктарды көзөмөлдөө
Жарыктарды көзөмөлдөө
Жарыктарды көзөмөлдөө
Жарыктарды көзөмөлдөө

Неопикселдерди башкаруунун эң оңой жолу - кичинекей питон программалары. Жарыкты күйгүзүүнү каалаган сайын sshти колдонуу ыңгайсыз, айрыкча мобилдик түзмөктө. Ошентип, мен кичинекей веб -сайтты алыстан башкаруу катары колдонууну чечтим. БУЛ КООПСУЗДУК РИЗКИ, анткени мен www-data тамырына сырсөздү текшербестен уруксат бердим. Балким, бул сайтты тилден тышкары жеткиликтүү кылбашыңыз керек.

PI -тешиктин башкаруу панели менен жарыктын алыстан башкаруусун тандоо оңой болушу үчүн, мен колдонуучуга pi/su/chown -R pi/var/www.html` менен/var/www/html жазууга мүмкүнчүлүк бердим жана мен index.php файлы/var/www/html/. Бир нерсе сыяктуу жөнөкөй:

~~~

Index Pi тешиги Light пульту

~~~

жакшы. Андан кийин неопикселдерден баштап баары чогуу болушу үчүн жарык деп аталган жаңы папканы түздүм. Бул жерде мен liberyден strandtest.pyдин негизинде colour.py түздүм.

~~~

neopixel импорттон * # Кээ бир китепканаларды импорттоо

sys импорттоо

def led (тилке, түс, баштоо, аяктоо): # LEDлерди чакыруу үчүн функция түзүңүз

i үчүн диапазондо (башталышы, аягы):

strip.setPixelColor (i, түс)

strip.show ()

BRIGHTNESS = int (sys.argv [4]) # Буйрук сабындагы төртүнчү параметр жарык болот. (1-255)

COUNT = 50 # LEDдын суммасы PIN = 12 # RPiде колдонулган пин

FREQ_HZ = 800000 # LED сигналынын жыштыгы герцте (көбүнчө 800 кГц)

DMA = 5 # DMA каналы сигналды жаратуу үчүн колдонулат (5 аракет кылыңыз)

INVERT = False # True сигналды буруш үчүн (NPN транзисторунун деңгээлин колдонууда

strip = 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]) # Көк өлчөмү - үчүнчү параметр

аракет кыл:

leds (тилке, Түс (R, G, B), 0, 49) #Тандалган түс жана жарыктык менен баштайт.

KeyboardInterruptдон башка:

түс (тилке, Түс (0, 0, 0), 0, 49)

~~~

Эгер сиз муну терминалда sudo менен иштетсеңиз, жарыктар көрсөтүлгөн түстө күйүшү керек. Www-data sudo уруксатын берүү үчүн мен түздөн-түз root колдонуучунун астындагы sudoers файлына (/etc/sudoers) www www-data ALL = (ALL) NOPASSWD: ALL)` коштум.

7 -кадам: Браузер менен жарыктарды күйгүзүңүз

Андан кийин мен дагы бир жолу index.php түздүм, бул жолу /свет. ~~~

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

~~~

Мен азыр raspberrypi.local/lights/index.php сайтына киргенде, леддер агарып калат. Бул жакшы башталыш болсо да, мен жок дегенде пульттун бир нече баскычын колдонгум келет.

8 -кадам: Чырактарды браузерден башкарыңыз

Мен html формасын колдонуу менен жамбаштар менен интерфейс түздүм. Мен кереги жок нерселерди кылууну жактырбайм, андыктан мен колонтитулум, колонтитулум жана негизги PHP кодум менен шаблондор деп аталган папканы түздүм.

~~~

~~~

Баскычтардын иштеши үчүн BasicControl.php шаблонун түздүм. Мында мен баскыч басылганда аткарылышы керек болгон кодду көрсөттүм. Анткени мен анандирацияны абдан кызыктырып койгом. Strandtest чексиз улана берет, ошондуктан мен процессти каалаган убакта токтотуу үчүн дагы бир баскыч жасадым.

~~~ <? 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 азыр кайра жүктөө'); }?>

~~~

9 -кадам: Баш жана Колонтитул үчүн шаблон түзүңүз

Азыр баары иштейт, бирок кароо анча жагымдуу эмес. Баш жана колонтитулдарды импорттогондон кийин, сайттын бардык элементтери жеткиликтүү, жөн эле стилдештирилген эмес.

Header.php:

~~~

Жарыктар

Lampjes

Негизги көзөмөл

Advanced Controls

~~~

Жана footer.php:

~~~

~~~

10 -кадам: Баарын бир аз жакшыраак кылуу үчүн кээ бир CSS

Баарын бир аз жакшыраак кылуу үчүн кээ бир Css
Баарын бир аз жакшыраак кылуу үчүн кээ бир Css

Сиз байкагандай, мен түзүлүштү көзөмөлдөө үчүн CSS файлын колдонуп жатам. Алыстан башкаруу пульту кичинекей экрандарда жарактуу экенине ынануу үчүн, мен autowrap менен кээ бир CSS ийкемдүү кутучаларын колдондум.

~~~

/ * Жарыкты башкаруу интерфейси үчүн стилдер жадыбалы *

* Ар бир баракта колдонулат */

дене {background-color: f9fcfa; font-family: Arial; маржа: 0; }

h1 {түс: ак; текстти тегиздөө: борбор; }

p {font-family: verdana; шрифт өлчөмү: 20px; }

h2 {}

/ * Баш аты */

.header {бийиктиги: 10%; дисплей: flex; justify-content: flex-start; тегиздөө-пункттары: борбор; маржа: 0px; толтуруу-сол: 5%; фон:#3F51B5; тегиздөө-пункттары: борбор; }

. HeaderLinks {түс: ак; }

.navbar {дисплей: flex; ийкемдүү: 30%; негиздөө-мазмун: мейкиндик-айланасында; фон-түс: #3F51B5; Ак түс; }

/ * Колонтитул */

.footer {background-color: #3F51B5; бийиктиги: 10%; текстти тегиздөө: борбор; }

/ * Index.php */

.түймөлөр {дисплей: flex; ийилүү багыты: катар; flex-wrap: ороо; негиздөө-мазмун: мейкиндик-ортосунда; бийиктиги: 80%; align-items: flex-start; }

.buttons_index {толтуруу: 0%; чек-туурасы: ичке; чек стили: катуу; чек-түс: кара; фон-түс: #3949ab; Ак түс; font-family: sans-serif; туурасы: 24%; бийиктиги: 20%; }

.buttons_index: hover {толтуруу: 0%; чек-туурасы: ичке; чек стили: катуу; чек-түс: кара; background-color: #536DFE; Ак түс; font-family: sans-serif; туурасы: 24%; бийиктиги: 20%; }

~~~

11 -кадам: рахмат

Жана бүттү. Баары мен үчүн иштейт жана менин көрсөтмөмдү тандап алсаңыз, бул сиз үчүн да иштейт деп ишенем. Эгерде сиз кандайдыр бир кодду көчүрүүгө аракет кылсаңыз, мен аны бул жерге жүктөө үчүн бир нече боштукту кошушум керек болчу, андыктан код кайра пайдалуу боло электе аларды жок кылышыңыз керек болот.

Баарын окуу сизге жакты деп үмүттөнөм. Эгер сизде сын -пикир болсо, мен аны уккум келет!

Сунушталууда: