Mündəricat:

IoT Məktəbi Layihəsi Philips Hue: 19 Addım
IoT Məktəbi Layihəsi Philips Hue: 19 Addım

Video: IoT Məktəbi Layihəsi Philips Hue: 19 Addım

Video: IoT Məktəbi Layihəsi Philips Hue: 19 Addım
Video: #140 IKEA Tradfri IOT Smart Lighting System Hack 2024, Iyul
Anonim
IoT Məktəbi Layihəsi Philips Hue
IoT Məktəbi Layihəsi Philips Hue

Bu məktəb üçün yazmalı olduğum bir dərslikdir. Tam deyil və hətta istifadə edə biləcəyinizə əmin deyiləm. API haqqında biliklərim minimumdur. Arxasında hava şəraiti, kənardan gələn işıq və s.

Philips Hue lampasını Arduino ilə necə proqramlaşdıra biləcəyimə baxdım. Burada bütün addımlarımı və nə qədər irəli getdiyimi izah edirəm. Hue proqramını Arduino ilə proqramlaşdırmağı bacarmadım, amma bunun yaxşı bir başlanğıc olduğunu düşünürəm.

Buna ehtiyacım var: bir Arduino çalar lampası körpü Philips Hue geliştirici hesabı

Mənbələr: https://www.developers.meethue.com/documentation/g…https://github.com/bsalinas/ArduinoHuehttps://arduino-esp8266.readthedocs.io/en/latest/e…https:// www.makeuseof.com/tag/control-philips-hue-…

Addım 1: Başlayın

API sənədlərinə girməzdən əvvəl bir geliştirici olaraq qeydiyyatdan keçməlisiniz. Pulsuzdur, amma şərtləri qəbul etməlisiniz. Burada edə bilərsiniz>

Addım 2: Hue Tətbiqi

Rəsmi Philips Hue Tətbiqini yükləyin. Telefonunuzu Hue körpüsünün aktiv olmasını istədiyiniz şəbəkəyə qoşun.

Addım 3: Körpünü bağlayın

Körpünüzü şəbəkənizlə birləşdirin və düzgün işləyir. Smartfon tətbiqinin eyni şəbəkədəki işıqları idarə edə biləcəyini sınayın. Eyni Wi-Fi şəbəkəsində olmalıdır.

Addım 4: IP ünvanı

Sonra şəbəkənizdəki körpünün IP ünvanını kəşf etməlisiniz. Tətbiqdəki körpüyə qoşulmaq və işıqları idarə etməyə çalışmaq üçün linki vurun.

Addım 5:

Hər şey işləyirsə, tətbiqdəki parametrlər menyusuna keçin. "Körpüm" ə, "Şəbəkə parametrləri" nə gedin. DHCP keçidini söndürün və körpünün IP ünvanını görürsünüz. IP ünvanını qeyd edin, sonra DHCP -ni yenidən yandırın.

Addım 6: Hue'nuzu düzəldin

Hue'nuzu düzəldin
Hue'nuzu düzəldin

Bunu yazanda Hue'nuzu düzəltməlisiniz. Bu addım üçün IP ünvanına ehtiyacınız var. Növbəti saytı ziyarət etməlisiniz.

/debug/clip.html

Şəkildə interfeys belə görünəcək. Bu, bütün veb trafikinin və hue RESTful interfeysinin əsasını təşkil edir.

Philips Hue saytının Restful interfeysi haqqında bu məlumatı aldım.

URL: bu əslində hue sistemindəki müəyyən bir mənbənin (şeyin) yerli ünvanıdır. Bu işıq, bir qrup işıq və ya daha çox şey ola bilər. Bu komanda daxilində qarşılıqlı əlaqə quracağınız obyektdir.

Bədən: bu, nəyi və necə dəyişdirmək istədiyinizi izah edən mesaj hissəsidir. Burada JSON formatında dəyişdirmək/əlavə etmək istədiyiniz mənbənin adını və dəyərini daxil edirsiniz.

Bir üsul: burada hue zənginin istifadə edə biləcəyi 4 HTTP metodundan birini seçə bilərsiniz.

ƏLAVƏ EDİN: bu, ünvanlanan mənbə haqqında bütün məlumatları əldə etmək əmridir

PUT: bu ünvanlı bir mənbəni dəyişdirmək əmridir

POST: bu, ünvanlanmış mənbənin daxilində yeni bir qaynaq yaratmaq əmridir

SİL: bu ünvanlı mənbəni silmək əmridir Cavab: Bu sahədə əmrinizə verilən cavabı görəcəksiniz. Həm də JSON formatında.

Addım 7: Başlayaq

Gəlin başlayaq
Gəlin başlayaq

İndi körpünün sizin üçün yaratdığı təsadüfi bir istifadəçi adına ehtiyacımız var. Bunu doldurmaqla birini alacaqsınız.

URL daxil edin:

/api/

Bədənə qoyun:

və GET düyməsini basın

Bu əmr əsasən "xahiş edirəm /api içərisində yeni bir qaynaq yaradın" (istifadəçi adlarının oturduğu yer) deyərək aşağıdakı xüsusiyyətlərə malikdir. Əvvəlcə bir səhv alacaqsınız və bunun səbəbi Philips Hue -nin təhlükəsizlik addımıdır. Düyməni basaraq körpüyə fiziki girişinizin olduğunu sübut edirlər.

Addım 8:

Şəkil
Şəkil

İndi körpüdəki düyməni basın və yenidən POST düyməsini basın.

İndi körpünün sizin üçün yaratdığı bir istifadəçi adı alacaqsınız.

Addım 9: İşıqlarla Bir şey edək

İşıqlarla Bir şey edək
İşıqlarla Bir şey edək

İstifadəçi adınızı kopyalayın və aşağıdakı sətirə qoyun.

Bunu URL -ə daxil edin

/api//işıqlar

GET düyməsini basın

Sisteminizdəki bütün işıqlar və adları olan bir JSON cavabı almalısınız.

Addım 10:

Şəkil
Şəkil

Hue Lights -ı məktəbdən götürdüm, istifadə etdiyim id 3 -lüdür. Bu işıq haqqında xüsusi məlumat istəyirəm.

Bunu artıq əldə etdiyiniz URL -nin yanına qoyun:

/api//işıqlar/3

GET düyməsini basın

İndi Led 3 haqqında bütün məlumatları əldə edirsiniz (1 kimi başqa bir nömrəniz varsa, bu nömrəni görürsünüz).

Addım 11: İşığı idarə edək

İşığı idarə edək
İşığı idarə edək

"Vəziyyətdə" rəhbərimin "açıq" olduğunu görürsünüz. İşığı "vəziyyətdə" idarə etmək istəyirik.

Bunu artıq əldə etdiyiniz URL -nin yanına qoyun: https:/// api// lights/ 3/ state

Növbəti sətri BODY -ə qoyun

PUT düyməsini basın

İndi işığınız sönəcək! Bədəndəki dəyəri doğru olaraq dəyişdirin və işıq yenidən açılacaq.

Addım 12:

İndi hər şey işləyir, bunu Arduino ilə etmək istəyirəm. Açıq rəng dəyişikliyi etmək üçün Philips Hue -in verdiyi bağlantıya baxdım. Ancaq bunun üçün Pythona ehtiyacınız var, Python ilə heç işləməmişəm, buna görə başqa bir şey axtardım.

Bu koda baxmaq istəsəniz burada Github bağlantım var:

github.com/bsalinas/ArduinoHue

Addım 13:

Bu geliştirici saytından arduino -ya necə məlumat əldə edə biləcəyimə baxdım. Çox vaxt dili başa düşmədim. Ancaq bir saytda James Bruce -dan bir kod tapdım.

Bu veb saytın bağlantısıdır.

www.makeuseof.com/tag/control-philips-hue-lights-arduino-and-motion-sensor/

Addım 14:

Əvvəlcə Ethernet kabeli istifadə etdiyini gördüm. Yalnız Hue ampulüm və Arduino körpüsü və kod haqqında az anlayışım var idi. Onun kodunu başa düşməyim bir müddət çəkdi, amma hələ də tam anlamıram.

İlk dəfə bu kitabxananı internet üçün əlavə etdim.

#daxil edin

Bu şəbəkəniz üçündür (Hue Light ampul ilə eyni olmalıdır)

const char* ssid = ""; // WiFi şəbəkənizi bura qoyun SSIDconst char* password = ""; // WiFi şəbəkə parolunuzu bura daxil edin

Bunlar körpünüzün kimliyi və körpünüzün sizə verdiyi istifadəçi adıdır. (80 -in harada olduğunu bilmirəm, amma bir az araşdırma apardığımda bunun şəbəkələr üçün istifadə edildiyini gördüm).

// Hue sabitləri const char hueHubIP = ""; // Hue hub IP const char hueUsername = ""; // Hue istifadəçi adı const int hueHubPort = 80;

// Hue dəyişənləri bool hueOn; // aç/söndür int hueBri; // parlaqlıq dəyəri uzun hueHue; // hue dəyəri String hueCmd; // Hue əmri

işarəsiz uzun tampon = 0; // alınan məlumatların saxlanması üçün bufer imzasız uzun addr;

Addım 15:

Boşluq qurmaq üçün internet bağlantısı üçün ən çox etdim. Bu kodda Arduino, şəbəkəyə qoşula biləcəyini araşdırır.

void setup () {Serial.begin (9600);

Serial.println ();

Serial.printf (" %s -ə qoşulur", ssid);

WiFi.begin (ssid, parol);

isə (WiFi.status ()! = WL_CONNECTED) {

gecikmə (500);

Serial.print ("."); }

Serial.println ("bağlı"); }

Addım 16:

James döngəsində, bir If və else ifadəsi olduğunu gördüm. Ancaq bu, Ethernet kabeli üçün idi, buna görə də bunu kənara qoymağa çalışdım. Mən də bəzən düzəltməyə çalışdım, amma çox məlumatla hələ bilmirdim. Anladığım koddakı bəzi şeylər, sətirdə Hue işığına verilən məlumatlardır.

boşluq döngəsi () {

// Rəngi qırmızı və çəhrayı arasında iki işığı söndürən dörd nümunə əmrdən ibarət bir sıra. Hue əmrləri haqqında daha çox məlumat üçün Hue API // sənədlərini oxuyun, ancaq qeyd edin ki, qiymət işarələrindən qaçmaq lazımdır.

String əmri = "{" on / ": true, \" hue / ": 50100, \" sat / ": 255, \" bri / ": 255, \" o'tish zamanı / ":"+String (təsadüfi (15, 25))+"}"; setHue (1, əmr);

command = "{" on / ": true, \" hue / ": 65280, \" sat / ": 255, \" bri / ": 255, \" o'tish zamanı / ":"+String (təsadüfi (15, 25))+"}"; setHue (2, əmr);

command = "{" ton / ": 65280, \" sat / ": 255, \" bri / ": 255, \" keçid vaxtı / ":"+String (təsadüfi (15, 25))+"}"; setHue (1, əmr);

command = "{" ton / ": 50100, \" sat / ": 255, \" bri / ": 255, \" keçid vaxtı / ":"+String (təsadüfi (15, 25))+"}"; setHue (2, əmr);

}

Addım 17:

Növbəti kod Boolean idi, ancaq Arduinoda Bool yazmalısınız. Əvvəlcə müştəri sözünə görə çoxlu səhvlər aldım. Buna görə baxdım və gördüm ki, bəzi kodlar "WifiClient müştəri;" xəttini istifadə edir. Buna görə istifadə etdim və işlədi.

İf ifadəsində tez -tez client.print görürsünüz. Kodu araşdırsanız, əvvəllər daxil etdiyiniz URL -nin parçalara bölündüyünü görəcəksiniz. İndi öz kodunuzu daxil edin. Üçüncü LED işığımı seçmək məcburiyyətində qaldım.

/ * setHue (), JSON formatında (əsasən Javascript üslubunda dəyişənlər və dəyərlər dəsti olan) yüngül bir rəqəm və * düzgün biçimlendirilmiş bir əmr sətri keçməli olan əsas əmr funksiyamızdır. Daha sonra sadə bir HTTP PUT sorğusu göndərir başlanğıcda göstərilən IP -də körpü. */

bool setHue (int lightNum, String əmri) {

WiFi müştəri;

əgər (client.connect (hueHubIP, hueHubPort)) {

while (client.connected ()) {

client.print ("PUT /api /"); client.print (hueUsername); client.print ("/işıqlar/"); client.print (lightNum); // hueLight sıfıra əsaslanır, 1 client.println ("3/state") əlavə edin; // burada hue adını və stateclient.print ("Host:") dəyişdirdim; müştəri.println (hueHubIP); client.print ("Məzmun-Uzunluq:"); client.println (command.length ()); client.println ("Məzmun Tipi: mətn/düz; charset = UTF-8"); müştəri.println (); // bədən müştəri qarşısında boş sətir.println (əmr); // Hue əmri

} client.stop (); doğru qayıtmaq; // əmr icra edildi}

əks halda yalan; // əmr uğursuz oldu}

Addım 18:

İkinci Boolean -da, bəzi sözləri dəyişdirməklə eyni şeyi etdim. İşləyib -işləmədiyini görmək üçün yüklədim.

/* Məntiqinizin işığın hazırkı vəziyyətindən asılı olması halında köməkçi funksiyası. * Bu, bir işığın hazırda olub olmadığını öyrənmək üçün yoxlaya biləcəyiniz bir sıra qlobal dəyişənləri təyin edir * və rəng və s. Yalnız əmrləri göndərmək üçün lazım deyil */

bool getHue (int lightNum) {

WiFi müştəri;

əgər (client.connect (hueHubIP, hueHubPort)) {

client.print ("GET /api /"); client.print (hueUsername); client.print ("/işıqlar/"); client.print (lightNum); client.println ("3/dövlət"); client.print ("Host:"); müştəri.println (hueHubIP); client.println ("Məzmun növü: application/json"); client.println ("canlı tut"); müştəri.println ();

while (client.connected ()) {if (client.available ()) {client.findUntil ("\" on / ":", "\ 0"); hueOn = (client.readStringUntil (',') == "doğru"); // işıq yanarsa, dəyişəni true client.findUntil ("\" bri / ":", "\ 0") olaraq təyin edin; hueBri = client.readStringUntil (',').toInt (); // dəyişəni parlaqlıq dəyərinə təyin edin client.findUntil ("\" hue / ":", "\ 0"); hueHue = client.readStringUntil (',').toInt (); // dəyər dəyişikliyini hue dəyər fasiləsinə təyin edin; // hələ digər işıq atributlarını ələ keçirmir}} client.stop (); doğru qayıtmaq; // captured on, bri, hue} else false return; // oxuma xətası, bri, hue}

Addım 19:

Şəkil
Şəkil

Philips Hue ilə əlaqə qura biləcəyimi düşünürəm. Məlumat alıram, amma hələ də istifadə olunmalıdır.

Təəssüf ki, bu kodlaşdıra biləcəyimdən kənara çıxır. Cavabı bilirsinizsə və ya düzəldilməsi lazım olan real səhvlər varsa, eşitmək istərdim.:-)

Tövsiyə: