INHOUDSOPGAWE:

IoT -skoolprojek Philips Hue: 19 stappe
IoT -skoolprojek Philips Hue: 19 stappe

Video: IoT -skoolprojek Philips Hue: 19 stappe

Video: IoT -skoolprojek Philips Hue: 19 stappe
Video: Denmark official faints during Covid-19 conference 2024, November
Anonim
IoT -skoolprojek Philips Hue
IoT -skoolprojek Philips Hue

Dit is 'n handleiding wat ek vir die skool moes skryf. Dit is nie volledig nie en ek is nie seker of u dit selfs kan gebruik nie. My kennis van API's is die absolute minimum. Ons wou 'n interaktiewe spieël maak met ligte aan die agterkant wat reageer op die weer, lig van buite, ens.

Ek kyk hoe ek 'n Philips Hue -lamp met 'n Arduino kan programmeer. Hierin verduidelik ek al my stappe en hoe ver ek gekom het. Ek het nie daarin geslaag om die Hue met die Arduino te programmeer nie, maar ek dink dit is 'n goeie begin.

Ek het dit nodig gehad: 'n Arduino, 'n tintlamp, 'n Philips Hue -ontwikkelaarrekening

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

Stap 1: Begin

Voordat u toegang tot die API -dokumentasie het, moet u as ontwikkelaar registreer. Dit is gratis, maar u moet die bepalings en voorwaardes aanvaar. U kan hier een maak>

Stap 2: Hue -app

Laai die amptelike Philips Hue -app af. Koppel u telefoon aan die netwerk waarop u wil hê dat die Hue -brug is.

Stap 3: Verbind die brug

Koppel u brug aan u netwerk en werk behoorlik. Toets dat die slimfoon -app die ligte op dieselfde netwerk kan beheer. Dit moet op dieselfde Wi-Fi-netwerk wees.

Stap 4: IP -adres

Dan moet u die IP -adres van die brug op u netwerk ontdek. Druk die skakel om aan te sluit op die brug in die app en probeer die ligte beheer.

Stap 5:

As dit alles werk, gaan dan na die instellingsmenu in die app. Gaan dan na "My Bridge", na "Netwerkinstellings". Skakel die DHCP -skakelaar uit en u sien die IP -adres van die brug. Let op die IP -adres en skakel DHCP weer aan.

Stap 6: Ontfout u kleur

Ontfout u kleur
Ontfout u kleur

As u dit neerskryf, moet u u Hue ontfout. U benodig die IP-adres vir hierdie stap. U moet die volgende webwerf besoek.

/debug/clip.html

Die koppelvlak sal so in die prentjie lyk. Dit is die basis van alle webverkeer en van die tint RESTful -koppelvlak.

Ek het hierdie inligting gekry oor die rustige koppelvlak van die Philips Hue -webwerf.

URL: dit is eintlik die plaaslike adres van 'n spesifieke bron (ding) in die kleurstelsel. Dit kan lig, 'n groep ligte of vele meer dinge wees. Dit is die voorwerp waarmee u binne hierdie opdrag sal reageer.

'N Liggaam: dit is die deel van die boodskap wat beskryf wat u wil verander en hoe. Hier voer u die bronnaam en waarde in JSON -formaat in wat u wil verander/byvoeg.

'N Metode: hier kan u die 4 HTTP -metodes kies wat die tintoproep kan gebruik.

KRY: dit is die opdrag om alle inligting oor die aangespreekde hulpbron te gaan haal

PUT: dit is die opdrag om 'n aangespreekde bron te verander

POST: dit is die opdrag om 'n nuwe hulpbron binne die aangepaste hulpbron te skep

SKrap: dit is die opdrag om die aangespreekte hulpbron te verwyder Antwoord: In hierdie gebied sien u die antwoord op u opdrag. Ook in JSON -formaat.

Stap 7: Kom ons begin

Laat ons begin
Laat ons begin

Nou benodig ons 'n lukraak gegenereerde gebruikersnaam wat die brug vir u skep. U kry een deur dit in te vul.

Sit die URL in:

/api/

Sit die LIGGAAM in:

en druk GET

Hierdie opdrag sê basies "skep asseblief 'n nuwe bron binne /api" (waar gebruikersname sit) met die volgende eienskappe. U sal eers 'n fout kry, en dit is omdat dit die veiligheidsstap van Philips Hue is. Deur op die knoppie te druk, bewys hulle dat u fisiese toegang tot die brug het.

Stap 8:

Beeld
Beeld

Druk nou op die knoppie op die brug en klik weer op POST.

Nou kry u 'n gebruikersnaam wat die brug vir u gemaak het.

Stap 9: Kom ons doen iets met die ligte

Kom ons doen iets met die ligte
Kom ons doen iets met die ligte

Kopieer u gebruikersnaam en plaas dit in die volgende reël.

Plaas dit in u URL

/api//lights

Druk GET

U moet 'n JSON -antwoord kry met al die ligte in u stelsel en die name daarvan.

Stap 10:

Beeld
Beeld

Ek het 'n paar Hue Lights by die skool geleen, die een wat ek gebruik, is die een met id 3. Ek wil spesifieke inligting oor hierdie lig hê.

Sit dit langs die URL wat u reeds gehad het:

/api//lights/3

Druk GET

Nou kry u al die inligting oor Led 3 (as u 'n ander nommer soos 1 het, sien u inligting daaroor).

Stap 11: Kom ons beheer die lig

Kom ons beheer die lig
Kom ons beheer die lig

U sien in 'staat' dat my led 'aan' is. Ons wil die lig in 'toestand' beheer.

Plaas dit langs die URL wat u reeds gehad het: https:/// api// lights/ 3/ state

Plaas die volgende reël in die LIGGAAM

Druk PUT

Nou gaan jou lig af! Verander die waarde in die liggaam na waar en die lig sal weer aanskakel.

Stap 12:

Nou werk alles, ek wil dit met my Arduino doen. Ek kyk na die skakel wat Philips Hue gegee het om die ligte kleur te verander. Maar u het Python hiervoor nodig; ek het nooit met Python gewerk nie, so ek het iets anders gesoek.

As u na hierdie kode wil kyk, het ek die Github -skakel hier:

github.com/bsalinas/ArduinoHue

Stap 13:

Ek het gekyk hoe ek inligting van hierdie ontwikkelaarswebwerf na my arduino kan kry. Meestal het ek nie die taal verstaan nie. Maar ek het 'n kode gevind op 'n webwerf van James Bruce.

Dit is die skakel na die webwerf.

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

Stap 14:

Eers het ek gesien dat hy 'n Ethernet -kabel gebruik. Ek het net 'n Hue -gloeilamp en Bridge 'n Arduino gehad, en ek het min begrip vir kode. Dit het 'n rukkie geneem voordat ek sy kode verstaan het, maar ek verstaan dit steeds nie regtig nie.

Ek het eers hierdie biblioteek vir die internet bygevoeg.

#insluit

Dit is vir u netwerk (dit moet dieselfde wees as die Hue -gloeilamp)

const char* ssid = ""; // plaas hier u WiFi -netwerk SSIDconst char* password = ""; // plaas u WiFi -netwerkwagwoord hier

Dit is die ID van u brug en die gebruikersnaam wat u aan u gegee het. (Ek weet nie waar die 80 voor staan nie, maar toe ek navorsing doen, het ek gesien dat dit vir netwerke gebruik is).

// Hue -konstantes const char hueHubIP = ""; // Hue hub IP const char hueUsername = ""; // Hue gebruikersnaam const int hueHubPort = 80;

// Hue -veranderlikes bool hueOn; // aan/af int hueBri; // helderheid waarde long hueHue; // kleurwaarde String hueCmd; // Hue -opdrag

ongetekende lang buffer = 0; // buffer vir ontvangde data stoor ongetekende lang addr;

Stap 15:

Vir die leemte -opstelling het ek die meeste gedoen vir die internetverbinding. In hierdie kode kyk die Arduino of hy met die netwerk kan skakel.

ongeldige opstelling () {Serial.begin (9600);

Serial.println ();

Serial.printf ("Koppel aan %s", ssid);

WiFi.begin (ssid, wagwoord);

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

vertraging (500);

Serial.print ("."); }

Serial.println ("verbind"); }

Stap 16:

In die loop van James sien ek dat hy 'n If and else -verklaring het. Maar dit was vir die ethernetkabel, so ek het probeer om dit uit te laat. Ek het dit soms ook probeer aanpas, maar ek het nog nie geweet met baie data nie. Sommige dinge in die kode wat ek wel verstaan het, in die string is die data wat aan die Hue -lig gegee word.

leemte -lus () {

// 'n Reeks van vier voorbeeldopdragte, waarin die kleur twee ligte tussen rooi en pienk vervaag. Lees meer oor die Hue API // -dokumentasie vir meer inligting oor die presiese opdragte wat u moet gebruik, maar let op dat aanhalingstekens ontsnap moet word.

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

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

command = "{" hue / ": 65280, \" sat / ": 255, \" bri / ": 255, \" oorgangstyd / ":"+String (random (15, 25))+"}"; setHue (1, opdrag);

command = "{" hue / ": 50100, \" sat / ": 255, \" bri / ": 255, \" oorgangstyd ":"+String (random (15, 25))+"}"; setHue (2, opdrag);

}

Stap 17:

Die volgende kode was 'n Boole, maar in Arduino moet u Bool skryf. Ek het aanvanklik baie foute gekry as gevolg van die woord kliënt. Daarom het ek dit opgesoek en gesien dat 'n kode die lyn "WifiClient -kliënt;" gebruik. So ek het dit gebruik en dit het gewerk.

In die if -verklaring sien u gereeld client.print. As u na die kode kyk, sal u sien dat die URL wat u vroeër ingevoer het, in stukke verdeel is. Voer nou u eie kode in. Ek moes my derde LED -lig kies.

/ * setHue () is ons belangrikste opdragfunksie, wat 'n ligte nommer en 'n * behoorlik geformateerde opdragstring in JSON -formaat moet deurgee (basies 'n Javascript -styl verskeidenheid veranderlikes * en waardes). 'n Eenvoudige HTTP PUT -versoek moet die brug by die IP wat aan die begin gespesifiseer is. */

bool setHue (int lightNum, String -opdrag) {

WiFiClient -kliënt;

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

terwyl (client.connected ()) {

client.print ("PUT /api /"); client.print (hueUsername); client.print ("/lights/"); client.print (lightNum); // gebaseer op hueLight, voeg 1 client.println ("3/state") by; // hier het ek die kleurnaam en stateclient.print ("Host:") verander; client.println (hueHubIP); client.print ("Inhoudlengte:"); client.println (command.length ()); client.println ("Inhoudstipe: teks/plain; charset = UTF-8"); client.println (); // leë reël voor body client.println (command); // Hue -opdrag

} client.stop (); terugkeer waar; // opdrag uitgevoer}

anders terugkeer vals; // opdrag misluk}

Stap 18:

By die tweede Boolean het ek dieselfde gedoen deur 'n paar woorde te verander. Ek het dit opgelaai om te sien of dit werk.

/* 'N Helperfunksie as u logika afhang van die huidige toestand van die lig. * Dit stel 'n aantal globale veranderlikes in wat u kan kontroleer om uit te vind of 'n lamp tans brand of nie * en die tint, ens. Nie nodig om opdragte uit te stuur */

bool getHue (int lightNum) {

WiFiClient -kliënt;

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

client.print ("GET /api /"); client.print (hueUsername); client.print ("/lights/"); client.print (lightNum); client.println ("3/staat"); client.print ("Host:"); client.println (hueHubIP); client.println ("Inhoudstipe: toepassing/json"); client.println ("hou lewendig"); client.println ();

terwyl (client.connected ()) {if (client.available ()) {client.findUntil ("\" op / ":", "\ 0"); hueOn = (client.readStringUntil (',') == "waar"); // as die lig aan is, stel die veranderlike in op true client.findUntil ("\" bri / ":", "\ 0"); hueBri = client.readStringUntil (',').toInt (); // stel veranderlike in op helderheidswaarde client.findUntil ("\" hue / ":", "\ 0"); hueHue = client.readStringUntil (',').toInt (); // stel veranderlike in op die waardeverskil; // neem nog nie ander ligkenmerke vas nie}} client.stop (); terugkeer waar; // vasgelê op, bri, hue} anders terugkeer vals; // fout by lees op, bri, hue}

Stap 19:

Beeld
Beeld

Ek dink ek kon 'n verbinding maak met die Philips Hue. Ek ontvang inligting, maar dit moet nog steeds gebruik word.

Ongelukkig gaan dit verder as wat ek kan kodeer. As u die antwoord ken, of as daar werklike foute is wat reggestel moet word, hoor ek dit graag.:-)

Aanbeveel: