Google Ev İdarə Edilən LEDlər: 8 Addım
Google Ev İdarə Edilən LEDlər: 8 Addım
Anonim
Google Ev İdarə Edilən LEDlər
Google Ev İdarə Edilən LEDlər
Google Ev İdarə Edilən LEDlər
Google Ev İdarə Edilən LEDlər

Son vaxtlar əlimdə çox boş vaxtım olduğu üçün bir çox layihə üzərində işləyirəm.

Bu layihə, Raspberry Pi istifadə edərək Google Home vasitəsilə RGB LED -ləri idarə etməyə imkan verəcək. İndi layihənin 3 hissəsi var, bir Raspberry Pi qurmaq, IFTTT istifadə edərək xüsusi bir əmr ilə Google Home qurmaq və sonra işıqlar üçün bir dövrə yaratmaq. Dövrü özüm etdim, amma bahis edirəm ki, Adafruitdən lazım olanı edə biləcək bir şey əldə edə bilərsiniz.

Raspberry Pi hissəsi üçün materiallar

  • Raspberry Pi - hər kəs işləyəcək, amma bir sıfırdan istifadə edirəm
  • Simsiz Dongle - Pi -də Wifi qurulmamışdırsa
  • Google Evi - Telefonunuzda Google köməkçisi varsa isteğe bağlıdır

Circuit Part üçün materiallar- Bu sizi caydırmasın … Bu olduqca sadədir

  • Protoboard
  • Tel
  • LED şeridi
  • 12V Güc Təchizatı - 2 Amperdən yuxarı hər şey yaxşı olmalıdır
  • DC Barel Jack - Elektrik təchizatı ilə eyni ölçüdə
  • NPN BJT Power Transistors (x3) - TIP31C istifadə edirəm
  • Kişi və Dişi Pin Başlıqları - İsteğe bağlı, lakin çox tövsiyə olunur

Addım 1: Pi üçün Express yükləyin

Pi üçün Express yüklənir
Pi üçün Express yüklənir

Pi qurmaqla bağlı çox təfərrüata girməyəcəyəm, çünki onları qurmaq üçün çoxlu dərsliklər var.

Gizlətmədiyim üçün nə etməlisən…

  • Ən yeni Raspbian ilə yanıb -sönən Raspberry Pi
  • İnternetdən Pi -dən istifadə edə biləcəyiniz üçün şəbəkə kartını qurun
  • Raspberry Pi -də statik bir IP təyin edin

İndi əyləncənin başladığı yer budur! NodeJS, npm, express və express-generator qurmalıyıq.

sudo apt-get yeniləməsi

sudo apt-get nodejs npm quraşdırın

Bunlar quraşdırıldıqdan sonra aşağıdakıları işlədin

npm ekspress-generator qurun

Express, Raspberry Pi -nin istifadə etməsi üçün çox sadə bir veb server qurmağa imkan verir. Express-generator yalnız bir ekspress server üçün avtomatik olaraq fayllar yaradır.

Kataloqu və cd -ni qovluğa daxil edin. Özümə piWebpage adını verdim. İndi aşağıdakıları işlədin (şəkildə də görüldü)

mkdir piWebpage

cd piWebpage express --view = ejs webApp

Bu, bütün ekspress faylları olan webApp adlı bir qovluq yaradacaq. Daha sonra bu veb səhifəsi ilə daha çox iş görməyi planlaşdırırsınızsa və PUG -ni sevirsinizsə, --view = ejs -i --view = pug ilə əvəz edin. Veb səhifəyə toxunmayacağıq, buna görə də bu tətbiq üçün nə istifadə etdiyimizin əhəmiyyəti yoxdur.

Addım 2: Pi Server Quraşdırması

Yeni webApp qovluğuna keçin.

cd web proqram

npm quraşdırın

npm quraşdırma bir az vaxt aparacaq, çünki express üçün bütün asılılıqları qurur.

SetColor.py faylını webApp qovluğuna yapışdırın. Bu sənəddə əsas rənglər üçün bəzi ön ayarlar var. İstədiyiniz qədər daha çox əlavə etməkdən çekinmeyin. Aralığı 0 ilə 255 arasındadır, burada 255 tam rənglidir. Bir nöqtədə, ehtimal ki, işıqları söndürmə qabiliyyətini əlavə edəcəyəm, amma hələlik tam parlaqlıqdır.

Marşrutlara keçin

cd marşrutları

İndi index.js faylını əlavə edilmiş faylla əvəz edin. Bu, Google Evinin göndərəcəyi POST əmrini almaq üçün bəzi sətirlər əlavə edəcək. Bu POST -dan, rəngi seçəcəyik və Pi -yə işıqları tənzimləmək üçün setColor python skriptini işə salmasını söyləyəcəyik.

Son bir şey … webApp qovluğuna qayıdın.

cd ~/piWebpage/webApp

Sevdiyiniz redaktordan istifadə edərək aşağıdakı kodu webApp.js -ə yapışdırın və qeyd edin. "Module.exports = app;" əvvəldən olduğu kimi hər yerdə yaxşıdır.

// Quraşdırma LED hardware driverconst {exec} = tələb ('child_process'); exec ('sudo pigpiod', (err, stdout, stderr) => {if (err) {console.log ('LED Sürücü yüklənərkən xəta'); qayıt;} else console.log ('LED Sürücü Uğurla Yükləndi'); });

Şərhdə deyildiyi kimi, pigpiod, LED rənglərini tənzimləmək üçün istifadə edəcəyimiz PWM siqnalları üçün aparat sürücüsüdür. İnanıram ki, artıq Raspbian -da quraşdırılıb, amma olmasa …

sudo apt-get install pigpiod

İndi əsl sınaq üçün! Server işə salınır!

DEBUG = webapp:* npm başlanğıcı

Addım 3: IFTTT Quraşdırması (Tetikleyici)

IFTTT Quraşdırması (Tetikleyici)
IFTTT Quraşdırması (Tetikleyici)
IFTTT Quraşdırması (Tetikleyici)
IFTTT Quraşdırması (Tetikleyici)

IFTTT çox şey edə bilər və bəzi tətbiqlərə baxmağı məsləhət görürəm.

Əvvəlcə bir hesab yaratmalısınız. Google Evinizlə əlaqəli eyni Google hesabını istifadə edin, əks halda birlikdə sinxronizasiya edilməyəcək. Tamamlandıqdan və daxil olduqdan sonra, adınızı və avatarınızı göstərən IFTTT səhifəsinin yuxarı sağ klikləyin. Sonra açılan menyudan Yeni Tətbiqi vurun.

Əgər maraqlanırsınızsa, IFTTT, açılan ekranda fərq etmədiyiniz təqdirdə IF This Then That sözünün mənasını verir. İstədiyimiz şey Google köməkçisi olsa, seçimlərimiz olaraq Webhookdur.

Axtarış çubuğunu yükləyəcək +bu düyməsini basaraq davam edin. Axtarışa Google köməkçisi yazın və axtarışın altındakı işarəni vurun.

Bir Tətik Seçin bölməsində, mətn tərkibli bir cümlə söyləmək adlanan 3 -cü seçimi seçin. İndi bu, eyni hərəkəti edəcək 3 əmrə sahib olmağınıza imkan verir. Rəngi qeyd edəcəyiniz yerdə $ ifadəsini əlavə edirsiniz. Məsələn, təbii olaraq Hey Google, Mavi LEDlər qurun (bir cihaza qışqırmaq kimi təbii ola bilər) deyərdimsə, Set LEDləri $ sahəsinə yazardım. Əmrin fərqli versiyaları olan bütün 3 sahə üçün bunu edin.

İstifadə etdiyim 3 ədəd idi

LED -lər

LED -ləri təyin edin

$ LED rəngini təyin edin

Son sahə, əmrinizi söylədikdən sonra Google Evinizin cavab verməsini istədiyiniz sahədir. İstədiyiniz hər şey ola bilər, amma Rəng Ayarını $ -dan istifadə etdim. $, Rəngi təkrarlayacağı deməkdir.

Tetikleyici Yarat düyməsini basın

Addım 4: IFTTT Quraşdırması (Fəaliyyət)

IFTTT Quraşdırması (Fəaliyyət)
IFTTT Quraşdırması (Fəaliyyət)
IFTTT Quraşdırması (Fəaliyyət)
IFTTT Quraşdırması (Fəaliyyət)

Tetikleyici Yarat düyməsini tıkladıqdan sonra, bu görünüşü geri yükləyəcəksiniz, ancaq bu Google köməkçisi loqotipi ilə əvəz edilmişdir. +Üzərinə basaraq davam edin

Axtarış çubuğuna gətirdiyi yerlə eyni şey. Webhooks yazın və axtarış çubuğunun altındakı webhook simgesini basın. Web Hooks üçün Fəaliyyət Seçin altında yalnız bir seçim var, buna görə Veb sorğusu vurun.

İşlərin bir az çətinləşdiyi yer budur. Google evinizdə başqa bir kompüter olmadığı üçün xarici IP ünvanınıza ehtiyacınız olacaq. Bunun üçün müəyyən bir liman yönləndirmə tələb olunacaq, ancaq buna daha sonra toxunacağıq. Xarici IP ünvanınızı əldə etmək üçün https://canyouseeme.org/ ünvanına daxil olun.

URL sahəsinə https://xxx.xxx.xxx.xxx:3000/{{TextField}} yazın (x xarici IP ünvanınızdır). Maraqlandığınız halda, TextField bir əmr verərkən seçdiyiniz rəngə sahib olacaq. 3000 istifadə etməyimizin səbəbi, Raspberry Pi Express serverinin işlədiyi liman olmasıdır. (Koddakı portu dəyişə bilərsiniz, ancaq Express üçün standart parametrlərdən istifadə edirik)

Metod üçün POST seçin.

Məzmun növü üçün mətn/düz seçin.

Bədən üçün {{TextField}} daxil edin

Bir POST əmrinin necə işlədiyini bilənlər, istəyin bədən xüsusiyyətlərini təhlil etsəniz, rəngi əldə edəcəyinizi düşünürsünüz. Nədənsə heç vaxt sorğunun gövdə sahəsinə heç bir şey daxil edilmir, buna görə də əslində URL -in rəngini təhlil edirəm. Ümid edirəm ki, indeks.js marşrutundakı kodumu asanlaşdıracaq. Amma mən kənara çəkilirəm.

Nəhayət, Fəaliyyət Yarat və sonra növbəti səhifədə Bitir düyməsini basın. (Bildirişləri söndürdüm, amma bu üstünlükdür)

Addım 5: Liman yönləndirmə

Liman Daşınması
Liman Daşınması
Liman Daşınması
Liman Daşınması

İşin izah edilməsinin çətin olduğu yer budur, çünki bütün marşrutlaşdırıcılar fərqlidir …

İndi Google 3000 portunu istifadə edərək evimizə bir əmr göndərir, ancaq LAN -da hansı cihaza getməli olduğunu bilmir. Bunu həll etmək üçün 3000 portunu Raspberry Pi -nin yerli IP ünvanına yönləndirməliyik.

10.0.0.1 və ya 192.168.1.1 (son rəqəmin 254 olduğu yerdə də gördüm) istifadə edərək marşrutlaşdırıcınıza daxil olun və liman yönləndirməsini tapın. Limana yönləndirmədə, görüntüyə bənzər şəkildə, yeni bir cihaz (IFTTT) adlandıracaqsınız və portu (3000) Pi -nin IP ünvanına yönləndirəcəksiniz (mənim vəziyyətimdə 10.0.0.11).

Yeni parametrinizi qeyd edin, yönlendiricinizi yenidən başladın və Raspberry Pi serverinizin hələ də işlədiyinə əmin olun. Çalışmırsa, yenidən başladın.

Https://canyouseeme.org/ lazımlı veb saytına qayıdın. IP ünvanınızın altında bir liman yoxlayıcısı var. Liman yönləndirməsinin doğru olduğunu düşünərək 3000 yazın və yoxlama limanına vurun. Uğurla geri dönməlidir.

Addım 6: İşinizi indiyə qədər yoxlayın

İşinizi İndiyə qədər Yoxlayırıq
İşinizi İndiyə qədər Yoxlayırıq
İşinizi İndiyə qədər Yoxlayırıq
İşinizi İndiyə qədər Yoxlayırıq

İndi… gözlədiyiniz an… Google -a LED -lər mavi kimi bir əmr deyin (mənim nümunəmi təqib edirsinizsə).

Hər şeyin düzgün getdiyini düşünsəniz, şəkildə gördüyünüz nəticəni əldə edəcəksiniz. Hələ bir dövrəmiz yoxdur, buna görə ekranda yalnız mətn görürsünüz. Google -dan işlənmədən və Pi -də görünməzdən əvvəl ümumiyyətlə ikinci və ya 2 gecikmə olur.

(Şəkildə olduğu kimi çıxdısa növbəti addıma keçin)

İşə yaramadığı təqdirdə baxmalı olduğunuz bir neçə şey var …

Şəkildə bir sətir var

POST /rəng /mavi 200 250.458 ms - 2

200 ən vacib hissədir. 200 görmürsənsə, serverin məlumatlarla nə edəcəyini bilmədiyi pis bir POST var idi. Addım 2 -ə qayıdın və index.js faylınızı yoxlayın.

Şəkildə də

stdout: mavi

stderr:

Bu, LEDləri işlədən python faylının çıxışıdır. Orada bir səhv görürsünüzsə, 2 -ci addımda sürücünüzün quraşdırılmaması ola bilər.

Nəhayət, heç bir şey görünməsəydi … IFTTT düzgün qurulmamış və ya serverə qoşula bilməmiş ola bilər. IFTTT səhifəsinə qayıdın və yuxarı naviqasiya çubuğunda Fəaliyyət düyməsini basın. Orada tətbiqinizin hər dəfə işlədiyini görə bilərsiniz və bir səhv olarsa bunun nə olduğunu görə bilərsiniz. Pi serverini söndürüb Google əmri verdim və şəkildəki xətanı gördüm.

Addım 7: Dövrün qurulması

Dövrə qurulması
Dövrə qurulması
Dövrə qurulması
Dövrə qurulması
Dövrə qurulması
Dövrə qurulması

Bunu etməmizin səbəbi, Raspberry Pi -nin kifayət qədər gücə sahib olmamasıdır … Deməli, həll… DAHA GÜC (Taylor uzaqdan qışqırır). AKA başqa bir enerji təchizatı (12V 2A)

Dövrə hissələri üçün materiallar

  • Protoboard
  • Tel
  • RGB LED şeridi
  • 12V Güc Təchizatı - 2 Amperdən yuxarı hər şey yaxşı olmalıdır
  • DC Barel Jack - Elektrik təchizatı ilə eyni ölçüdə
  • NPN BJT Power Transistors (x3) - TIP31C istifadə edirəm
  • Kişi və qadın pin başlıqları

Pi Zero GPIO ilə interwebs -dən oğurladığım lazımlı şəkildən istifadə edərək GPIO17, GPIO18 və GPIO 27 -nin GND ilə bir -birinin yanında olduğunu görə bilərsiniz. 4 sancaqlı kvadratdan istifadə edəcəyik (Pins 11, 12, 13, 14).

Əvvəla, görüntüdə göründüyü kimi LED başlığınıza kişi başlıqlarını lehimləməyi məsləhət görürəm (mənim ən yaxşı işim deyil). Lazım gələrsə, bu, asanlıqla ayrılmağa imkan verir. LED şeridi protoboruma bağlamaq üçün qadın başlıqlarından və protoborddan Raspberry Pi -yə olan kişi başlıqlarından istifadə etdim. (Həmişə güc/siqnal mənbəyi üçün qadın əlaqələrindən istifadə edin). Mənim kimi bütün Pi sancaqlarını bir -birinin yanına daşımaq lazım deyil … Sadəcə təmiz görünməsini istədim, amma çox iş idi.

Dövrə izahı

Transistorlar ilə tanış olmayanlarınız üçün tranzistorlar əsasən rəqəmsal keçiddir. Pi -dən GPIO pinləri üç açarı (qırmızı, yaşıl və mavi) işə salır. Xüsusilə dövrə diaqramında RED -ə baxdığımızda, GPIO_17 aktiv olduqda, qırmızı işıqların yandırılmasına səbəb olaraq RED -i GND -yə bağlayan keçid "bağlanır". GPIO_17 sönəndə açar açıqdır və işıqlar sönür.

Baza - GPIO

Kolleksiyaçı - Rənglər (QIRMIZI, YAŞIL, MAVİ)

Emitent - Zəmin (həm Güc Təchizatı, həm də Pi)

Pi zəminini elektrik təchizatı zəmininə bağladığınızdan əmin olun. İşıqlar hələ də işləyəcək, ancaq yer bağlanana qədər çox zəif görünür.

Protoboardda 4 -cü tranzistor görünüşlü cihazım var. 12V -ni 5V -ə çevirmək üçün istifadə olunan bir L7805CV -dir, buna görə Pi -ni eyni dövrədə gücləndirə bilərəm. İşlədi, amma istiləşməyə davam etdi, buna görə əlaqələrini kəsdim.

Addım 8: Test edin

Dövrə tamamlandıqdan sonra hər hansı bir əlaqə qurmadan əvvəl Pi -ni yenidən başladın. Bunun səbəbi, pinlərin server testindən hələ də aktiv olmasıdır. Alternativ olaraq, serveri və pigpiod xidmətini öldürə bilərsiniz.

LEDləri və keçidləri protoborddan Pi -yə qoşun. Güc verməzdən əvvəl bütün əlaqələri iki dəfə yoxlayın. Səhv bağlasanız, Pi -ni qızardın (heç bir təzyiq yoxdur).

Yoxlama siyahısı

  • Telləri yoxlayın
  • Güc Pi
  • Güc Devresi
  • Serverə Başla (DEBUG = webapp: ~/piWebpage/webApp qovluğunda olarkən* npm)
  • Google -a təklifinizi bildirməsini deyin!

Tebrikler, heç bir şeyi partlatmadınız və indi LED -lərinizi Google Home -dan idarə edə bilərsiniz.

Hər hansı bir probleminiz varsa şərh yazın və mən sizə geri dönmək üçün əlimdən gələni edəcəyəm!

Tövsiyə: