فهرست مطالب:

نئوپیکسل های مسدود کننده تبلیغات: 11 مرحله
نئوپیکسل های مسدود کننده تبلیغات: 11 مرحله

تصویری: نئوپیکسل های مسدود کننده تبلیغات: 11 مرحله

تصویری: نئوپیکسل های مسدود کننده تبلیغات: 11 مرحله
تصویری: کنترل 16 ال ای دی با 1 سیم💡نئوپیکسل یک ماژول آدرس پذیر 2024, جولای
Anonim
نئوپیکسل های مسدود کننده تبلیغات
نئوپیکسل های مسدود کننده تبلیغات

من می خواستم یک وب سایت ساده از راه دور برای یک نوار پیکسل متصل به رزبری پای صفر خود ایجاد کنم و از آن برای مسدود کردن تبلیغات در شبکه خود با استفاده از Pi-Hole استفاده کنم. ابتدا فقط می خواستم برخی از لامپ ها را در اتاقم اضافه کنم ، اما با سیم کشی همه چیز ، متوجه شدم راهی برای کنترل راحت آنها ندارم. بنابراین تصمیم گرفتم با استفاده از سرور apache که نصب کننده Pi-hole قبلاً راه اندازی کرده بود ، یک وب سایت ساده با برخی گزینه های کنترل اصلی ایجاد کنم. من مجوزهای ریشه www-data را اعطا کردم ، که یک خطر امنیتی است ، بنابراین شما باید وب سرور را در دسترس دیگران قرار دهید. این کار عمدتاً برای مستندات شخصی من شروع شد و به نوعی اولین دستورالعمل آموزشی من شد.) بنابراین اگر شما چیزی را نامشخص بدانید یا اگر من چیزی را کاملاً از دست دادم ، اشاره کنید واقعاً قدردانی می کنم.

مرحله 1: مواد مورد استفاده

  • Raspberry Pi (من از Pi 2 شروع کردم و سپس به WH تغییر کردم ، پین های gpio ممکن است کمی متفاوت باشند ، اما در غیر این صورت هر مدل خوب است)

    • اگر RPi بدون وای فای داخلی دارید ، آداپتور wifi نیز مفید است.
    • در صورت تمایل برای تمشک pi
  • 2 سیم جهنده زن و مرد (برای مثال)
  • Neopixels ws2811 (من از اینها استفاده کردم)
  • 1 منبع تغذیه 10 واتی برای RPi (یک شارژر تلفن قدیمی کار می کند)
  • منبع تغذیه 1 ~ 50W برای Neopixels (من از چنین دستگاهی استفاده کردم ، اما احتمالاً منبع کوچکتر کافی است ، اما اگر از led های بیشتری می خواهید ، فضایی برای گسترش دارید.)
  • پلاگین اتصال جک زن (مانند این)

مرحله 2: سیستم عامل را آماده کنید

سیستم عامل را آماده کنید
سیستم عامل را آماده کنید

آخرین نسخه Rasbian را از raspberrypi.org بارگیری کنید نسخه Lite برای این پروژه مناسب است ، اگر قصد دارید از 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 مورد استفاده شما بستگی دارد.

ثانیاً من در انتهای مثبت اتصال جک کابل 5 ولت را از leds (کابل قرمز) وصل کردم. در راهنمای من یک اتصال دهنده سیم بلوز روی یک کابل زمین اضافی و کابل داده (کابل سفید) قرار داشت. من فقط سیم اضافی اضافی را نادیده گرفتم ، این برای راه اندازی من ضروری نبود. در کابل داده ، من یک سیم بلوز نر را به پین gpio 12 متصل کردم ، دوباره پین دقیق مورد استفاده شما بستگی به RPi شما دارد. سپس منبع تغذیه خود را برای RPi و پیکسل ها وصل کردم. اگر همه چیز به درستی سیم کشی شده باشد ، چراغ ها برای یک لحظه کوتاه روشن شدند.

مرحله 4: RPi را شروع کنید

RPi را شروع کنید
RPi را شروع کنید

بعد از اینکه به RPi یک دقیقه زمان دادم تا راه اندازی شود ، آدرس IP را از تمشک با nmap جستجو کردم. اما هر اسکنر شبکه ، پانل اطلاعات روتر شما یا در اکثر موارد به سادگی "raspberrypi.local" این کار را انجام می دهد. با آن اطلاعات من از طریق ssh با RPi متصل شدم. کاربر پیش فرض pi با رمز تمشک است. بنابراین این اولین چیزی است که من با استفاده از `passwd` مستقیماً پس از اولین ورود تغییر دادم. اگر می خواهید از خارج از شبکه محلی خود از طریق ssh به pi خود دسترسی پیدا کنید ، باید به fail2ban و احراز هویت کلیدی مراجعه کنید. من شخصاً مورد استفاده ای برای آن ندارم ، بنابراین آن را فقط با رمز عبور می گذارم.

دوم اینکه من نرم افزار را با استفاده از `sudo apt update && sudo apt upgrade -Y` به روز کردم. من همچنین به برخی نرم افزارهای اضافی برای گردآوری libery "sudo apt-get install scons swig git python-dev build-essential -Y" نیاز داشتم. سپس من لیبری عالی را از جرمی گارف در github `git clone https:// github.com/jgarff/rpi_ws281x.git` کپی کردم. پس از آن آزادی کلون شد ، به فهرست rpi_ws281x رفتم ، از scons استفاده کردم و سپس libary را با `sudo python python/setup.py install` نصب کردم. در پایتون/نمونه ها یک نسخه نمایشی زیبا "strandtest.py" با انیمیشن های بسیار مرتب است که می توانید با `sudo python python/example/strandtest.py` شروع کنید.

مرحله 5: Pi-Hole

Pi-Hole
Pi-Hole

Pi-Hole برای ایجاد یک مسدود کننده افزودنی شبکه گسترده ، ایده آل است. فقط با sudo curl -sSL https://install.pi-hole.net نصب می شود | bash` قسمت خوب این است که یک سرور وب را نیز راه اندازی می کند.

پس از اجرای نصب کننده ، می خواهید به سایت مدیریت روتر خود وارد شوید و به RPi خود آدرس IP ثابت بدهید و آن را به عنوان سرور DHCP تنظیم کنید. اگر زمان اجاره پایینی تعیین کرده اید ، سوراخ PI شما باید در حال حاضر کار کند.

مرحله 6: کنترل چراغ ها

چراغ ها را کنترل کنید
چراغ ها را کنترل کنید
چراغها را کنترل کنید
چراغها را کنترل کنید
چراغها را کنترل کنید
چراغها را کنترل کنید

ساده ترین راه برای کنترل نئوپیکسل ها برنامه های کوچک پایتون است. اما استفاده از ssh هر بار که می خواهید چراغ ها را روشن کنید ، به ویژه در دستگاه تلفن همراه ناراحت کننده است. بنابراین تصمیم گرفتم از یک وب سایت کوچک به عنوان کنترل از راه دور استفاده کنم. این یک خطر امنیتی است ، زیرا من بدون تأیید گذرواژه به ریشه www-data اجازه دادم. احتمالاً نباید این سایت را در خارج از منطقه خود در دسترس قرار دهید.

برای سهولت انتخاب بین داشبورد PI -hole و چراغ کنترل ، به کاربر pi نوشتن دسترسی به/var/www/html را با `sudo chown -R pi/var/www.html` دادم و یک فایل index.php در/var/www/html/. چیزی ساده مانند:

~~~

فهرست Pi سوراخ نور از راه دور

~~~

خوبه. سپس یک پوشه جدید به نام چراغ ها ایجاد کردم تا همه چیز از نئوپیکسل ها با هم باشد. در اینجا من colour.py را بر اساس strandtest.py از libery ایجاد کردم.

~~~

از neopixel import * # برخی از کتابخانه ها را وارد کنید

واردات سیستم

def led (نوار ، رنگ ، شروع ، پایان): # یک تابع برای فراخوانی led ها ایجاد کنید

برای i در محدوده (شروع ، پایان):

strip.setPixelColor (i ، رنگ)

strip.show ()

BRIGHTNESS = int (sys.argv [4]) # چهارمین پارامتر در خط فرمان روشنایی است. (1-255)

COUNT = 50 # مقدار leds PIN = 12 # پین مورد استفاده در RPi

FREQ_HZ = 800000 # فرکانس سیگنال LED در هرتز (معمولاً 800 کیلوهرتز)

DMA = 5 # کانال DMA برای استفاده برای تولید سیگنال (5 را امتحان کنید)

INVERT = غلط # درست است تا سیگنال را وارونه کند (هنگام استفاده از ترانزیستور 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]) # مقدار آبی سومین پارامتر است

تلاش كردن:

leds (نوار ، رنگ (R ، G ، B) ، 0 ، 49) #اجازه دهید با رنگ و روشنایی انتخاب شده شروع شود.

به جز KeyboardIntruptrupt:

رنگ (نوار ، رنگ (0 ، 0 ، 0) ، 0 ، 49)

~~~

اگر این را با sudo روی ترمینال اجرا می کنید ، چراغها باید به رنگ مشخص شده روشن شوند. برای دادن مجوز www-data sudo ، «www-data ALL = (ALL) NOPASSWD: ALL)` را به فایل sudoers (/etc/sudoers) مستقیماً در زیر کاربر ریشه اضافه کردم.

مرحله 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 دیدن می کنم ، led ها سفید می شوند. اگرچه این شروع خوبی است ، اما من دوست دارم حداقل چند دکمه روی ریموت داشته باشم.

مرحله 8: چراغ ها را از مرورگر کنترل کنید

من با استفاده از فرم html یک رابط کاربری با buttens ایجاد کردم. از انجام کارهایی که نیازی به آن ندارم ، خوشم نمی آید ، بنابراین پوشه ای به نام templates با سرصفحه ، پاورقی و کد اصلی php ایجاد کردم. (در حال حاضر) final /lights/index.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 ['قرمز']))) {$ 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 ['آبی'])) {$ R = 0؛ $ G = 0؛ $ B = 255 ؛ exec ("sudo python colour.py $ R $ G $ B $ I")؛ }

else if (isset ($ _ POST ['سفید']))) {$ 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')؛ }؟>

~~~

مرحله 9: ایجاد یک الگو برای سرصفحه و پاورقی

اکنون همه چیز کار می کند ، اما نگاه کردن به آن چندان خوشایند نیست. پس از وارد کردن سرصفحه و پاورقی ، همه عناصر سایت در دسترس هستند ، فقط سبک ندارند.

Header.php:

~~~

چراغ ها

لمپجس

کنترل های اولیه

کنترل های پیشرفته

~~~

و footer.php:

~~~

~~~

مرحله 10: مقداری Css برای اینکه همه چیز کمی بهتر به نظر برسد

مقداری Css برای اینکه همه چیز کمی بهتر به نظر برسد
مقداری Css برای اینکه همه چیز کمی بهتر به نظر برسد

همانطور که ممکن است متوجه شده باشید ، من از یک فایل css برای کنترل طرح استفاده می کنم. برای اطمینان از اینکه ریموت من در صفحه های کوچکتر قابل استفاده است ، از برخی از css flexboxes با قابلیت autowrap استفاده کردم.

~~~

/ * شیوه نامه برای رابط کنترل نور *

* در هر صفحه اعمال می شود */

بدن {background-color: f9fcfa؛ font-family: Arial؛ حاشیه: 0؛ }

h1 {رنگ: سفید ؛ text-align: center؛ }

p {font-family: verdana؛ اندازه فونت: 20px؛ }

h2 {}

/ * سربرگ */

.header {ارتفاع: 10٪؛ صفحه نمایش: flex؛ justify-content: flex-start؛ align-items: center؛ margin: 0px؛ بالشتک چپ: 5٪؛ پس زمینه:#3F51B5؛ align-items: center؛ }

. HeaderLinks {رنگ: سفید ؛ }

.navbar {display: flex؛ انعطاف پذیر: 30؛ ؛ justify-content: space-around؛ background-color: #3F51B5؛ رنگ سفید؛ }

/ * پاورقی */

.footer {background-color: #3F51B5؛ ارتفاع: 10؛ ؛ text-align: center؛ }

/ * Index.php */

.buttons {display: flex؛ flex-direction: row؛ flex-wrap: wrap؛ justify-content: space-between؛ ارتفاع: 80؛ ؛ تراز کردن آیتم ها: flex-start؛ }

.buttons_index {padding: 0٪؛ عرض مرز: نازک ؛ سبک مرزی: جامد؛ حاشیه-رنگ: مشکی؛ background-color: #3949ab؛ رنگ سفید؛ font-family: sans-serif؛ عرض: 24٪؛ ارتفاع: 20؛ ؛ }

.buttons_index: شناور {padding: 0٪؛ عرض مرز: نازک ؛ سبک مرزی: جامد؛ حاشیه-رنگ: مشکی؛ background-color: #536DFE؛ رنگ سفید؛ font-family: sans-serif؛ عرض: 24٪؛ ارتفاع: 20؛ ؛ }

~~~

مرحله 11: متشکرم

و بس همه چیز برای من کار می کند و امیدوارم برای شما نیز مفید باشد اگر دستورالعمل من را امتحان کنید امتحان کنید. اگر سعی کردید برخی از کدها را کپی کنید ، مجبور شدم چند قسمت برای بارگذاری آن در اینجا اضافه کنم ، بنابراین قبل از اینکه کد دوباره مفید واقع شود ، باید آنها را حذف کنید.

امیدوارم از خواندن همه چیز لذت برده باشید. اگر بازخوردی دارید ، من دوست دارم آن را بشنوم!

توصیه شده: