Innehållsförteckning:

IoT School Project Philips Hue: 19 steg
IoT School Project Philips Hue: 19 steg

Video: IoT School Project Philips Hue: 19 steg

Video: IoT School Project Philips Hue: 19 steg
Video: Internet of Things (IoT) Projects | IoT based Motion Sensor | Smart Home 2024, Juli
Anonim
IoT School Project Philips Hue
IoT School Project Philips Hue

Det här är en manual som jag var tvungen att skriva för skolan. Det är inte komplett och jag är inte säker på om du ens kan använda det. Min kunskap om API: er är ett minimum. Vi ville göra en interaktiv spegel med lampor på baksidan som reagerade på vädret, ljus utifrån etc.

Jag tittade på hur jag kunde programmera en Philips Hue -lampa med en Arduino. I detta förklarar jag alla mina steg och hur långt jag har kommit. Jag har inte lyckats programmera nyansen med Arduino men jag tycker att det är en bra start.

Jag har behövt detta: en Arduino en nyanslampa och ett Philips Hue -utvecklarkonto

Källor: 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-…

Steg 1: Kom igång

Innan du kan komma åt API -dokumentationen måste du registrera dig som utvecklare. Det är gratis, men du måste acceptera villkoren. Du kan göra en här>

Steg 2: Hue App

Ladda ner den officiella Philips Hue -appen. Anslut din telefon till det nätverk du vill att Hue -bron är på.

Steg 3: Anslut bron

Anslut din bro med ditt nätverk och fungerar korrekt. Testa att smartphone -appen kan styra lamporna på samma nätverk. Det måste vara på samma Wi-Fi-nätverk.

Steg 4: IP -adress

Då måste du upptäcka IP -adressen för bron i ditt nätverk. Tryck på länken för att ansluta till bron i appen och försök att styra lamporna.

Steg 5:

Om allt fungerar, gå till inställningsmenyn i appen. Gå sedan till "Min bro", gå till "Nätverksinställningar". Stäng av DHCP -växeln så ser du IP -adressen till bron. Notera IP -adressen och slå sedan på DHCP igen.

Steg 6: Debug Your Hue

Felsöka din nyans
Felsöka din nyans

När du skrev det måste du felsöka din nyans. Du behöver IP-adressen för detta steg. Du måste besöka nästa webbplats.

/debug/clip.html

Gränssnittet kommer att se ut så här på bilden. Detta är grunden för all webbtrafik och för nyans RESTful -gränssnittet.

Jag fick den här informationen om det vilsamma gränssnittet på Philips Hue -webbplatsen.

URL: detta är faktiskt den lokala adressen till en specifik resurs (sak) inuti nyanssystemet. Det kan vara ljus, en grupp ljus eller många fler saker. Detta är objektet du kommer att interagera med inom detta kommando.

En kropp: detta är den del av meddelandet som beskriver vad du vill ändra och hur. Här anger du i JSON -format resursnamnet och värdet du vill ändra/lägga till.

En metod: här kan du välja mellan de 4 HTTP -metoder som nyansanropet kan använda.

GET: detta är kommandot för att hämta all information om den adresserade resursen

PUT: detta är kommandot för att ändra en adresserad resurs

POST: detta är kommandot för att skapa en ny resurs i den adresserade resursen

DELETE: detta är kommandot för att ta bort den adresserade resursen Svar: I det här området ser du svaret på ditt kommando. Även i JSON -format.

Steg 7: Låt oss komma igång

Låt oss börja
Låt oss börja

Nu behöver vi ett slumpmässigt genererat användarnamn som bron skapar för dig. Du får en genom att fylla i denna.

Sätt in webbadressen:

/api/

Sätt i KROPPEN:

och tryck på GET

Detta kommando säger i princip "snälla skapa en ny resurs inuti /api" (där användarnamnen sitter) med följande egenskaper. Först får du ett fel, och det beror på att det är säkerhetssteget för Philips Hue. Genom att trycka på knappen bevisar de att du har fysisk åtkomst till bron.

Steg 8:

Bild
Bild

Tryck nu på knappen på bron och klicka på POST igen.

Nu får du ett användarnamn som bron skapade åt dig.

Steg 9: Låt oss göra något med lamporna

Låt oss göra något med lamporna
Låt oss göra något med lamporna

Kopiera ditt användarnamn och lägg det på följande rad.

Lägg detta i din URL

/api//lights

Tryck på GET

Du bör få ett JSON -svar med alla lampor i ditt system och deras namn.

Steg 10:

Bild
Bild

Jag lånade några Hue Lights från skolan, den jag använder är den med id 3. Jag vill ha specifik information om detta ljus.

Lägg det här bredvid webbadressen du redan hade:

/api//lights/3

Tryck på GET

Nu får du all information om Led 3 (om du har ett annat nummer som 1 ser du information om det).

Steg 11: Låt oss styra ljuset

Låt oss styra ljuset
Låt oss styra ljuset

Du ser i "tillstånd" att min LED är "på". Vi vill styra ljuset i "tillstånd".

Lägg det här bredvid URL: en du redan hade: https:/// api// lights/ 3/ state

Sätt nästa rad i BODY

Tryck på PUT

Nu kommer ditt ljus att släckas! Ändra värdet i kroppen till true och ljuset tänds igen.

Steg 12:

Nu fungerar allt. Jag vill göra det här med min Arduino. Jag tittade på länken Philips Hue gav för att ändra ljusfärgen. Men du behöver Python för detta, jag har aldrig arbetat med Python så jag letade efter något annat.

Om du gillar att titta på den här koden har jag Github -länken här:

github.com/bsalinas/ArduinoHue

Steg 13:

Jag såg hur jag kunde få information från denna utvecklarwebbplats till min arduino. För det mesta förstod jag inte språket. Men jag hittade lite kod på en webbplats från James Bruce.

Detta är länken till webbplatsen.

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

Steg 14:

Först såg jag att han använde en Ethernet -kabel. Jag hade bara en Hue -lampa och Bridge en Arduino, och lite förståelse för kod. Det tog ett tag innan jag förstod hans kod, men jag förstår fortfarande inte riktigt det.

Jag lade först till detta bibliotek för internet.

#omfatta

Detta är för ditt nätverk (det måste vara samma som Hue -lampan)

const char* ssid = ""; // lägg här ditt WiFi -nätverk SSIDconst char* password = ""; // lägg här ditt WiFi -nätverkslösenord

Det här är ID: n för din Bridge och användarnamnet som din bridge gav dig. (Jag vet inte var 80 -talet står för men när jag gjorde lite research såg jag att det användes för nätverk).

// Nyanskonstanter const char hueHubIP = ""; // Hue hub IP const char hueUsername = ""; // Hue användarnamn const int hueHubPort = 80;

// Nyansvariabler bool hueOn; // på/av int hueBri; // ljusstyrka värde long hueHue; // nyansvärde String hueCmd; // Hue -kommando

osignerad lång buffert = 0; // buffert för mottagen datalagring osignerad lång addr;

Steg 15:

För tomrumsinställningen gjorde jag mest för internetanslutningen. I den här koden letar Arduino om han kan ansluta till nätverket.

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

Serial.println ();

Serial.printf ("Ansluter till %s", ssid);

WiFi.begin (ssid, lösenord);

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

fördröjning (500);

Serial.print ("."); }

Serial.println ("ansluten"); }

Steg 16:

I James loop såg jag att han hade ett If and else -uttalande. Men det var för ethernet -kabeln, så jag försökte lämna detta. Jag försökte också ibland justera det, men jag visste inte ännu med mycket data. Vissa saker i koden förstod jag, i strängen finns data som ges till Hue -ljuset.

void loop () {

// En serie med fyra provkommandon, vilken färg bleknar två ljus mellan rött och rosa. Läs om Hue API // -dokumentationen för mer information om de exakta kommandona som ska användas, men observera att citattecken måste undvikas.

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

command = "{" on / ": true, \" hue / ": 65280, \" sat / ": 255, \" bri / ": 255, \" övergångstid ":"+String (random (15, 25))+"}"; setHue (2, kommando);

command = "{" hue / ": 65280, \" sat / ": 255, \" bri / ": 255, \" övergångstid / ":"+String (random (15, 25))+"}"; setHue (1, kommando);

command = "{" hue / ": 50100, \" sat / ": 255, \" bri / ": 255, \" övergångstid / ":"+String (random (15, 25))+"}"; setHue (2, kommando);

}

Steg 17:

Nästa kod var en booleskt, men i Arduino måste du skriva Bool. Först fick jag många fel på grund av ordet klient. Så jag letade upp det och såg att någon kod använde raden "WifiClient -klient;". Så jag använde det till och det fungerade.

I if -satsen ser du ofta client.print. Om du tittar in i koden ser du att webbadressen du angav tidigare är uppdelad i bitar. Ange nu din egen kod. Jag var tvungen att välja mitt tredje LED -ljus.

/ * setHue () är vår huvudsakliga kommandofunktion, som måste skickas till ett lätt nummer och en * korrekt formaterad kommandosträng i JSON -format (i grunden en Javascript -stilmatris med variabler * och värden. Den gör sedan en enkel HTTP PUT -begäran till bron vid den IP som angavs i början. */

bool setHue (int lightNum, String -kommando) {

WiFiClient -klient;

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

medan (client.connected ()) {

client.print ("PUT /api /"); client.print (hueUsername); client.print ("/lights/"); client.print (lightNum); // hueLight zero based, lägg till 1 client.println ("3/state"); // här ändrade jag nyansnamnet och stateclient.print ("Host:"); client.println (hueHubIP); client.print ("Content-Length:"); client.println (command.length ()); client.println ("Content-Type: text/plain; charset = UTF-8"); client.println (); // tom rad före body client.println (kommando); // Hue -kommando

} client.stop (); återvända sant; // kommando kört}

annars returnera falskt; // kommandot misslyckades}

Steg 18:

Vid den andra booleska gjorde jag samma sak med att ändra några ord. Jag laddade upp den för att se om den fungerade.

/* En hjälpfunktion om din logik beror på ljusets nuvarande tillstånd. * Detta anger ett antal globala variabler som du kan kontrollera för att ta reda på om en lampa för närvarande är tänd eller inte * och nyansen etc. Behövs inte bara för att skicka ut kommandon */

bool getHue (int lightNum) {

WiFiClient -klient;

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

client.print ("GET /api /"); client.print (hueUsername); client.print ("/lights/"); client.print (lightNum); client.println ("3/state"); client.print ("Host:"); client.println (hueHubIP); client.println ("Innehållstyp: applikation/json"); client.println ("keep-alive"); client.println ();

medan (client.connected ()) {if (client.available ()) {client.findUntil ("\" on / ":", "\ 0"); hueOn = (client.readStringUntil (',') == "true"); // om lampan lyser, ställ in variabeln till true client.findUntil ("\" bri / ":", "\ 0"); hueBri = client.readStringUntil (',').toInt (); // ställ in variabel till ljusstyrka värde client.findUntil ("\" nyans / ":", "\ 0"); hueHue = client.readStringUntil (',').toInt (); // ställ in variabel till nyansvärdesbrytning; // inte fångar andra ljusattribut ännu}} client.stop (); återvända sant; // fångad på, bri, hue} annars returnera false; // fel vid läsning på, bri, nyans}

Steg 19:

Bild
Bild

Jag tror att jag skulle kunna ansluta till Philips Hue. Jag får information men den måste fortfarande användas.

Tyvärr går detta utöver vad jag kan koda. Om du vet svaret, eller om det finns riktiga fel som måste korrigeras, vill jag gärna höra det.:-)

Rekommenderad: