IoT School Project Philips երանգ. 19 քայլ
IoT School Project Philips երանգ. 19 քայլ
Anonim
IoT դպրոցական նախագիծ Philips Hue
IoT դպրոցական նախագիծ Philips Hue

Սա ձեռնարկ է, որը ես պետք է գրեի դպրոցի համար: Այն ամբողջական չէ և վստահ չեմ, որ կարող եք նույնիսկ օգտագործել այն: API- ի իմ իմացությունը նվազագույնն է: Մենք ցանկանում էինք ինտերակտիվ հայելի պատրաստել, որի մեջքին լուսարձակներ արձագանքում էին եղանակին, լույսը դրսից և այլն:

Ես նայեցի, թե ինչպես կարող եմ ծրագրավորել Philips Hue լամպը Arduino- ով: Սրանում ես բացատրում եմ իմ բոլոր քայլերը և որքան հեռու եմ հասել: Ինձ չի հաջողվել ծրագրավորել Hue- ն Arduino- ով, բայց կարծում եմ, որ դա լավ սկիզբ է:

Ինձ պետք էր սա. Arduino a hue լամպ կամուրջ Philips Hue ծրագրավորողի հաշիվ

Աղբյուրներ ՝ https://www.developers.meethue.com/documentation/g…https://github.com/bsalinas/ArduinoHuehttps://arduino-esp8266.readthedocs.io/hy/latest/e…https:// www.makeuseof.com/tag/control-philips-hue-…

Քայլ 1: Սկսեք

Նախքան API փաստաթղթերին մուտք գործելը, ձեզ հարկավոր է գրանցվել որպես մշակող: Անվճար է, բայց դուք պետք է ընդունեք պայմաններն ու պայմանները: Կարող եք պատրաստել այստեղ>

Քայլ 2: Hue հավելված

Ներբեռնեք պաշտոնական Philips Hue ծրագիրը: Միացրեք ձեր հեռախոսը այն ցանցին, որտեղ ցանկանում եք, որ միացված է Hue կամուրջը:

Քայլ 3: Միացրեք կամուրջը

Միացրեք ձեր կամուրջը ձեր ցանցի հետ և գործում է ճիշտ: Ստուգեք, որ սմարթֆոնների հավելվածը կարող է վերահսկել նույն ցանցի լույսերը: Այն պետք է լինի նույն Wi-Fi ցանցի վրա:

Քայլ 4: IP հասցե

Այնուհետեւ դուք պետք է բացահայտեք ձեր ցանցի կամրջի IP հասցեն: Ushրագրում կամրջին միանալու համար փորձեք հղումը և փորձեք վերահսկել լույսերը:

Քայլ 5:

Եթե ամեն ինչ աշխատում է, ապա գնացեք հավելվածի կարգավորումների ընտրացանկ: Գնացեք «Իմ կամուրջ», անցեք «Networkանցի կարգավորումներ»: Անջատեք DHCP անջատիչը և կտեսնեք կամրջի IP հասցեն: Նշեք IP հասցեն, ապա նորից միացրեք DHCP- ն:

Քայլ 6: Կարգավորեք ձեր երանգը

Վրիպազերծեք ձեր երանգը
Վրիպազերծեք ձեր երանգը

Երբ դա գրեցիր, պետք է կարգաբերել քո Երանգը: Այս քայլի համար ձեզ անհրաժեշտ է IP- հասցեն: Դուք պետք է այցելեք հաջորդ կայքը:

/debug/clip.html

Պատկերում ինտերֆեյսը այսպիսի տեսք կունենա: Սա ամբողջ վեբ տրաֆիկի և RESTful երանգի հիմքն է:

Այս տեղեկատվությունը ես ստացել եմ Philips Hue կայքի Restful ինտերֆեյսի մասին:

URL: սա իրականում երանգային համակարգի ներսում որոշակի ռեսուրսի (իրի) տեղական հասցեն է: Դա կարող է լինել լույս, լույսերի խումբ կամ շատ այլ բաներ: Սա այն օբյեկտն է, որի հետ դուք կշփվեք այս հրամանի շրջանակներում:

Մարմին. Սա հաղորդագրության այն հատվածն է, որը նկարագրում է, թե ինչ եք ուզում փոխել և ինչպես: Այստեղ մուտքագրում եք JSON ձևաչափով ռեսուրսի անունը և արժեքը, որը ցանկանում եք փոխել/ավելացնել:

Մեթոդ. Այստեղ դուք ունեք HTTP 4 մեթոդների ընտրություն, որոնք կարող են օգտագործել երանգի զանգը:

GET. Սա հրաման է հասցեագրված ռեսուրսի մասին ամբողջ տեղեկատվությունը վերցնելու համար

PUT. Սա հասցեագրված ռեսուրսը փոփոխելու հրաման է

ՓՈՍՏ. Սա հասցեագրված ռեսուրսի ներսում նոր ռեսուրս ստեղծելու հրաման է

LEԱՆTE. Սա հասցեագրված ռեսուրսի ջնջման հրահանգն է: Պատասխան. Այս ոլորտում դուք կտեսնեք ձեր հրամանի պատասխանը: Նաև JSON ձևաչափով:

Քայլ 7: Եկեք սկսենք

Եկեք սկսենք
Եկեք սկսենք

Այժմ մեզ պետք է պատահականորեն ստեղծված օգտանուն, որը կամուրջը ստեղծում է ձեզ համար: Դուք կստանաք մեկը ՝ լրացնելով սա:

Տեղադրեք URL- ը ՝

/api/

Մարմնի մեջ դնել.

և սեղմել GET

Այս հրամանը հիմնականում ասում է «խնդրում ենք ստեղծել նոր ռեսուրս ներսում /api» (որտեղ օգտվողների անունները նստած են) հետևյալ հատկություններով: Սկզբում դուք սխալ կստանաք, և դա այն պատճառով, որ դա Philips Hue- ի անվտանգության քայլն է: Կոճակը սեղմելով ՝ նրանք ապացուցում են, որ ֆիզիկական մուտք ունեք կամուրջ:

Քայլ 8:

Պատկեր
Պատկեր

Այժմ սեղմեք կամրջի կոճակը և կրկին կտտացրեք POST- ին:

Այժմ դուք կստանաք օգտվողի անուն, որը կամուրջը պատրաստել է ձեզ համար:

Քայլ 9: Եկեք ինչ -որ բան անենք լույսերի հետ

Եկեք ինչ -որ բան անենք լույսերի հետ
Եկեք ինչ -որ բան անենք լույսերի հետ

Պատճենեք ձեր օգտվողի անունը և դրեք այն հետևյալ տողում:

Տեղադրեք սա ձեր URL- ում

/api//լույսեր

Կտտացրեք GET

Դուք պետք է ստանաք JSON պատասխան ձեր համակարգի բոլոր լույսերով և դրանց անուններով:

Քայլ 10:

Պատկեր
Պատկեր

Ես որոշ փոխառություններ եմ վերցրել դպրոցից, այն, ինչ ես օգտագործում եմ, նույնն է ՝ 3 -ով: Ես ցանկանում եմ այս լույսի մասին կոնկրետ տեղեկատվություն:

Տեղադրեք սա արդեն ունեցած URL- ի կողքին.

/api//լույսեր/3

Կտտացրեք GET

Այժմ դուք ստանում եք Led 3 -ի մասին տեղեկությունները (եթե ունեք 1 -ի նման մեկ այլ թիվ, ապա կտեսնեք տվյալ մեկի մասին տեղեկատվություն):

Քայլ 11: Եկեք վերահսկենք լույսը

Եկեք վերահսկենք լույսը
Եկեք վերահսկենք լույսը

Դուք «նահանգում» տեսնում եք, որ իմ led- ը «միացված» է: Մենք ցանկանում ենք վերահսկել լույսը «վիճակում»:

Տեղադրեք սա այն URL- ի կողքին, որն արդեն ունեիք ՝ https:/// api// lights/ 3/ state

Հաջորդ տողը դրեք ՄԱՐՄԻՆ

Սեղմեք PUT

Այժմ ձեր լույսը կանհետանա: Մարմնի արժեքը փոխեք ճշմարիտի և լույսը նորից կվերածվի:

Քայլ 12:

Այժմ ամեն ինչ աշխատում է: Ես ուզում եմ դա անել իմ Arduino- ի հետ: Ես նայեցի այն հղմանը, որը տվել էր Philips Hue- ը `բաց գույնը փոխելու համար: Բայց դրա համար ձեզ հարկավոր է Python, ես երբեք չեմ աշխատել Python- ի հետ, ուստի ուրիշ բան եմ փնտրել:

Եթե ցանկանում եք նայել այս ծածկագրին, ես այստեղ Github- ի հղումն ունեմ.

github.com/bsalinas/ArduinoHue

Քայլ 13:

Ես նայեցի, թե ինչպես կարող եմ տեղեկատվություն ստանալ այս մշակողի կայքից իմ arduino- ին: Շատ ժամանակ ես լեզուն չէի հասկանում: Բայց ես որոշ կոդեր գտա Jamesեյմս Բրյուսի կայքում:

Սա կայքի հղումն է:

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

Քայլ 14:

Նախ տեսա, որ նա օգտագործում է Ethernet մալուխ: Ես ունեի միայն Hue Light էլեկտրական լամպ և Bridge a Arduino, և կոդի քիչ ըմբռնում: Որոշ ժամանակ պահանջվեց, որ ես հասկանայի նրա ծածկագիրը, բայց ես դեռ այն իսկապես չեմ հասկանում:

Ես առաջին անգամ ավելացրի այս գրադարանը ինտերնետի համար:

#ներառում

Սա ձեր ցանցի համար է (այն պետք է լինի նույնը, ինչ Hue լամպը)

const char* ssid = ""; // տեղադրել այստեղ ձեր WiFi ցանցի SSIDconst char* password = ""; // տեղադրեք այստեղ ձեր WiFi ցանցի գաղտնաբառը

Սրանք են ձեր կամրջի ID- ն և օգտվողի անունը, որը ձեզ տվել է ձեր կամուրջը: (Չգիտեմ, թե որտեղ է 80 -ը, բայց երբ որոշ հետազոտություններ կատարեցի, տեսա, որ այն օգտագործվում է ցանցերի համար):

// Երանգ հաստատունները const char hueHubIP = ""; // Hue hub IP const char hueUsername = ""; // Hue օգտվողի անունը const int hueHubPort = 80;

// Hue փոփոխականներ bool hueOn; // միացնել/անջատել int hueBri; // պայծառության արժեքը long hueHue; // երանգի արժեք String hueCmd; // Hue հրաման

անստորագիր երկար բուֆեր = 0; // բուֆեր ստացված տվյալների պահպանման համար unsigned long addr;

Քայլ 15:

Անվավեր կարգավորման համար ես ամենից շատն արել եմ ինտերնետ կապի համար: Այս ծածկագրում Arduino- ն փնտրում է, արդյոք կարող է միանալ ցանցին:

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

Serial.println ();

Serial.printf ("Միացում %s- ին", ssid);

WiFi.begin (ssid, գաղտնաբառ);

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

ուշացում (500);

Serial.print ("."); }

Serial.println («կապված»); }

Քայլ 16:

Jamesեյմսի օղակում ես տեսա, որ նա ուներ և այլ հայտարարություն: Բայց դա վերաբերում էր ethernet մալուխին, ուստի ես փորձեցի դա բաց թողնել: Ես նույնպես երբեմն փորձում էի հարմարեցնել այն, բայց դեռ չգիտեի շատ տվյալների հետ: Որոշ բաներ, որոնք ես հասկացա ծածկագրում, տողում այն տվյալներն են, որոնք տրվում են Hue լույսի ներքո:

դատարկ շրջան () {

// Չորս օրինակելի հրամանների շարք, որոնց գույնը մարում է երկու լույս կարմիրի և վարդագույնի միջև: Կարդացեք Hue API // փաստաթղթերը `օգտագործվող ճշգրիտ հրամանների վերաբերյալ ավելի մանրամասն տեղեկությունների համար, սակայն նշեք, որ գնանշման նշաններից պետք է խուսափել:

String command = "{" on / ": true, \" hue / ": 50100, \" sat / ": 255, \" bri / ": 255, \" transfertime / ":"+String (պատահական (15, 25))+"}"; setHue (1, հրաման);

command = "{" on / ": true, \" hue / ": 65280, \" sat / ": 255, \" bri / ": 255, \" tranzitime / ":"+String (պատահական (15, 25))+"}"; setHue (2, հրաման);

հրաման = "{" երանգ / ": 65280, \" նստել / ": 255, \" bri / ": 255, \" անցման ժամանակ / ":"+Լար (պատահական (15, 25))+"}"; setHue (1, հրաման);

հրաման = "{" երանգ / ": 50100, \" նստել / ": 255, \" bri / ": 255, \" անցման ժամանակ / ":"+Լար (պատահական (15, 25))+"}"; setHue (2, հրաման);

}

Քայլ 17:

Հաջորդ ծածկագիրը բուլյան էր, բայց Արդուինոյում պետք է գրել Bool: Սկզբում ես շատ սխալներ ստացա հաճախորդ բառի պատճառով: Այսպիսով, ես նայեցի այն և տեսա, որ ինչ -որ ծածկագիր օգտագործում է «WifiClient client;» տողը: Այսպիսով, ես դա օգտագործում էի և աշխատում էր:

If հայտարարության մեջ դուք հաճախ տեսնում եք client.print: Եթե նայեք ծածկագրին, կտեսնեք, որ ավելի վաղ մուտքագրած URL- ը բաժանված է կտորների: Այժմ մուտքագրեք ձեր սեփական կոդը: Ես ստիպված էի ընտրել իմ 3 -րդ LED լույսը:

/ * setHue () - ը մեր հիմնական հրամանատարական գործառույթն է, որին անհրաժեշտ է փոխանցել թեթև թիվ և * ճիշտ ձևաչափված հրամանի տող JSON ձևաչափով (հիմնականում ՝ փոփոխականների * և արժեքների Javascript ոճի զանգված): Այնուհետև կատարում է HTTP PUT- ի պարզ պահանջ կամուրջը սկզբում նշված IP- ով: */

bool setHue (int lightNum, լարային հրաման) {

WiFiClient հաճախորդ;

եթե (client.connect (hueHubIP, hueHubPort)) {

while (client.connected ()) {

client.print ("PUT /api /"); client.print (hueUsername); client.print ("/լույսերը/"); client.print (lightNum); // hueLight զրոյական հիմքով, ավելացնել 1 client.println («3/վիճակ»); // այստեղ ես փոխեցի երանգի անունը և stateclient.print («Հաղորդավար ՝»); client.println (hueHubIP); client.print ("Բովանդակություն-երկարություն."); client.println (command.length ()); client.println ("Բովանդակության տեսակը. տեքստ/պարզ; charset = UTF-8"); client.println (); // դատարկ տող body client.println (հրաման); // Hue հրաման

} client.stop (); վերադարձնել ճշմարիտ; // հրամանը կատարված է}

այլապես վերադարձնել կեղծ; // հրամանը ձախողվեց}

Քայլ 18:

Երկրորդ բուլյան ժամանակ ես նույնը արեցի որոշ բառեր փոխելով: Ես այն վերբեռնել եմ, որպեսզի տեսնեմ ՝ աշխատում է:

/* Օգնական գործառույթ այն դեպքում, երբ ձեր տրամաբանությունը կախված է լույսի ներկա վիճակից: * Սա սահմանում է մի շարք գլոբալ փոփոխականներ, որոնք կարող եք ստուգել ՝ պարզելու համար, թե արդյոք լույսը ներկայումս վառված է, թե ոչ * և երանգը և այլն: Անհրաժեշտ չէ պարզապես հրամաններ ուղարկելու համար */

bool getHue (int lightNum) {

WiFiClient հաճախորդ;

եթե (client.connect (hueHubIP, hueHubPort)) {

client.print («GET /api /»); client.print (hueUsername); client.print ("/լույսեր/"); client.print (lightNum); client.println ("3/վիճակ"); client.print ("Հաղորդավար` "); client.println (hueHubIP); client.println («Բովանդակության տեսակը ՝ դիմում/json»); client.println («ողջ մնա»); client.println ();

while (client.connected ()) {if (client.available ()) {client.findUntil ("\" on / ":", "\ 0"); hueOn = (client.readStringUntil (',') == "ճշմարիտ"); // եթե լույսը միացված է, փոփոխականը սահմանեք ճշմարիտ client.findUntil ("\" bri / ":", "\ 0"); hueBri = client.readStringUntil (',').toInt (); // փոփոխականը սահմանել պայծառության արժեքի client.findUntil ("\" երանգ / ":", "\ 0"); hueHue = client.readStringUntil (',').toInt (); // փոփոխականը սահմանել hue արժեքի ընդմիջման համար; // այլ լուսավոր հատկանիշներ դեռ չգրավելը}} client.stop (); վերադարձնել ճշմարիտ; // գրավված է, bri, hue} else return false; // սխալ կարդալիս, bri, hue}

Քայլ 19:

Պատկեր
Պատկեր

Կարծում եմ, որ կարող էի կապ հաստատել Philips Hue- ի հետ: Ես ստանում եմ տեղեկատվություն, բայց այն դեռ պետք է օգտագործվի:

Unfortunatelyավոք, սա դուրս է գալիս այն բանից, ինչ ես կարող եմ կոդավորել: Եթե դուք գիտեք պատասխանը, կամ եթե կան իրական սխալներ, որոնք շտկման կարիք ունեն, ես շատ կցանկանայի լսել այն::-)

Խորհուրդ ենք տալիս: