תוכן עניינים:

פרויקט בית הספר IoT Philips Hue: 19 שלבים
פרויקט בית הספר IoT Philips Hue: 19 שלבים

וִידֵאוֹ: פרויקט בית הספר IoT Philips Hue: 19 שלבים

וִידֵאוֹ: פרויקט בית הספר IoT Philips Hue: 19 שלבים
וִידֵאוֹ: ספיידרמן של מארוול: מיילס מוראלס (הסרט) 2024, יולי
Anonim
פרויקט בית הספר IoT Philips Hue
פרויקט בית הספר IoT Philips Hue

זהו מדריך שהייתי צריך לכתוב לבית הספר. זה לא שלם ואני לא בטוח אם אתה יכול אפילו להשתמש בו. הידע שלי על API הוא המינימום. רצינו ליצור מראה אינטראקטיבית עם אורות מאחור המגיבים למזג האוויר, אור מבחוץ וכו '.

הסתכלתי כיצד אוכל לתכנת מנורת Philips Hue עם ארדואינו. בכך אני מסביר את כל צעדי ועד כמה רחוק הגעתי. לא הצלחתי לתכנת את הגוון עם הארדואינו אבל אני חושב שזו התחלה טובה.

הייתי צריך את זה: מנורת Arduino, גוון, חשבון מפתח של Philips Hue

מקורות: 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: התחל

לפני שתוכל לגשת לתיעוד ה- API, יהיה עליך להירשם כמפתח. זה בחינם, אך עליך לקבל את התנאים וההגבלות. אתה יכול להכין אחד כאן>

שלב 2: אפליקציית הגוון

הורד את אפליקציית Philips Hue הרשמית. חבר את הטלפון שלך לרשת שבה אתה רוצה שגשר הגוון יהיה.

שלב 3: חבר את הגשר

חבר את הגשר שלך לרשת שלך ומתפקד כראוי. בדוק שאפליקציית הסמארטפון יכולה לשלוט באורות באותה רשת. זה חייב להיות באותה רשת Wi-Fi.

שלב 4: כתובת IP

לאחר מכן עליך לגלות את כתובת ה- IP של הגשר ברשת שלך. לחץ על הקישור כדי להתחבר לגשר באפליקציה ונסה לשלוט באורות.

שלב 5:

אם הכל עובד, עבור לתפריט ההגדרות באפליקציה. עבור אל "הגשר שלי", עבור אל "הגדרות רשת". כבה את מתג DHCP ותראה את כתובת ה- IP של הגשר. שים לב לכתובת ה- IP ולאחר מכן הפעל שוב את DHCP.

שלב 6: איתור באגים בגוון שלך

איתור באגים בגוון שלך
איתור באגים בגוון שלך

כשכתבת את זה אתה צריך לאתר באגים בגוון שלך. אתה צריך את כתובת ה- IP לשלב זה. עליך לבקר באתר הבא.

/debug/clip.html

הממשק ייראה כך בתמונה. זהו הבסיס לכל תעבורת האינטרנט וממשק הגוון RESTful.

קיבלתי מידע זה אודות הממשק הרפוי של אתר Philips Hue.

כתובת URL: זוהי למעשה הכתובת המקומית של משאב (דבר) ספציפי בתוך מערכת הגוון. זה יכול להיות אור, קבוצת אורות או דברים רבים נוספים. זהו האובייקט שבו תתבצע אינטראקציה בתוך פקודה זו.

גוף: זהו החלק של המסר המתאר את מה שאתה רוצה לשנות וכיצד. כאן אתה מזין, בפורמט JSON, את שם המשאב והערך שברצונך לשנות/להוסיף.

שיטה: כאן יש לך אפשרות לבחור בין 4 שיטות HTTP שבהן ניתן להשתמש בשיחת הגוון.

GET: זוהי הפקודה לאחזר את כל המידע על המשאב המופנה

PUT: זוהי הפקודה לשינוי משאב מטופל

POST: זוהי הפקודה ליצירת משאב חדש בתוך המשאב הכתוב

מחק: זוהי הפקודה למחיקת תגובת המשאב המופנה: באזור זה תראה את התגובה לפקודה שלך. גם בפורמט JSON.

שלב 7: בואו נתחיל

בואו נתחיל
בואו נתחיל

כעת אנו זקוקים לשם משתמש שנוצר באופן אקראי שהגשר יוצר עבורך. אתה תקבל אחד על ידי מילוי זה.

הכנס את כתובת האתר:

/api/

הכנס את ה- BODY:

ולחץ על GET

פקודה זו בעצם אומרת "אנא צור משאב חדש בתוך /api" (היכן שמות משתמשים יושבים) עם המאפיינים הבאים. בהתחלה תקבל שגיאה, וזה בגלל שזה שלב האבטחה של Philips Hue. על ידי לחיצה על הכפתור הם מוכיחים שיש לך גישה פיזית לגשר.

שלב 8:

תמונה
תמונה

כעת לחץ על הלחצן בגשר ולחץ שוב על POST.

כעת תקבל שם משתמש שהגשר הכין עבורך.

שלב 9: בואו נעשה משהו עם האורות

בואו נעשה משהו עם האורות
בואו נעשה משהו עם האורות

העתק את שם המשתמש שלך ושם אותו בשורה הבאה.

שים זאת בכתובת האתר שלך

/api//lights

הקש GET

אתה אמור לקבל תגובת JSON עם כל הנורות במערכת שלך ושמותיהן.

שלב 10:

תמונה
תמונה

שאלתי כמה אורות גוון מבית הספר, זה שאני משתמש בו הוא זה עם מזהה 3. אני רוצה מידע ספציפי על האור הזה.

שים את זה לצד כתובת האתר שכבר הייתה לך:

/api//lights/3

הקש GET

עכשיו אתה מקבל את כל המידע על לד 3 (אם יש לך מספר אחר כמו 1 תראה מידע על זה).

שלב 11: בואו לשלוט באור

בואו לשלוט באור
בואו לשלוט באור

אתה רואה ב"מצב "שה- LED שלי" דולק ". אנו רוצים לשלוט באור ב"מצב ".

שים זאת לצד כתובת האתר שכבר הייתה לך: https:/// api// lights/ 3/ state

שים את השורה הבאה ב- BODY

הקש PUT

עכשיו האור שלך יכבה! שנה את הערך בגוף לאמיתי והאור יידלק שוב.

שלב 12:

עכשיו הכל עובד אני רוצה לעשות את זה עם הארדואינו שלי. הסתכלתי על הקישור שפיליפס גוון נתן כדי לשנות את הצבע הבהיר. אבל אתה צריך פייתון בשביל זה, מעולם לא עבדתי עם פייתון אז חיפשתי משהו אחר.

אם אתה רוצה להסתכל על הקוד הזה יש לי את הקישור של Github כאן:

github.com/bsalinas/ArduinoHue

שלב 13:

חיפשתי כיצד אוכל לקבל מידע מאתר מפתח זה לאדואינו. רוב הזמן לא הבנתי את השפה. אבל מצאתי איזה קוד באתר של ג'יימס ברוס.

זהו הקישור לאתר.

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

שלב 14:

ראשית ראיתי שהוא משתמש בכבל אתרנט. הייתה לי רק נורת גוון וגשר ארדואינו, והבנה קטנה של קוד. לקח לי זמן להבין את הקוד שלו, אבל אני עדיין לא ממש מבין אותו.

הוספתי לראשונה את הספרייה הזו לאינטרנט.

#לִכלוֹל

זה בשביל הרשת שלך (זה חייב להיות זהה לנורת הגוון)

const char* ssid = ""; // שים כאן את רשת ה- WiFi שלך SSIDconst char* password = ""; // שים כאן את סיסמת רשת ה- WiFi שלך

אלה המזהים של הגשר שלך ושם המשתמש שהגשר שלך נתן לך. (אני לא יודע היכן מייצג ה -80 אבל כשעשיתי קצת מחקר ראיתי שהוא משמש לרשתות).

// קבועי גוון const char hueHubIP = ""; // Hue hub IP const char hueUsername = ""; // שם משתמש Hue const int hueHubPort = 80;

// משתני גוון bool hueOn; // on/off int hueBri; // ערך הבהירות long hueHue; // value hue String hueCmd; // פקודת הגוון

מאגר ארוך לא חתום = 0; // מאגר לאחסון נתונים שהתקבל כתובת ארוכה ללא סימן;

שלב 15:

לצורך הגדרת הריק, עשיתי את מירב החיבור לאינטרנט. בקוד זה, הארדואינו מחפש אם הוא יכול להתחבר לרשת.

הגדרת void () {Serial.begin (9600);

Serial.println ();

Serial.printf ("מתחבר ל- %s", ssid);

WiFi.begin (ssid, סיסמא);

בעוד (WiFi.status ()! = WL_CONNECTED) {

עיכוב (500);

Serial.print ("."); }

Serial.println ("מחובר"); }

שלב 16:

בלופ של ג'יימס, ראיתי שיש לו הצהרה של If and else. אבל זה היה לכבל ה- Ethernet, אז ניסיתי לעזוב את זה. לפעמים גם ניסיתי להתאים אותו, אך עדיין לא ידעתי עם הרבה נתונים. כמה דברים בקוד אכן הבנתי, במחרוזת נמצאים הנתונים הניתנים לאור הגוון.

לולאת חלל () {

// סדרה של ארבע פקודות לדוגמא, שצבען דוהה שני אורות בין אדום לוורוד. קרא את התיעוד של Hue API // לפרטים נוספים על הפקודות המדויקות שיש להשתמש בהם, אך שים לב כי יש להימלט מסימני ציטוט.

פקודת מחרוזת = "{" ב- / ": true, \" hue / ": 50100, \" sat / ": 255, \" bri / ": 255, \" זמן מעבר / ":"+מחרוזת (אקראי (15, 25))+"}"; setHue (1, פקודה);

command = "{" on / ": true, \" hue / ": 65280, \" sat / ": 255, \" bri / ": 255, \" זמן מעבר / ":"+מחרוזת (אקראי (15, 25))+"}"; setHue (2, פקודה);

command = "{" hue / ": 65280, \" sat / ": 255, \" bri / ": 255, \" זמן מעבר / ":"+מחרוזת (אקראית (15, 25))+"}"; setHue (1, פקודה);

command = "{" hue / ": 50100, \" sat / ": 255, \" bri / ": 255, \" זמן מעבר / ":"+מחרוזת (אקראית (15, 25))+"}"; setHue (2, פקודה);

}

שלב 17:

הקוד הבא היה בוליאני, אבל בארדואינו אתה צריך לכתוב בול. בהתחלה קיבלתי הרבה שגיאות בגלל המילה לקוח. אז חיפשתי את זה וראיתי שקוד כלשהו משתמש בשורה "לקוח WifiClient;". אז השתמשתי בזה וזה עבד.

בהצהרת if אתה רואה לעתים קרובות client.print. אם תסתכל על הקוד, תראה שכתובת האתר שהזנת קודם מחולקת לחתיכות. כעת הזן קוד משלך. הייתי צריך לבחור את נורת הלד השלישית שלי.

/ * setHue () היא פונקציית הפקודה העיקרית שלנו, שצריכה להעביר מספר אור ומחרוזת פקודה מעוצבת כראוי בפורמט JSON (בעצם מערך סגנון Javascript של משתנים * וערכים. לאחר מכן הוא מבקש בקשה פשוטה של HTTP PUT ל- הגשר ב- IP שצוין בהתחלה. */

bool setHue (int lightNum, פקודת מחרוזת) {

לקוח WiFiClient;

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

while (client.connected ()) {

client.print ("PUT /api /"); client.print (hueUsername); client.print ("/lights/"); client.print (lightNum); // מבוסס על אפס hueLight, הוסף 1 client.println ("3/state"); // כאן שיניתי את שם הגוון ואת stateclient.print ("מארח:"); client.println (hueHubIP); client.print ("אורך התוכן:"); client.println (command.length ()); client.println ("סוג תוכן: טקסט/רגיל; charset = UTF-8"); client.println (); // שורה ריקה לפני body client.println (פקודה); // פקודת הגוון

} client.stop (); להחזיר נכון; // פקודה בוצעה}

אחרת להחזיר שקר; // הפקודה נכשלה}

שלב 18:

בבולאני השני, עשיתי את אותו הדבר עם שינוי כמה מילים. העלתי את זה כדי לראות אם זה עובד.

/* פונקציית עזר במקרה שההיגיון שלך תלוי במצב הנוכחי של האור. * זה קובע מספר משתנים גלובליים אותם תוכל לבדוק כדי לברר אם נורה דולקת כעת או לא * והגוון וכו 'לא נחוץ רק לשלוח פקודות */

bool getHue (int lightNum) {

לקוח WiFiClient;

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

client.print ("GET /api /"); client.print (hueUsername); client.print ("/lights/"); 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 (',') == "true"); // אם האור דולק, הגדר את המשתנה ל- true client.findUntil ("\" bri / ":", "\ 0"); hueBri = client.readStringUntil (',').toInt (); // הגדר משתנה לערך בהירות client.findUntil ("\" hue / ":", "\ 0"); hueHue = client.readStringUntil (',').toInt (); // הגדר משתנה לשבירת ערך הגוון; // עדיין לא לוכד תכונות אור אחרות}} client.stop (); להחזיר נכון; // נלכד על, bri, hue} else return false; // שגיאה בקריאה ב-, bri, hue}

שלב 19:

תמונה
תמונה

אני חושב שיכולתי ליצור קשר עם גוון פיליפס. אני מקבל מידע אבל עדיין צריך להשתמש בו.

למרבה הצער, זה חורג ממה שאני יכול לקודד. אם אתה יודע את התשובה, או אם יש טעויות אמיתיות שצריך לתקן אותן, אשמח לשמוע אותה.:-)

מוּמלָץ: