Πίνακας περιεχομένων:

Neopixels αποκλεισμού διαφημίσεων: 11 βήματα
Neopixels αποκλεισμού διαφημίσεων: 11 βήματα

Βίντεο: Neopixels αποκλεισμού διαφημίσεων: 11 βήματα

Βίντεο: Neopixels αποκλεισμού διαφημίσεων: 11 βήματα
Βίντεο: Iron man Battle Damaged N 103! Più bello di quello che mi aspettavo! Prima parte della mano destra! 2024, Δεκέμβριος
Anonim
Neopixels αποκλεισμού διαφημίσεων
Neopixels αποκλεισμού διαφημίσεων

Iθελα να φτιάξω έναν απλό ιστότοπο ως απομακρυσμένο για μια λωρίδα neopixel που είναι συνδεδεμένη με το Raspberry Pi zero και να συνεχίσω να τον χρησιμοποιώ για να αποκλείσω διαφημίσεις στο δίκτυό μου χρησιμοποιώντας το Pi-Hole. Πρώτα ήθελα να προσθέσω μερικά led στο δωμάτιό μου, αλλά καλωδιώνοντας τα πάντα συνειδητοποίησα ότι δεν είχα τρόπο να τα ελέγξω άνετα. Έτσι αποφάσισα να δημιουργήσω έναν απλό ιστότοπο με κάποιες βασικές επιλογές ελέγχου χρησιμοποιώντας τον διακομιστή apache που είχε ήδη εγκαταστήσει το πρόγραμμα εγκατάστασης Pi-hole. Έχω χορηγήσει δικαιώματα ρίζας www-data, το οποίο αποτελεί κίνδυνο για την ασφάλεια, οπότε θα πρέπει να κάνετε προφανώς τον διακομιστή ιστού μη διαθέσιμο στον εξωτερικό κόσμο. Αυτό ξεκίνησε κυρίως για τη δική μου τεκμηρίωση και κατά κάποιο τρόπο έγινε το πρώτο μου διδάξιμο;) Έτσι θα εκτιμούσα πραγματικά αν μπορούσατε να επισημάνετε Αν κάτι είναι ασαφές ή αν κάτι μου έλειψε εντελώς.

Βήμα 1: Χρησιμοποιημένα υλικά

  • Raspberry Pi (ξεκίνησα με ένα Pi 2 και μετά άλλαξα σε WH, οι ακίδες του gpio μπορεί να είναι ελαφρώς διαφορετικές, αλλά διαφορετικά κάθε μοντέλο είναι εντάξει)

    • Εάν έχετε RPi χωρίς ενσωματωμένο wifi, ένας προσαρμογέας wifi είναι επίσης χρήσιμος.
    • Προαιρετικά θήκη για το raspberry pi
  • 2 σύρματα αρσενικού-θηλυκού άλτη (για παράδειγμα)
  • Neopixels ws2811 (τα χρησιμοποίησα αυτά)
  • 1 τροφοδοτικό 10W για το 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: Σύνδεση των Neopixels

Σύνδεση των Neopixels
Σύνδεση των Neopixels
Σύνδεση των Neopixels
Σύνδεση των Neopixels

Πρώτα έβαλα το τροφοδοτικό στην υποδοχή θηλυκής υποδοχής και έβαλα το RPi σε μια θήκη. Βίδωσα το καλώδιο γείωσης από τα led (το μπλε καλώδιο) και μια αρσενική πλευρά ενός καλωδίου βραχυκυκλωτήρα στην αρνητική πλευρά του συνδέσμου γρύλου. Το άλλο άκρο του βραχυκυκλωτήρα που συνδέθηκα με μια καρφίτσα γείωσης στην κεφαλίδα gpio, χρησιμοποίησα τον πείρο 6, αλλά οι ακριβείς ακίδες που μπορείτε να χρησιμοποιήσετε θα εξαρτηθούν από το ακριβές μοντέλο RPi που χρησιμοποιείτε.

Δεύτερον, συνδέω στο θετικό άκρο του βύσματος το καλώδιο 5v από τα led (το κόκκινο καλώδιο). Στο led μου ήταν ένας συνδετήρας jumper καλωδίου σε ένα επιπλέον καλώδιο γείωσης και το καλώδιο δεδομένων (το λευκό καλώδιο). Απλώς αγνόησα το πρόσθετο καλώδιο γείωσης, ήταν περιττό για τη ρύθμισή μου. Στο καλώδιο δεδομένων συνέδεσα ένα αρσενικό σε θηλυκό καλώδιο jumper με το gpio pin 12, και πάλι ο ακριβής πείρος που πρέπει να χρησιμοποιήσετε εξαρτάται από το RPi σας. Στη συνέχεια, συνδέσα το τροφοδοτικό για το RPi και τα εικονοστοιχεία. Τα led ανάβουν για μια μικρή στιγμή, αν όλα είναι καλωδιωμένα σωστά.

Βήμα 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`. Στη συνέχεια αντέγραψα την εξαιρετική ελευθερία από τον Jeremy Garff στο github `git clone https:// github.com/jgarff/rpi_ws281x.git`. Μετά από αυτό, η κληρονομία της κληρονομιάς πήγα στον κατάλογο rpi_ws281x, χρησιμοποίησα scons και στη συνέχεια εγκατέστησα το libary με `sudo python python/setup.py install`. Στο python/example είναι ένα ωραίο demo "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 | μπασ '. Το ωραίο μέρος είναι ότι θα δημιουργήσει επίσης έναν διακομιστή ιστού.

Αφού εκτελέσετε το πρόγραμμα εγκατάστασης, θα θέλετε να συνδεθείτε στον ιστότοπο διαχειριστή του δρομολογητή σας και να δώσετε στον RPi σας μια στατική διεύθυνση IP και να τον ορίσετε ως διακομιστή DHCP. Εάν έχετε ορίσει χαμηλό χρόνο μίσθωσης, η τρύπα PI θα πρέπει να λειτουργεί τώρα.

Βήμα 6: Ελέγξτε τα φώτα

Ελέγξτε τα φώτα
Ελέγξτε τα φώτα
Ελέγξτε τα φώτα
Ελέγξτε τα φώτα
Ελέγξτε τα φώτα
Ελέγξτε τα φώτα

Ο ευκολότερος τρόπος για να ελέγξετε τα neopixel είναι με μικρά προγράμματα python. Αλλά η χρήση ssh κάθε φορά που θέλετε να ανάψετε τα φώτα είναι ενοχλητική, ειδικά σε μια κινητή συσκευή. Έτσι αποφάσισα να χρησιμοποιήσω μια μικρή ιστοσελίδα ως τηλεχειριστήριο. ΑΥΤΟΣ ΕΙΝΑΙ ΚΙΝΔΥΝΟΣ ΑΣΦΑΛΕΙΑΣ, επειδή έδωσα άδεια στη ρίζα www-data χωρίς επαλήθευση κωδικού πρόσβασης. Πιθανότατα δεν πρέπει να διαθέσετε αυτόν τον ιστότοπο εκτός της περιοχής σας.

Για να είναι εύκολη η επιλογή μεταξύ του ταμπλό του PI -hole και του τηλεχειριστηρίου, έδωσα στον χρήστη pi εγγραφή πρόσβαση στο/var/www/html με `sudo chown -R pi/var/www.html` και δημιούργησα ένα index.php αρχείο σε/var/www/html/. Κάτι απλό όπως:

~~~

Index Pi hole Light τηλεχειριστήριο

~~~

είναι μια χαρά. Στη συνέχεια, δημιούργησα έναν νέο φάκελο που ονομάζεται φώτα για να έχουμε τα πάντα από τα νεοπροστοιχεία μαζί. Εδώ δημιούργησα το colour.py με βάση το strandtest.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 συχνότητα σήματος σε hertz (συνήθως 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]) # Η ποσότητα του μπλε είναι η τρίτη παράμετρος

προσπαθήστε:

led (λωρίδα, Χρώμα (R, G, B), 0, 49) #Θα ξεκινήσουν τα lets με το επιλεγμένο χρώμα και φωτεινότητα.

εκτός από το 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: Ελέγξτε τα φώτα από το πρόγραμμα περιήγησης

Δημιούργησα μια διεπαφή με buttens χρησιμοποιώντας μια μορφή html. Δεν μου αρέσει να κάνω πράγματα που δεν χρειάζονται, έτσι δημιούργησα έναν φάκελο που ονομάζεται πρότυπα με την κεφαλίδα, το υποσέλιδο και τον κύριο κώδικα php. Το (προς το παρόν) τελικό /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 ['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 ['επανεκκίνηση'])) {shell_exec ('sudo επανεκκίνηση τώρα'); }?>>

~~~

Βήμα 9: Δημιουργήστε ένα πρότυπο για την κεφαλίδα και το υποσέλιδο

Τώρα όλα λειτουργούν, αλλά δεν είναι πολύ ευχάριστο να το δούμε. Μετά την εισαγωγή της κεφαλίδας και του υποσέλιδου, όλα τα στοιχεία του ιστότοπου είναι διαθέσιμα, απλά δεν έχουν στυλ.

Header.php:

~~~

Φώτα

Lampjes

Βασικοί έλεγχοι

Προηγμένοι έλεγχοι

~~~

Και το footer.php:

~~~

~~~

Βήμα 10: Κάποια Css για να φαίνονται όλα καλύτερα

Μερικά Css για να φαίνονται όλα καλύτερα
Μερικά Css για να φαίνονται όλα καλύτερα

Όπως ίσως έχετε παρατηρήσει, χρησιμοποιώ ένα αρχείο css για τον έλεγχο της διάταξης. Για να βεβαιωθώ ότι το τηλεχειριστήριό μου μπορεί να χρησιμοποιηθεί και σε μικρότερες οθόνες, χρησιμοποίησα μερικά css flexboxes με αυτόματη αναδίπλωση.

~~~

/ * Φύλλο στυλ για τη διεπαφή ελέγχου φωτισμού *

* Ισχύει σε κάθε σελίδα */

σώμα {φόντο-χρώμα: f9fcfa; font-family: Arial; περιθώριο: 0; }

h1 {χρώμα: λευκό; text-align: center; }

p {font-family: verdana; μέγεθος γραμματοσειράς: 20px; }

h2 {}

/ * Η κεφαλίδα */

.header {ύψος: 10%; οθόνη: flex? justify-content: flex-start; ευθυγράμμιση-στοιχεία: κέντρο; περιθώριο: 0px; επένδυση-αριστερά: 5%; φόντο:#3F51B5; ευθυγράμμιση-στοιχεία: κέντρο; }

. HeaderLinks {χρώμα: λευκό; }

.navbar {display: flex; flex: 30%; justify-content: space-around? χρώμα φόντου: #3F51B5; άσπρο χρώμα; }

/ * Το υποσέλιδο */

.footer {φόντο-χρώμα: #3F51B5; ύψος: 10%; text-align: center; }

/ * Index.php */

.buttons {display: flex; flex-direction: σειρά? flex-wrap: wrap? justify-content: space-between? ύψος: 80% ευθυγράμμιση-στοιχεία: flex-start; }

.buttons_index {padding: 0%; περίγραμμα-πλάτος: λεπτό? περίγραμμα στυλ: στερεό? περίγραμμα-χρώμα: μαύρο? χρώμα φόντου: #3949ab; άσπρο χρώμα; font-family: sans-serif; πλάτος: 24%; ύψος: 20%; }

.buttons_index: τοποθετήστε το δείκτη του ποντικιού {padding: 0%; περίγραμμα-πλάτος: λεπτό? περίγραμμα στυλ: στερεό? περίγραμμα-χρώμα: μαύρο? χρώμα φόντου: #536DFE; άσπρο χρώμα; font-family: sans-serif; πλάτος: 24%; ύψος: 20%; }

~~~

Βήμα 11: Ευχαριστώ

Και αυτό είναι όλο. Όλα λειτουργούν για μένα και ελπίζω ότι θα λειτουργήσουν και για εσάς εάν επιλέξετε δοκιμάστε το εκπαιδευτικό μου. Εάν προσπαθήσατε να αντιγράψετε κάποιον κώδικα, έπρεπε να προσθέσω μερικά κενά για να το ανεβάσετε εδώ, οπότε θα πρέπει να τα διαγράψετε πριν ο κώδικας γίνει ξανά χρήσιμος.

Ελπίζω να σας άρεσε να διαβάζετε τα πάντα. Αν έχετε σχόλια, θα ήθελα πολύ να το ακούσω!

Συνιστάται: