جدول المحتويات:

Neopixels لحظر الإعلانات: 11 خطوة
Neopixels لحظر الإعلانات: 11 خطوة

فيديو: Neopixels لحظر الإعلانات: 11 خطوة

فيديو: Neopixels لحظر الإعلانات: 11 خطوة
فيديو: أساسيات برمجة المايكروبت 2024, يوليو
Anonim
Neopixels لمنع الإعلانات
Neopixels لمنع الإعلانات

كنت أرغب في إنشاء موقع ويب بسيط كجهاز تحكم عن بعد لشريط من neopixels متصل بـ Raspberry Pi zero الخاص بي واستمر في استخدامه لمنع الإعلانات على شبكتي باستخدام Pi-Hole. أولاً ، أردت فقط إضافة بعض المصابيح في غرفتي ، لكنني أدركت أنه ليس لدي طريقة للتحكم بها بسهولة. لذلك قررت إنشاء موقع ويب بسيط يحتوي على بعض خيارات التحكم الأساسية باستخدام خادم Apache الذي تم إعداده بالفعل بواسطة مثبت Pi-hole. لقد منحت أذونات جذر www-data ، وهي مخاطرة أمنية ، لذا يجب أن تجعل خادم الويب غير متاح للعالم الخارجي. بدأ هذا بشكل أساسي من أجل التوثيق الخاص بي وأصبح بطريقة ما أول تعليمات لي ؛) لذلك سأكون ممتنًا حقًا إذا كان بإمكانك الإشارة إلى ما إذا كان هناك شيء غير واضح أو إذا فاتني شيء تمامًا.

الخطوة الأولى: المواد المستعملة

  • Raspberry Pi (بدأت في Pi 2 ثم غيرت إلى WH ، قد تكون دبابيس gpio مختلفة قليلاً ولكن بخلاف ذلك يكون كل نموذج على ما يرام)

    • إذا كان لديك RPi بدون wifi مدمج ، فإن محول wifi مفيد أيضًا.
    • اختياريا حالة لتوت العليق باي
  • 2 سلك توصيل ذكر-أنثى (على سبيل المثال)
  • Neopixels ws2811 (استخدمتها)
  • 1 مزود طاقة 10 واط لـ RPi (سيفي بالشاحن القديم للهاتف)
  • مصدر طاقة 1 ~ 50 واط لـ Neopixels (لقد استخدمت واحدًا مثل هذا ، ولكن ربما يكفي واحد أصغر ، ولكن إذا كنت ترغب في المزيد من المصابيح ، فلديك مساحة متبقية للتوسع.)
  • قابس موصل مقبس أنثى (مثل هذا)

الخطوة 2: قم بإعداد نظام التشغيل

تحضير نظام التشغيل
تحضير نظام التشغيل

قم بتنزيل أحدث إصدار Rasbian من raspberrypi.org الإصدار البسيط مناسب لهذا المشروع ، إذا كنت تخطط لاستخدام raspberry pi لشيء آخر أيضًا ، فقد تفكر في تثبيت الإصدار الكامل باستخدام واجهة المستخدم الرسومية. ثم قمت بنسخ الصورة باستخدام 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: توصيل Neopixels

ربط Neopixels
ربط Neopixels
ربط Neopixels
ربط Neopixels

أولاً ، قمت بتوصيل مصدر الطاقة في موصل المقبس الأنثوي ووضعت RPi في علبة. لقد قمت بربط الكبل الأرضي من المصابيح (الكبل الأزرق) والجانب الذكر من سلك العبور في الجانب السلبي من موصل المقبس. الطرف الآخر من سلك العبور الذي قمت بتوصيله بدبوس أرضي على رأس gpio ، لقد استخدمت الدبوس 6 ولكن الدبابيس الدقيقة التي يمكنك استخدامها ستعتمد على طراز RPi الذي تستخدمه بالضبط.

ثانيًا ، قمت بتوصيل كبل 5 فولت من المصابيح (الكبل الأحمر) على الطرف الموجب لموصل المقبس. على قيادتي ، كان هناك موصل سلك توصيل على كابل أرضي إضافي وكابل البيانات (الكبل الأبيض). لقد تجاهلت للتو الكابل الأرضي الإضافي ، ولم يكن ذلك ضروريًا للإعداد الخاص بي. على كبل البيانات ، قمت بتوصيل سلك توصيل ذكر بأنثى باستخدام gpio pin 12 ، مرة أخرى يعتمد الدبوس الدقيق الذي يجب عليك استخدامه على RPi الخاص بك. ثم قمت بتوصيل مصدر الطاقة الخاص بي لـ RPi والبكسل. أضاءت المصابيح للحظة قصيرة ، إذا كان كل شيء سلكيًا بشكل صحيح.

الخطوة 4: ابدأ تشغيل ملف RPi

ابدأ تشغيل RPi
ابدأ تشغيل RPi

بعد إعطاء RPi دقيقة أو نحو ذلك للتمهيد ، بحثت عن عنوان IP من التوت باستخدام nmap. لكن أي ماسح ضوئي للشبكة أو لوحة المعلومات الخاصة بجهاز التوجيه الخاص بك أو في معظم الحالات ببساطة "raspberrypi.local" سيفي بالغرض. بهذه المعلومات اتصلت بـ RPi من خلال ssh ، المستخدم الافتراضي هو pi بكلمة المرور raspberry. هذا هو أول شيء قمت بتغييره باستخدام "passwd" بعد تسجيل الدخول الأول مباشرةً. إذا كنت ترغب في الوصول إلى pi من خلال ssh من خارج شبكتك المحلية ، فيجب أن تبحث في fail2ban ومصادقة المفتاح. أنا شخصياً ليس لدي حالة استخدام لذلك ، لذلك سأتركه بكلمة مرور فقط.

ثانيًا ، قمت بتحديث البرنامج باستخدام `sudo apt update && sudo apt Upgrade -Y`. احتجت أيضًا إلى بعض البرامج الإضافية لتجميع "sudo apt-get install scons swig git python-dev build-basic -Y". ثم قمت بنسخ نسخة Libery الممتازة من Jeremy Garff على github `git clone https:// github.com / jgarff / rpi_ws281x.git`. بعد ذلك تم استنساخ Libery ، ذهبت إلى دليل rpi_ws281x ، واستخدمت scons ثم قمت بتثبيت libary مع `sudo python python / setup.py install`. في python / أمثلة ، يوجد عرض تجريبي لطيف "strandtest.py" مع رسوم متحركة أنيقة حقًا يمكنك البدء بها بـ `sudo python python / أمثلة / strandtest.py`.

الخطوة 5: Pi-Hole

بي هول
بي هول

لإنشاء مانع إضافة واسع للشبكة ، يعد Pi-Hole مثاليًا. يتم تثبيته باستخدام `` sudo curl -sSL https://install.pi-hole.net | باش. الجزء الجميل هو أنه سينشئ خادم ويب أيضًا.

بعد تشغيل برنامج التثبيت ، ستحتاج إلى تسجيل الدخول إلى موقع المسؤول لجهاز التوجيه الخاص بك ومنح RPi عنوان IP ثابتًا وإعداده كخادم DHCP. إذا قمت بتعيين وقت إيجار منخفض ، يجب أن يعمل ثقب PI الآن.

الخطوة السادسة: التحكم في الأضواء

تحكم في الأضواء
تحكم في الأضواء
تحكم في الأضواء
تحكم في الأضواء
تحكم في الأضواء
تحكم في الأضواء

أسهل طريقة للتحكم في neopixels هي باستخدام برامج python الصغيرة. لكن استخدام ssh في كل مرة تريد فيها تشغيل الأضواء أمر غير مريح ، خاصة على جهاز محمول. لذلك قررت استخدام موقع ويب صغير كجهاز تحكم عن بعد. هذه مخاطر أمنية ، لأنني منحت إذن جذر www-data بدون التحقق من كلمة المرور. ربما يجب ألا تجعل هذا الموقع متاحًا خارج منطقتك.

لتسهيل الاختيار بين لوحة القيادة الخاصة بـ PI-hole وجهاز التحكم عن بُعد ، أعطيت المستخدم إمكانية الوصول للكتابة إلى / var / www / html باستخدام `sudo chown -R pi / var / www.html` وأنشأت ملف index.php في / var / www / html /. شيء بسيط مثل:

~~~

مؤشر Pi hole Light remote

~~~

على ما يرام. ثم أنشأت مجلدًا جديدًا يسمى الأضواء ليجمع كل شيء من نيوبكسل معًا. هنا قمت بإنشاء colour.py بناءً على strandtest.py من Libery.

~~~

من استيراد neopixel * # استيراد بعض المكتبات

استيراد النظم

def led (الشريط ، اللون ، البداية ، النهاية): # إنشاء وظيفة لاستدعاء المصابيح

بالنسبة لـ i في النطاق (البداية ، النهاية):

strip.setPixelColor (أنا ، لون)

عرض الشريط()

BRIGHTNESS = int (sys.argv [4]) # ستكون المعلمة الرابعة في سطر الأوامر هي السطوع. (1-255)

COUNT = 50 # مقدار PIN لمصابيح LED = 12 # الدبوس المستخدم في RPi

FREQ_HZ = 800000 # تردد إشارة LED بالهرتز (عادة 800 كيلو هرتز)

DMA = 5 # قناة DMA لاستخدامها لتوليد إشارة (جرب 5)

عكس = خطأ # صحيح لعكس الإشارة (عند استخدام مستوى الترانزستور NPN

strip = Adafruit_NeoPixel (COUNT ، PIN ، FREQ_HZ ، DMA ، عكس ، سطوع)

strip.begin ()

R = int (sys.argv [1]) # كمية الأحمر هي المعلمة الأولى

G = int (sys.argv [2]) # مقدار اللون الأخضر هو البارامتر الثاني

B = int (sys.argv [3]) # كمية اللون الأزرق هي المعلمة الثالثة

محاولة:

المصابيح (الشريط ، اللون (R ، G ، B) ، 0 ، 49) # ستبدأ السماح باللون والسطوع المختارين.

باستثناء لوحة المفاتيح المقاطعة:

اللون (شريط ، اللون (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 ، ستتحول المصابيح إلى اللون الأبيض. على الرغم من أن هذه بداية جيدة ، إلا أنني أحب أن يكون لدي على الأقل بعض الأزرار على جهاز التحكم عن بعد.

الخطوة 8: التحكم في الأضواء من المتصفح

لقد أنشأت واجهة بأتباع باستخدام نموذج html. لا أحب القيام بأشياء غير ضرورية ، لذلك قمت بإنشاء مجلد يسمى قوالب مع رأسي وتذييل وكود php الرئيسي.

~~~

~~~

لجعل الأزرار تعمل ، قمت بعمل قالب BasicControl.php. في هذا حددت الكود الذي يجب تنفيذه عند الضغط على الزر. لأنني أحببت الرسوم المتحركة strandtest قمت بتضمينها أيضًا. سيستمر اختبار strandtest لفترة طويلة ، لذلك قمت بعمل زر آخر لإيقاف العملية متى أردت.

~~~ <؟ php

أنا دولار = 100 ؛

$ R = 0 ؛

G = 0 دولار ؛

ب = 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 دولار ؛ ب = 0 ؛ exec ("sudo python colour.py $ R $ G $ B $ I")؛ }

else if (isset ($ _ POST ['green'])) {$ R = 0 ؛ G = 255 دولارًا أمريكيًا ؛ ب = 0 ؛ exec ("sudo python colour.py $ R $ G $ B $ I")؛ }

else if (isset ($ _ POST ['blue'])) {$ R = 0 ؛ G = 0 دولار ؛ ب = 255 ؛ exec ("sudo python colour.py $ R $ G $ B $ I")؛ }

else if (isset ($ _ POST ['white'])) {$ R = 255؛ G = 255 دولارًا أمريكيًا ؛ ب = 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:

~~~

أضواء

لامبجيس

الضوابط الأساسية

ضوابط متقدمة

~~~

والتذييل. php:

~~~

~~~

الخطوة 10: بعض Css لجعلها تبدو أفضل قليلاً

بعض Css لجعل كل شيء يبدو أفضل قليلاً
بعض Css لجعل كل شيء يبدو أفضل قليلاً

كما لاحظت ، أنا أستخدم ملف css للتحكم في التخطيط. للتأكد من أن جهاز التحكم عن بعد الخاص بي قابل للاستخدام على الشاشات الأصغر ، كما أنني استخدمت بعض الصناديق المرنة css مع الالتفاف التلقائي.

~~~

/ * ورقة أنماط لواجهة التحكم في الإضاءة *

* يسري على كل صفحة * /

الجسم {لون الخلفية: f9fcfa؛ عائلة الخطوط: Arial ؛ الهامش: 0؛ }

h1 {اللون: أبيض ؛ محاذاة النص: مركز ؛ }

ع {font-family: verdana؛ حجم الخط: 20 بكسل ؛ }

h2 {}

/* رأس */

.header {height: 10٪؛ عرض: فليكس ؛ تبرير المحتوى: بداية مرنة ؛ محاذاة العناصر: مركز ؛ الهامش: 0 بكسل ؛ حشوة اليسار: 5٪؛ الخلفية: # 3F51B5 ؛ محاذاة العناصر: مركز ؛ }

. HeaderLinks {color: white؛ }

.navbar {display: flex؛ المرن: 30٪ ؛ تبرير المحتوى: الفضاء حول ؛ لون الخلفية: # 3F51B5 ؛ اللون الابيض؛ }

/ * التذييل * /

.footer {background-color: # 3F51B5؛ الارتفاع: 10٪؛ محاذاة النص: مركز ؛ }

/ * Index.php * /

.buttons {display: flex؛ الاتجاه المرن: صف. التفاف المرن: التفاف. تبرير المحتوى: مسافة بين ؛ الارتفاع: 80٪؛ محاذاة العناصر: بداية مرنة ؛ }

.buttons_index {المساحة المتروكة: 0٪؛ عرض الحدود: نحيف نمط الحدود: صلب ؛ لون الحدود: أسود ؛ لون الخلفية: # 3949ab ؛ اللون الابيض؛ عائلة الخطوط: sans-serif ؛ العرض: 24٪؛ الارتفاع: 20٪؛ }

.buttons_index: تحوم {padding: 0٪؛ عرض الحدود: نحيف نمط الحدود: صلب ؛ لون الحدود: أسود ؛ لون الخلفية: # 536DFE ؛ اللون الابيض؛ عائلة الخطوط: sans-serif ؛ العرض: 24٪؛ الارتفاع: 20٪؛ }

~~~

الخطوة 11: شكرا لك

وهذا كل شيء. كل شيء يعمل بالنسبة لي وآمل أن يعمل من أجلك أيضًا إذا اخترت تجربة التعليمات الخاصة بي. إذا حاولت نسخ بعض التعليمات البرمجية ، فاضطررت إلى إضافة بعض المساحات لتحميلها هنا ، لذلك سيتعين عليك حذفها قبل أن تصبح الشفرة مفيدة مرة أخرى.

أتمنى أن تكون قد استمتعت بقراءة كل شيء. إذا كانت لديك ملاحظات ، فأنا أحب أن أسمعها!

موصى به: