Inhoudsopgave:

IoT-schoolproject Philips Hue - Ajarnpa
IoT-schoolproject Philips Hue - Ajarnpa

Video: IoT-schoolproject Philips Hue - Ajarnpa

Video: IoT-schoolproject Philips Hue - Ajarnpa
Video: OLD VIDEO - Amazon Dash button with Philips Hue - !SUPER OLD VIDEO! 2024, Juli-
Anonim
IoT-schoolproject Philips Hue
IoT-schoolproject Philips Hue

Dit is een handleiding die ik voor school moest schrijven. Het is niet compleet en ik weet niet zeker of je het wel kunt gebruiken. Mijn kennis van API's is het absolute minimum. We wilden een interactieve spiegel maken met lampjes aan de achterkant die reageerden op het weer, licht van buiten, etc.

Ik heb gekeken hoe ik een Philips Hue lamp kon programmeren met een Arduino. Hierin leg ik al mijn stappen uit en hoe ver ik ben gekomen. Het is mij niet gelukt om de Hue te programmeren met de Arduino maar ik denk dat het een goed begin is.

Ik had dit nodig: een Arduino een hue-lamp een bridge Philips Hue-ontwikkelaarsaccount

Bronnen: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: Aan de slag

Voordat u toegang krijgt tot de API-documentatie, moet u zich registreren als ontwikkelaar. Het is gratis, maar u moet de algemene voorwaarden accepteren. Je kunt er hier een maken >

Stap 2: Hue-app

Download de officiële Philips Hue-app. Verbind je telefoon met het netwerk waarop je de Hue bridge wilt hebben.

Stap 3: Verbind de brug

Verbind je bridge met je netwerk en werkt naar behoren. Test of de smartphone-app de lampen op hetzelfde netwerk kan bedienen. Het moet op hetzelfde wifi-netwerk zijn.

Stap 4: IP-adres

Vervolgens moet u het IP-adres van de bridge op uw netwerk achterhalen. Druk op de link om verbinding te maken met de bridge in de app en probeer de verlichting te bedienen.

Stap 5:

Als het allemaal werkt, ga dan naar het instellingenmenu in de app. Ga dan naar “Mijn Bridge”, ga naar “Netwerkinstellingen”. Schakel de DHCP-toggle uit en je ziet het IP-adres van de bridge. Noteer het IP-adres en schakel vervolgens DHCP weer in.

Stap 6: Debug je tint

Debug je tint
Debug je tint

Als je dat hebt opgeschreven, moet je je Hue debuggen. Voor deze stap heeft u het IP-adres nodig. Je moet de volgende site bezoeken.

/debug/clip.html

De interface ziet er zo uit in de afbeelding. Dit is de basis van al het webverkeer en van de hue RESTful interface.

Ik kreeg deze informatie over de Restful-interface van de Philips Hue-site.

URL: dit is eigenlijk het lokale adres van een specifieke bron (ding) binnen het hue-systeem. Het kan licht zijn, een groep lichten of nog veel meer dingen. Dit is het object dat u binnen deze opdracht zult gebruiken.

Een body: dit is het deel van het bericht dat beschrijft wat je wilt veranderen en hoe. Hier voert u, in JSON-indeling, de resourcenaam en waarde in die u wilt wijzigen/toevoegen.

Een methode: hier heb je de keuze uit de 4 HTTP-methoden die de hue-aanroep kan gebruiken.

GET: dit is de opdracht om alle informatie over de geadresseerde bron op te halen

PUT: dit is de opdracht om een geadresseerde bron te wijzigen

POST: dit is de opdracht om een nieuwe bron aan te maken binnen de geadresseerde bron

VERWIJDEREN: dit is de opdracht om de geadresseerde bron te verwijderen. Reactie: In dit gebied ziet u de reactie op uw opdracht. Ook in JSON-formaat.

Stap 7: Laten we beginnen

Laten we beginnen
Laten we beginnen

Nu hebben we een willekeurig gegenereerde gebruikersnaam nodig die de bridge voor u maakt. Je krijgt er een door deze in te vullen.

Zet in de url:

/api/

Zet in het LICHAAM:

en druk op GET

Dit commando zegt in feite "maak een nieuwe bron aan in /api" (waar de gebruikersnamen staan) met de volgende eigenschappen. In eerste instantie krijg je een foutmelding, en dat komt omdat dit de beveiligingsstap van Philips Hue is. Door op de knop te drukken bewijzen ze dat je fysiek toegang hebt tot de brug.

Stap 8:

Afbeelding
Afbeelding

Druk nu op de knop op de Bridge en klik nogmaals op POST.

Nu krijg je een gebruikersnaam die de bridge voor je heeft gemaakt.

Stap 9: Laten we iets doen met de lichten

Laten we iets doen met de lichten
Laten we iets doen met de lichten

Kopieer uw gebruikersnaam en plaats deze in de volgende regel.

Zet dit in je URL

/api/ /lichten

Druk op GET

U zou een JSON-antwoord moeten krijgen met alle lampjes in uw systeem en hun namen.

Stap 10:

Afbeelding
Afbeelding

Ik heb wat Hue Lights geleend van school, degene die ik gebruik is degene met id 3. Ik wil specifieke informatie over deze lamp.

Zet dit naast de URL die je al had:

/api/ /lights/3

Druk op GET

Nu krijg je alle informatie over Led 3 (als je een ander nummer zoals 1 hebt, zie je informatie over dat nummer).

Stap 11: Laten we het licht regelen

Laten we het licht beheersen
Laten we het licht beheersen

Je ziet in "staat" dat mijn led "aan" is. We willen het licht in "staat" regelen.

Zet dit naast de URL die je al had:https:// /api/ /lights/ 3/ state

Zet de volgende regel in de BODY

Druk op PUT

Nu gaat je licht uit! Verander de waarde in het lichaam naar waar en het licht gaat weer aan.

Stap 12:

Nu alles werkt wil ik dit doen met mijn Arduino. Ik keek naar de link die Philips Hue gaf om de lichtkleur te laten veranderen. Maar daar heb je Python voor nodig, ik heb nooit met Python gewerkt dus zocht ik iets anders.

Als je deze code wilt bekijken, heb ik hier de Github-link:

github.com/bsalinas/ArduinoHue

Stap 13:

Ik heb gekeken hoe ik informatie van deze ontwikkelaarssite naar mijn arduino kon krijgen. Meestal verstond ik de taal niet. Maar ik vond wat code op een website van James Bruce.

Dit is de link naar de website.

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

Stap 14:

Eerst zag ik dat hij een Ethernet-kabel gebruikte. Ik had alleen een Hue Light-lamp en Bridge een Arduino, en weinig begrip van code. Het duurde even voordat ik zijn code begreep, maar ik begrijp het nog steeds niet echt.

Ik heb deze bibliotheek voor het eerst toegevoegd voor internet.

#erbij betrekken

Dit is voor je netwerk (het moet hetzelfde zijn als de Hue Light bulb)

const char* ssid = " "; // plaats hier uw WiFi-netwerk SSIDconst char* wachtwoord = " "; // plaats hier uw wifi-netwerkwachtwoord

Dit zijn de ID van uw Bridge en de gebruikersnaam die uw bridge u heeft gegeven. (Ik weet niet waar de 80 voor staat, maar toen ik wat onderzoek deed, zag ik dat het voor netwerken werd gebruikt).

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

// Tintvariabelen bool hueOn; // aan/uit int hueBri; // helderheidswaarde lange hueHue; // tintwaarde String hueCmd; // Hue-opdracht

niet-ondertekende lange buffer=0; //buffer voor ontvangen gegevensopslag unsigned long addr;

Stap 15:

Voor de lege setup heb ik het meeste gedaan voor de internetverbinding. In deze code zoekt de Arduino of hij verbinding kan maken met het netwerk.

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

Serieel.println();

Serial.printf("Verbinding maken met %s", ssid);

WiFi.begin(ssid, wachtwoord);

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

vertraging (500);

Serieel.print("."); }

Serial.println ("verbonden"); }

Stap 16:

In de loop van James zag ik dat hij een If and else-statement had. Maar dat was voor de ethernetkabel, dus ik heb geprobeerd dit weg te laten. Ik heb het ook wel eens geprobeerd aan te passen, maar met veel data wist ik het nog niet. Sommige dingen in de code heb ik wel begrepen, in de string staan de gegevens die aan het Hue-licht worden gegeven.

lege lus(){

// Een reeks van vier voorbeeldopdrachten, waarbij de kleur twee lichten tussen rood en roze vervaagt. Lees de Hue API //-documentatie voor meer details over de exacte commando's die moeten worden gebruikt, maar houd er rekening mee dat aanhalingstekens moeten worden ontsnapt.

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

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

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

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

}

Stap 17:

De volgende code was een Boolean, maar in Arduino moet je Bool schrijven. In het begin kreeg ik veel fouten vanwege het woord client. Dus ik zocht het op en zag dat sommige code de regel "WifiClient-client;" gebruikte. Dus ik gebruikte het en het werkte.

In het if-statement zie je vaak client.print staan. Als je in de code kijkt, zie je dat de URL die je eerder hebt ingevoerd in stukjes is opgedeeld. Voer nu uw eigen code in. Ik moest mijn 3e LED-lamp kiezen.

/* setHue() is onze belangrijkste opdrachtfunctie, waaraan een licht getal en een * correct opgemaakte opdrachtreeks in JSON-indeling moet worden doorgegeven (in feite een array van variabelen in Javascript-stijl * en waarden). Vervolgens wordt een eenvoudig HTTP PUT-verzoek gedaan aan de Bridge op het IP opgegeven aan het begin. */

bool setHue(int lightNum, String-opdracht) {

WiFiClient-client;

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

while (client.verbonden()){

client.print("PUT /api/"); client.print(hueGebruikersnaam); client.print("/lights/"); client.print(lightNum); // hueLight op nul gebaseerd, voeg 1 client.println toe ("3/state"); // hier heb ik de tintnaam en stateclient.print ("Host: "); cliënt.println(hueHubIP); client.print ("Inhoudslengte: "); cliënt.println(opdracht.lengte()); client.println("Content-Type: text/plain;charset=UTF-8"); klant.println(); // lege regel voor body client.println (opdracht); // Hue-opdracht

} klant.stop(); retourneer waar; // opdracht uitgevoerd }

anders vals retourneren; // opdracht mislukt}

Stap 18:

Bij de tweede Boolean deed ik hetzelfde met het veranderen van enkele woorden. Ik heb het geüpload om te kijken of het werkte.

/* Een hulpfunctie voor het geval uw logica afhangt van de huidige staat van het licht. * Dit stelt een aantal globale variabelen in die u kunt controleren om erachter te komen of een lamp momenteel aan is of niet * en de tint enz. Niet alleen nodig om commando's te verzenden */

bool getHue(int lightNum) {

WiFiClient-client;

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

client.print("GET /api/"); client.print(hueGebruikersnaam); client.print("/lights/"); cliënt.print(lightNum); cliënt.println("3/staat"); client.print("Host: "); cliënt.println(hueHubIP); client.println ("Inhoudstype: applicatie/json"); client.println ("keep-alive"); klant.println();

while (client.connected()) { if (client.available()) { client.findUntil("\"on\":", "\0"); hueOn = (client.readStringUntil(', ') == "true"); // als het lampje brandt, stel variabele in op true client.findUntil("\"bri\":", "\0"); hueBri = client.readStringUntil(', ').toInt(); // stel variabele in op helderheidswaarde client.findUntil("\"hue\":", "\0"); hueHue = client.readStringUntil(', ').toInt(); // stel variabele in op tintwaarde-onderbreking; // nog geen andere lichtattributen vastgelegd } } client.stop(); retourneer waar; // vastgelegd op, bri, hue } else return false; // foutlezing op, bri, hue}

Stap 19:

Afbeelding
Afbeelding

Ik denk dat ik een connectie zou kunnen maken met de Philips Hue. Ik ontvang informatie, maar deze moet nog worden gebruikt.

Helaas gaat dit verder dan wat ik kan coderen. Als je het antwoord weet, of als er echte fouten zijn die gecorrigeerd moeten worden, hoor ik het graag.:-)

Aanbevolen: