Isi kandungan:

Neopixel yang menyekat iklan: 11 Langkah
Neopixel yang menyekat iklan: 11 Langkah

Video: Neopixel yang menyekat iklan: 11 Langkah

Video: Neopixel yang menyekat iklan: 11 Langkah
Video: Как сшить идеальную схему NeoPixel 2024, November
Anonim
Neopixel yang menyekat iklan
Neopixel yang menyekat iklan

Saya ingin menjadikan laman web sederhana sebagai jarak jauh untuk jalur neopixel yang disambungkan ke Raspberry Pi saya sifar dan terus menggunakannya untuk menyekat iklan di rangkaian saya menggunakan Pi-Hole. Mula-mula saya hanya mahu menambahkan beberapa petunjuk di dalam bilik saya, tetapi dengan menyambung semuanya, saya sedar bahawa saya tidak mempunyai cara untuk mengawalnya dengan mudah. Oleh itu, saya memutuskan untuk membuat laman web sederhana dengan beberapa pilihan kawalan asas menggunakan pelayan apache yang telah disediakan oleh pemasang Pi-hole. Saya memberikan kebenaran root www-data, yang merupakan risiko keselamatan, jadi anda harus menjadikan pelayan web tidak tersedia untuk dunia luar. Ini bermula terutamanya untuk dokumentasi saya sendiri dan entah bagaimana menjadi petunjuk pertama saya;) Oleh itu, saya sangat menghargai jika anda dapat menunjukkan Sekiranya sesuatu tidak jelas atau jika saya benar-benar merindui sesuatu.

Langkah 1: Bahan Terpakai

  • Raspberry Pi (saya mula menggunakan Pi 2 dan kemudian berubah menjadi WH, pin gpio mungkin sedikit berbeza tetapi sebaliknya setiap model baik-baik saja)

    • Sekiranya anda mempunyai RPi tanpa wifi terpasang, penyesuai wifi juga berguna.
    • Sebagai pilihan, kes untuk raspberry pi
  • 2 wayar pelompat lelaki-wanita (contohnya)
  • Neopixels ws2811 (saya menggunakan ini)
  • 1 10W bekalan kuasa untuk RPi (Pengecas telefon lama akan berfungsi)
  • Bekalan kuasa 1 ~ 50W untuk Neopixels (saya menggunakan yang seperti ini, tetapi mungkin yang lebih kecil akan mencukupi, tetapi jika anda mahukan lebih banyak petunjuk, anda masih mempunyai ruang untuk berkembang.)
  • Palam penyambung bicu wanita (seperti ini)

Langkah 2: Sediakan Sistem Operasi

Sediakan Sistem Operasi
Sediakan Sistem Operasi

Muat turun Rasbian versi terbaru dari raspberrypi.org Versi lite sesuai untuk projek ini, jika anda merancang untuk menggunakan raspberry pi untuk perkara lain juga, anda mungkin mempertimbangkan untuk memasang versi penuh dengan gui. Kemudian saya membakar gambar dengan Etcher. Selepas itu untuk memastikan ia akan bersambung dengan rangkaian wifi saya, saya menambahkan wpa_supplicant.conf dalam direktori boot kad sd. Kandungan fail kelihatan seperti ini:

~~~

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

rangkaian = {

ssid = "SSID"

psk = "KATA LALUAN"

key_mgmt = WPA-PSK}

~~~

Untuk mengaktifkan ssh saya membuat fail bernama ssh (tanpa pelanjutan) dalam direktori yang sama. Ini akan memastikan anda dapat mengatur setiap komputer dari komputer lain di komputer anda.

Langkah 3: Menyambungkan Neopixels

Menyambungkan Neopixels
Menyambungkan Neopixels
Menyambungkan Neopixels
Menyambungkan Neopixels

Mula-mula saya pasangkan bekalan kuasa pada penyambung bicu wanita dan pasangkan RPi ke dalam casing. Saya mencabut kabel ground dari led (kabel biru) dan bahagian lelaki dari wayar pelompat di sisi negatif penyambung bicu. Hujung wayar jumper lain yang saya sambungkan ke pin ground pada header gpio, saya menggunakan pin 6 tetapi pin tepat yang boleh anda gunakan bergantung pada model RPi yang anda gunakan.

Kedua saya menyambungkan pada hujung positif penyambung bicu kabel 5v dari led (kabel merah). Di bahagian depan saya, mereka adalah penyambung wayar jumper pada kabel ground tambahan dan kabel data (kabel putih). Saya hanya mengabaikan kabel pembumian tambahan, tidak perlu untuk persediaan saya. Pada kabel data saya menghubungkan wayar jumper lelaki ke wanita dengan pin gpio 12, sekali lagi pin tepat yang harus anda gunakan bergantung pada RPi anda. Kemudian saya memasang bekalan kuasa saya untuk RPi dan piksel. Lampu LED menyala sebentar, jika semuanya disambungkan dengan betul.

Langkah 4: Mulakan RPi

Mulakan RPi
Mulakan RPi

Setelah memberikan RPi satu minit atau lebih untuk boot, saya melihat alamat IP dari raspberry dengan nmap. Tetapi pengimbas rangkaian apa pun, panel maklumat penghala anda atau dalam kebanyakan kes hanya "raspberrypi.local" akan dilakukan. Dengan maklumat tersebut saya berhubung dengan RPi melalui ssh. Pengguna lalai adalah pi dengan kata laluan raspberry. Jadi itulah perkara pertama yang saya ubah menggunakan `passwd` secara langsung selepas log masuk pertama. Sekiranya anda ingin mengakses pi anda melalui ssh dari luar rangkaian tempatan anda, anda harus melihat pengesahan fail2ban dan kunci. Saya secara peribadi tidak mempunyai kes penggunaan untuk itu, jadi saya akan meninggalkannya hanya dengan kata laluan.

Kedua saya mengemas kini perisian menggunakan `sudo apt update & sudo apt upgrade -Y`. Saya juga memerlukan beberapa perisian tambahan untuk menyusun liber `sudo apt-get install scons swig git python-dev build-essential -Y`. Kemudian saya menyalin karya hebat dari Jeremy Garff di github `git clone https:// github.com / jgarff / rpi_ws281x.git`. Selepas itu perpustakaan diklon saya pergi ke direktori rpi_ws281x, menggunakan scon dan kemudian memasang perpustakaan dengan `sudo python python / setup.py install`. Dalam python / example adalah demo yang bagus "strandtest.py" dengan animasi yang sangat kemas yang anda boleh mulakan dengan `sudo python python / example / strandtest.py`.

Langkah 5: Lubang Pi

Lubang Pi
Lubang Pi

Untuk membuat penyekat tambah lebar rangkaian, Pi-Hole sangat sesuai. Ia dipasang dengan hanya `sudo curl -sSL https://install.pi-hole.net | bash`. Bahagian yang baik adalah bahawa ia akan menyediakan pelayan web juga.

Setelah menjalankan pemasang, anda ingin log masuk ke laman pentadbir penghala anda dan memberikan RPi anda alamat IP statik dan menetapkannya sebagai Pelayan DHCP. Sekiranya anda telah menetapkan masa sewa yang rendah daripada lubang PI anda seharusnya berfungsi sekarang.

Langkah 6: Kawal Lampu

Kawal Lampu
Kawal Lampu
Kawal Lampu
Kawal Lampu
Kawal Lampu
Kawal Lampu

Cara termudah untuk mengawal neopixels adalah dengan program python kecil. Tetapi untuk menggunakan ssh setiap kali anda mahu menyalakan lampu tidak selesa, terutamanya pada peranti mudah alih. Oleh itu, saya memutuskan untuk menggunakan laman web kecil sebagai alat kawalan jauh. INI ADALAH RISIKO KESELAMATAN, kerana saya memberikan kebenaran root www-data tanpa pengesahan kata laluan. Anda mungkin tidak boleh menyediakan laman web ini di luar talian anda.

Untuk memudahkan memilih antara papan pemuka lubang PI dan alat kawalan jauh cahaya, saya memberi pengguna pi akses akses ke / var / www / html dengan `sudo chown -R pi / var / www.html` dan saya membuat fail index.php di / var / www / html /. Sesuatu yang mudah seperti:

~~~

Indeks Pi lubang Cahaya jauh

~~~

adalah baik. Kemudian saya membuat folder baru yang dipanggil lampu untuk menyatukan semuanya dari neopixel. Di sini saya membuat colour.py berdasarkan strandtest.py dari libery.

~~~

dari neopixel import * # Import beberapa perpustakaan

import sys

def led (jalur, warna, permulaan, akhir): # Buat fungsi untuk memanggil led

untuk i dalam jarak (permulaan, akhir):

strip.setPixelColor (i, warna)

strip.show ()

BRIGHTNESS = int (sys.argv [4]) # Parameter keempat pada baris perintah akan menjadi terang. (1-255)

COUNT = 50 # Jumlah PIN led = 12 # Pin yang digunakan pada RPi

FREQ_HZ = 800000 # frekuensi isyarat LED dalam hertz (biasanya 800khz)

DMA = 5 # Saluran DMA yang akan digunakan untuk menghasilkan isyarat (cuba 5)

INVERT = Salah # Benar untuk membalikkan isyarat (semasa menggunakan tahap transistor NPN

strip = Adafruit_NeoPixel (COUNT, PIN, FREQ_HZ, DMA, INVERT, BRIGHTNESS)

jalur. mulakan ()

R = int (sys.argv [1]) # Jumlah merah adalah parameter pertama

G = int (sys.argv [2]) # Jumlah hijau adalah parameter kedua

B = int (sys.argv [3]) # Jumlah biru adalah parameter ketiga

cuba:

led (jalur, Warna (R, G, B), 0, 49) #Mulakan let dengan warna dan kecerahan yang dipilih.

kecuali KeyboardInterrupt:

warna (jalur, Warna (0, 0, 0), 0, 49)

~~~

Sekiranya anda menjalankannya dengan sudo di terminal lampu harus menyala dengan warna yang ditentukan. Untuk memberi izin www-data sudo saya menambahkan `www-data ALL = (ALL) NOPASSWD: ALL)` ke fail sudoers (/ etc / sudoers) secara langsung di bawah pengguna root.

Langkah 7: Hidupkan Lampu Dengan Penyemak Imbas

Kemudian saya buat anonther index.php, kali ini di / lights. ~~~

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

~~~

Semasa saya melawat raspberrypi.local / lights / index.php, lampu akan bertukar menjadi putih. Walaupun ini adalah permulaan yang baik, saya ingin mempunyai sekurang-kurangnya beberapa butang pada alat kawalan jauh.

Langkah 8: Kawal Lampu Dari Penyemak Imbas

Saya membuat antara muka dengan tombol menggunakan borang html. Saya tidak suka melakukan perkara yang tidak diperlukan, jadi saya membuat folder yang disebut templat dengan tajuk, kaki dan kod php utama saya. (Untuk sekarang) final /lights/index.php saya seperti ini:

~~~

~~~

Untuk membuat butang berfungsi, saya membuat templat BasicControl.php. Dalam ini saya menentukan kod yang harus dilaksanakan ketika butang ditekan. Kerana saya menyukai animasi yang paling teruk, saya juga menyertakannya. Strandtest akan berterusan lama, jadi saya membuat butang lain untuk menghentikan proses bila-bila masa saya mahu.

~~~ <? php

$ I = 100;

$ R = 0;

$ G = 0;

$ B = 0;

if (isset ($ _ POST ['strandtest_start'])) {exec ("sudo python strandtest.py"); }

lain jika (isset ($ _ POST ['strandtest_stop'])) {exec ("sudo pkill -9 -f strandtest.py"); }

lain jika (isset ($ _ POST ['red'])) {$ R = 255; $ G = 0; $ B = 0; exec ("sudo python colour.py $ R $ G $ B $ I"); }

lain jika (isset ($ _ POST ['green'])) {$ R = 0; $ G = 255; $ B = 0; exec ("sudo python colour.py $ R $ G $ B $ I"); }

lain jika (isset ($ _ POST ['blue'])) {$ R = 0; $ G = 0; $ B = 255; exec ("sudo python colour.py $ R $ G $ B $ I"); }

lain jika (isset ($ _ POST ['white'])) {$ R = 255; $ G = 255; $ B = 255; exec ("sudo python colour.py $ R $ G $ B $ I"); }

lain jika (isset ($ _ POST ['off'])) {shell_exec ('sudo python off.py'); }

lain jika (isset ($ _ POST ['reboot'])) {shell_exec ('rebo sudo sekarang'); }?>

~~~

Langkah 9: Buat Templat untuk Header dan Footer

Sekarang semuanya berfungsi, tetapi tidak terlalu menyenangkan untuk dilihat. Setelah mengimport header dan footer semua elemen laman web tersedia, tidak digayakan.

Header.php:

~~~

Lampu

Lampjes

Kawalan Asas

Kawalan Lanjutan

~~~

Dan footer.php:

~~~

~~~

Langkah 10: Beberapa Css untuk Membuat Semuanya Lebih Baik

Beberapa Css untuk Membuat Semuanya Lebih Baik
Beberapa Css untuk Membuat Semuanya Lebih Baik

Seperti yang anda perhatikan, saya menggunakan fail css untuk mengawal susun atur. Untuk memastikan alat kawalan jauh saya dapat digunakan pada skrin yang lebih kecil juga saya menggunakan beberapa kotak flex css dengan autowrap.

~~~

/ * Lembar gaya untuk antara muka kawalan cahaya *

* Berlaku di setiap halaman * /

badan {background-color: f9fcfa; font-keluarga: Arial; margin: 0; }

h1 {warna: putih; text-align: tengah; }

p {font-keluarga: verdana; saiz fon: 20 piksel; }

h2 {}

/ * Tajuk * /

.header {tinggi: 10%; paparan: flex; justify-content: flex-mula; align-item: tengah; margin: 0px; padding-kiri: 5%; latar belakang: # 3F51B5; align-item: tengah; }

. HeaderLinks {warna: putih; }

.navbar {paparan: flex; flex: 30%; justify-content: ruang-sekitar; warna latar: # 3F51B5; warna: putih; }

/ * Bahagian bawah * /

.footer {background-color: # 3F51B5; tinggi: 10%; text-align: tengah; }

/ * Index.php * /

.tombol {paparan: flex; arah lentur: baris; flex-wrap: bungkus; justify-content: ruang-antara; tinggi: 80%; align-item: flex-mula; }

.buttons_index {padding: 0%; lebar sempadan: nipis; gaya sempadan: padat; warna sempadan: hitam; warna latar: # 3949ab; warna: putih; font-keluarga: sans-serif; lebar: 24%; tinggi: 20%; }

.buttons_index: arahkan {padding: 0%; lebar sempadan: nipis; gaya sempadan: padat; warna sempadan: hitam; warna latar: # 536DFE; warna: putih; font-keluarga: sans-serif; lebar: 24%; tinggi: 20%; }

~~~

Langkah 11: Terima kasih

Dan itu sahaja. Semuanya berfungsi untuk saya dan saya harap ia juga akan berfungsi untuk anda sekiranya memilih mencuba arahan saya. Sekiranya anda cuba menyalin beberapa kod, saya harus menambahkan beberapa ruang untuk memuat naiknya di sini, jadi anda harus menghapusnya sebelum kod itu berguna lagi.

Saya harap anda seronok membaca semuanya. Sekiranya anda mempunyai maklum balas, saya ingin mendengarnya!

Disyorkan: