İçindekiler:

IoT Okulu Projesi Philips Hue: 19 Adım
IoT Okulu Projesi Philips Hue: 19 Adım

Video: IoT Okulu Projesi Philips Hue: 19 Adım

Video: IoT Okulu Projesi Philips Hue: 19 Adım
Video: Led Işıklı Oda 😫🤤#Shorts 2024, Temmuz
Anonim
IoT Okulu Projesi Philips Hue
IoT Okulu Projesi Philips Hue

Bu, okul için yazmam gereken bir el kitabı. Tamamlanmadı ve onu kullanıp kullanamayacağınızdan bile emin değilim. API'ler hakkındaki bilgim minimum düzeyde. Arkasında hava durumuna, dışarıdan gelen ışığa vs. tepki veren ışıklar ile interaktif bir ayna yapmak istedik.

Bir Philips Hue lambasını Arduino ile nasıl programlayabileceğime baktım. Burada, tüm adımlarımı ve ne kadar yol kat ettiğimi açıklıyorum. Hue'yu Arduino ile programlamayı başaramadım ama bunun iyi bir başlangıç olduğunu düşünüyorum.

Şuna ihtiyacım vardı: bir Arduino a hue lambası bir köprü Philips Hue geliştirici hesabı

Kaynaklar: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-…

1. Adım: Başlayın

API belgelerine erişmeden önce geliştirici olarak kaydolmanız gerekir. Ücretsizdir, ancak şartlar ve koşulları kabul etmeniz gerekir. Buradan bir tane yapabilirsiniz >

2. Adım: Hue Uygulaması

Resmi Philips Hue Uygulamasını indirin. Telefonunuzu Hue köprüsünün açık olmasını istediğiniz ağa bağlayın.

3. Adım: Köprüyü Bağlayın

Köprünüzü ağınıza bağlayın ve düzgün çalışıyor. Akıllı telefon uygulamasının aynı ağdaki ışıkları kontrol edip edemediğini test edin. Aynı Wi-Fi ağında olması gerekir.

4. Adım: IP Adresi

Ardından, ağınızdaki köprünün IP adresini bulmanız gerekir. Uygulamadaki köprüye bağlanmak için bağlantıya basın ve ışıkları kontrol etmeyi deneyin.

Adım 5:

Her şey çalışıyorsa, uygulamadaki ayarlar menüsüne gidin. “Köprüm”e gidin, “Ağ ayarları”na gidin. DHCP geçişini kapatın ve köprünün IP adresini görürsünüz. IP adresini not edin, ardından DHCP'yi tekrar açın.

6. Adım: Tonunuzda Hata Ayıklayın

Tonunuzdaki Hataları Ayıklayın
Tonunuzdaki Hataları Ayıklayın

Bunu yazdığınızda, Hue'nuzda hata ayıklamanız gerekir. Bu adım için IP Adresine ihtiyacınız var. Bir sonraki siteyi ziyaret etmelisiniz.

/debug/clip.html

Arayüz resimdeki gibi görünecektir. Bu, tüm web trafiğinin ve hue RESTful arayüzünün temelidir.

Philips Hue sitesinin Dinlendirici arayüzü hakkında bu bilgiyi aldım.

URL: bu aslında ton sistemi içindeki belirli bir kaynağın (şeyin) yerel adresidir. Işık, bir grup ışık veya daha birçok şey olabilir. Bu komut içinde etkileşim kuracağınız nesne budur.

Bir gövde: Bu, mesajın neyi ve nasıl değiştirmek istediğinizi açıklayan kısmıdır. Buraya, JSON formatında, değiştirmek/eklemek istediğiniz kaynak adını ve değerini girin.

Bir yöntem: burada hue çağrısının kullanabileceği 4 HTTP yöntemi arasından seçim yapabilirsiniz.

GET: Bu, adreslenen kaynak hakkındaki tüm bilgileri getirme komutudur.

PUT: Bu, adreslenen bir kaynağı değiştirme komutudur.

POST: Bu, adreslenen kaynak içinde yeni bir kaynak yaratma komutudur.

DELETE: Bu, adreslenen kaynağı silme komutudur. Yanıt: Bu alanda, komutunuza verilen yanıtı göreceksiniz. Ayrıca JSON formatında.

7. Adım: Başlayalım

Başlayalım
Başlayalım

Şimdi, köprünün sizin için oluşturduğu rastgele oluşturulmuş bir kullanıcı adına ihtiyacımız var. Bunu doldurarak bir tane alacaksınız.

URL'yi girin:

/api/

GÖVDE koyun:

ve GET'e basın

Bu komut temel olarak "lütfen /api içinde (kullanıcı adlarının bulunduğu yerde) aşağıdaki özelliklere sahip yeni bir kaynak oluşturun" diyor. İlk başta bir hata alırsınız ve bunun nedeni Philips Hue'nun güvenlik adımı olmasıdır. Düğmeye basarak, köprüye fiziksel erişiminiz olduğunu kanıtlarlar.

Adım 8:

resim
resim

Şimdi Köprüdeki düğmeye basın ve tekrar POST'a tıklayın.

Şimdi köprünün sizin için yaptığı bir kullanıcı adı alacaksınız.

9. Adım: Işıklarla Bir Şeyler Yapalım

Işıklarla Bir Şeyler Yapalım
Işıklarla Bir Şeyler Yapalım

Kullanıcı adınızı kopyalayın ve aşağıdaki satıra koyun.

Bunu URL'nize koyun

/api/ /ışıklar

GET'e basın

Sisteminizdeki tüm ışıklar ve adlarıyla birlikte bir JSON yanıtı almalısınız.

Adım 10:

resim
resim

Okuldan bazı Hue Lights ödünç aldım, kullandığım id 3 olanı. Bu ışık hakkında özel bilgi istiyorum.

Bunu zaten sahip olduğunuz URL'nin yanına koyun:

/api/ /ışıklar/3

GET'e basın

Şimdi Led 3 ile ilgili tüm bilgileri aldınız (1 gibi başka bir numaranız varsa, onunla ilgili bilgileri göreceksiniz).

Adım 11: Işığı Kontrol Edelim

Işığı Kontrol Edelim
Işığı Kontrol Edelim

"Durumda" ledimin "açık" olduğunu görüyorsunuz. Işığı "durumda" kontrol etmek istiyoruz.

Bunu zaten sahip olduğunuz URL'nin yanına koyun:https:// /api/ /lights/ 3/ state

BODY'ye bir sonraki satırı koy

PUT'a basın

Şimdi ışığınız kapanacak! Gövdedeki değeri true olarak değiştirin, ışık tekrar yanacaktır.

Adım 1/2:

Şimdi her şey çalışıyor, bunu Arduino'mla yapmak istiyorum. Işık renginin değişmesi için Philips Hue'nun verdiği linke baktım. Ama bunun için Python'a ihtiyacınız var, Python ile hiç çalışmadım bu yüzden başka bir şey aradım.

Bu koda bakmak isterseniz, burada Github bağlantısına sahibim:

github.com/bsalinas/ArduinoHue

Adım 13:

Bu geliştirici sitesinden arduinoma nasıl bilgi alabileceğime baktım. Çoğu zaman dilini anlamadım. Ama James Bruce'un bir web sitesinde bazı kodlar buldum.

Bu, web sitesinin bağlantısıdır.

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

Adım 14:

Önce Ethernet kablosu kullandığını gördüm. Sadece bir Hue Ampulüm vardı ve bir Arduino'ya Köprü yaptım ve çok az kod anlayışım vardı. Kodunu anlamam biraz zaman aldı, ama hala gerçekten anlamıyorum.

İlk önce bu kütüphaneyi internet için ekledim.

#Dahil etmek

Bu, ağınız içindir (Hue Ampul ile aynı olmalıdır)

const char* ssid = " "; // WiFi ağınızı buraya yazın SSIDconst char* password = " "; // WiFi ağ şifrenizi buraya girin

Bunlar, Köprünüzün kimliği ve köprünüzün size verdiği kullanıcı adıdır. (80'in ne anlama geldiğini bilmiyorum ama biraz araştırma yaptığımda ağlar için kullanıldığını gördüm).

// Ton sabitleri const char hueHubIP = ""; // Hue hub IP const char hueUsername = ""; // Hue kullanıcı adı const int hueHubPort = 80;

// Hue değişkenleri bool hueOn; // açık/kapalı int hueBri; // parlaklık değeri uzun hueHue; // ton değeri String hueCmd; // Ton komutu

işaretsiz uzun arabellek=0; //alınan veri depolaması için arabellek imzasız uzun adres;

Adım 15:

Boş kurulum için en çok internet bağlantısı için yaptım. Bu kodda Arduino, ağa bağlanıp bağlanamayacağını arıyor.

geçersiz kurulum(){ Serial.begin(9600);

Seri.println();

Serial.printf("%s'ye bağlanılıyor", ssid);

WiFi.begin(ssid, şifre);

while (WiFi.status() != WL_CONNECTED) {

gecikme(500);

Seri.print("."); }

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

16. Adım:

James'in döngüsünde, bir If ve else ifadesi olduğunu gördüm. Ama bu ethernet kablosu içindi, bu yüzden bunu dışarıda bırakmaya çalıştım. Ben de bazen ayarlamaya çalıştım, ama henüz çok fazla veri ile bilmiyordum. Anladığım kodda bazı şeyler, dizede Hue ışığına verilen veriler var.

boşluk döngüsü(){

// Kırmızı ve pembe arasındaki iki ışığı soyan dört örnek komut dizisi. Kullanılacak tam komutlar hakkında daha fazla ayrıntı için Hue API // belgelerini okuyun, ancak tırnak işaretlerinin öncelenmesi gerektiğini unutmayın.

Dize komutu = "{"on\": true, \"hue\": 50100, \"sat\":255, \"bri\":255, \"transitiontime\":"+String(random(15), 25))+"}";setHue(1, komut);

komut = "{"on\": true, \"hue\": 65280, \"sat\":255, \"bri\":255, \"transitiontime\":"+String(rastgele(15, 25))+"}"; setHue(2, komut);

komut = "{"hue\": 65280, \"sat\":255, \"bri\":255, \"geçiş zamanı\":"+String(rastgele(15, 25))+"}"; setHue(1, komut);

komut = "{"hue\": 50100, \"sat\":255, \"bri\":255, \"geçiş zamanı\":"+String(rastgele(15, 25))+"}"; setHue(2, komut);

}

Adım 17:

Bir sonraki kod bir Boole idi, ancak Arduino'da Bool yazmanız gerekiyor. İlk başta, istemci kelimesi nedeniyle çok fazla hata aldım. Baktım ve bazı kodların "WifiClient client;" satırını kullandığını gördüm. Bu yüzden kullandım ve işe yaradı.

if ifadesinde genellikle client.print'i görürsünüz. Kodun içine bakarsanız, daha önce girdiğiniz URL'nin parçalara ayrıldığını göreceksiniz. Şimdi kendi kodunuzu girin. 3. LED ışığımı seçmek zorunda kaldım.

/* setHue(), JSON formatında (temelde bir Javascript stili değişkenler * ve değerler dizisi) hafif bir sayı ve * düzgün biçimlendirilmiş bir komut dizesi iletilmesi gereken ana komut işlevimizdir. Başlangıçta belirtilen IP'deki Köprü. */

bool setHue(int lightNum, String komutu) {

WiFiClient istemcisi;

if (client.connect(hueHubIP, hueHubPort)){

while (client.connected()){

client.print("PUT /api/"); client.print(hueKullanıcı adı); client.print("/ışıklar/"); client.print(lightNum); // hueLight sıfır tabanlı, 1 client.println("3/durum"); // burada ton adını ve stateclient.print("Host: "); client.println(hueHubIP); client.print("İçerik-Uzunluk: "); client.println(komut.uzunluk()); client.println("Content-Type: text/plain;charset=UTF-8"); client.println(); // gövdeden önceki boş satır client.println(komut); // Ton komutu

} müşteri.durdur(); true döndür; // komut yürütüldü }

aksi takdirde false döndürür; // komut başarısız oldu }

18. Adım:

İkinci Boolean'da, bazı kelimeleri değiştirerek aynı şeyi yaptım. İşe yarayıp yaramadığını görmek için yükledim.

/* Mantığınızın ışığın mevcut durumuna bağlı olması durumunda bir yardımcı fonksiyon. * Bu, bir ışığın açık olup olmadığını öğrenmek için kontrol edebileceğiniz bir dizi global değişkeni ayarlar * ve renk tonu vb. Sadece komutları göndermek için gerekli değildir */

bool getHue(int lightNum) {

WiFiClient istemcisi;

if (client.connect(hueHubIP, hueHubPort)) {

client.print("GET /api/"); client.print(hueKullanıcı adı); client.print("/ışıklar/"); client.print(lightNum); client.println("3/durum"); client.print("Ana Bilgisayar: "); client.println(hueHubIP); client.println("İçerik türü: uygulama/json"); client.println("canlı tut"); client.println();

while (client.connected()) { if (client.available()) { client.findUntil("\"on\":", "\0"); hueOn = (client.readStringUntil(', ') == "true"); // ışık yanıyorsa, değişkeni true olarak ayarlayın client.findUntil("\"bri\":", "\0"); hueBri = client.readStringUntil(', ').toInt(); // değişkeni parlaklık değerine ayarla client.findUntil("\"hue\":", "\0"); hueHue = client.readStringUntil(', ').toInt(); // değişkeni ton değeri kesmesine ayarla; // henüz diğer ışık niteliklerini yakalayamadı } } client.stop(); true döndür; // yakalanan, bri, hue } else false döndür; // okuma hatası, bri, hue }

Adım 19:

resim
resim

Philips Hue ile bağlantı kurabileceğimi düşünüyorum. Bilgi alıyorum ama yine de kullanılması gerekiyor.

Ne yazık ki, bu benim kodlayabileceğimin ötesine geçiyor. Cevabı biliyorsanız veya düzeltilmesi gereken gerçek hatalar varsa, duymak isterim.:-)

Önerilen: