สารบัญ:

โครงการโรงเรียน 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 ได้อย่างไร ในเรื่องนี้ ฉันอธิบายขั้นตอนทั้งหมดของฉันและมาไกลแค่ไหนแล้ว ฉันไม่ประสบความสำเร็จในการเขียนโปรแกรม Hue ด้วย Arduino แต่ฉันคิดว่ามันเป็นการเริ่มต้นที่ดี

ฉันต้องการสิ่งนี้: 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: Hue App

ดาวน์โหลดแอปอย่างเป็นทางการของ Philips Hue เชื่อมต่อโทรศัพท์ของคุณกับเครือข่ายที่คุณต้องการให้ Hue Bridge เปิดอยู่

ขั้นตอนที่ 3: เชื่อมต่อสะพาน

เชื่อมต่อบริดจ์ของคุณกับเครือข่ายและทำงานอย่างถูกต้อง ทดสอบว่าแอพสมาร์ทโฟนสามารถควบคุมไฟในเครือข่ายเดียวกันได้ จะต้องอยู่ในเครือข่าย Wi-Fi เดียวกัน

ขั้นตอนที่ 4: ที่อยู่ IP

จากนั้นคุณต้องค้นหาที่อยู่ IP ของบริดจ์บนเครือข่ายของคุณ กดลิงค์เพื่อเชื่อมต่อกับบริดจ์ในแอพและลองควบคุมไฟ

ขั้นตอนที่ 5:

หากใช้งานได้ ให้ไปที่เมนูการตั้งค่าในแอป ไปที่ "My Bridge" ไปที่ "การตั้งค่าเครือข่าย" ปิดสวิตช์ DHCP แล้วคุณจะเห็นที่อยู่ IP ของบริดจ์ จดที่อยู่ IP จากนั้นเปิด DHCP อีกครั้ง

ขั้นตอนที่ 6: ดีบัก Hue ของคุณ

แก้ไขข้อบกพร่อง Hue ของคุณ
แก้ไขข้อบกพร่อง Hue ของคุณ

เมื่อคุณเขียนสิ่งนั้นลงไป คุณต้องดีบักเว้ของคุณ คุณต้องมีที่อยู่ IP สำหรับขั้นตอนนี้ คุณต้องไปที่ไซต์ถัดไป

/debug/clip.html

อินเทอร์เฟซจะมีลักษณะเช่นนี้ในภาพ นี่เป็นพื้นฐานของการเข้าชมเว็บทั้งหมดและอินเทอร์เฟซ RESTful ที่มีสีสัน

ฉันได้รับข้อมูลนี้เกี่ยวกับอินเทอร์เฟซ Restful ของไซต์ Philips Hue

URL: นี่คือที่อยู่จริงของทรัพยากร (สิ่งของ) เฉพาะภายในระบบฮิว อาจเป็นแสง กลุ่มของแสง หรืออะไรหลายๆ อย่าง นี่คือวัตถุที่คุณจะโต้ตอบภายในคำสั่งนี้

เนื้อหา: นี่คือส่วนหนึ่งของข้อความที่อธิบายสิ่งที่คุณต้องการเปลี่ยนแปลงและวิธี ที่นี่คุณป้อนชื่อทรัพยากรและค่าที่ต้องการเปลี่ยน/เพิ่มในรูปแบบ JSON

เมธอด: คุณสามารถเลือกวิธี HTTP 4 แบบที่การโทรฮิวสามารถใช้ได้ที่นี่

GET: นี่คือคำสั่งเพื่อดึงข้อมูลทั้งหมดเกี่ยวกับรีซอร์สที่ระบุ

PUT: นี่คือคำสั่งในการแก้ไขทรัพยากรที่อยู่

POST: นี่คือคำสั่งเพื่อสร้างทรัพยากรใหม่ภายในทรัพยากรที่ระบุ

ลบ: นี่คือคำสั่งเพื่อลบการตอบกลับของทรัพยากรที่อยู่: ในพื้นที่นี้ คุณจะเห็นการตอบสนองต่อคำสั่งของคุณ ในรูปแบบ JSON ด้วย

ขั้นตอนที่ 7: มาเริ่มกันเลย

มาเริ่มกันเลย
มาเริ่มกันเลย

ตอนนี้เราต้องการชื่อผู้ใช้ที่สร้างขึ้นแบบสุ่มที่บริดจ์สร้างให้คุณ คุณจะได้รับหนึ่งโดยการกรอกนี้

ใส่ URL:

/api/

ใส่ในร่างกาย:

แล้วกด GET

คำสั่งนี้โดยพื้นฐานแล้วพูดว่า "โปรดสร้างทรัพยากรใหม่ภายใน /api "(โดยที่ชื่อผู้ใช้นั่ง) ด้วยคุณสมบัติดังต่อไปนี้ ในตอนแรก คุณจะได้รับข้อผิดพลาด และนั่นเป็นเพราะเป็นขั้นตอนการรักษาความปลอดภัยของ Philips Hue การกดปุ่มจะเป็นการพิสูจน์ว่าคุณสามารถเข้าถึงสะพานได้

ขั้นตอนที่ 8:

ภาพ
ภาพ

ตอนนี้ กดปุ่มบน Bridge แล้วคลิก POST อีกครั้ง

ตอนนี้คุณจะได้รับชื่อผู้ใช้ที่บริดจ์สร้างขึ้นเพื่อคุณ

ขั้นตอนที่ 9: มาทำอะไรกับแสงไฟกันเถอะ

มาทำอะไรกับแสงไฟกันเถอะ
มาทำอะไรกับแสงไฟกันเถอะ

คัดลอกชื่อผู้ใช้ของคุณและใส่ในบรรทัดต่อไปนี้

ใส่สิ่งนี้ใน URL ของคุณ

/api/ /lights

กด GET

คุณควรได้รับการตอบสนอง JSON พร้อมไฟทั้งหมดในระบบของคุณและชื่อไฟเหล่านั้น

ขั้นตอนที่ 10:

ภาพ
ภาพ

ฉันยืม Hue Lights จากโรงเรียน อันที่ฉันใช้คืออันที่มี id 3 ฉันต้องการข้อมูลเฉพาะเกี่ยวกับไฟนี้

วางไว้ข้าง URL ที่คุณมีอยู่แล้ว:

/api/ /lights/3

กด GET

ตอนนี้คุณได้รับข้อมูลเกี่ยวกับ Led 3 ทั้งหมด (ถ้าคุณมีหมายเลขอื่นเช่น 1 คุณจะเห็นข้อมูลเกี่ยวกับหมายเลขนั้น)

ขั้นตอนที่ 11: มาควบคุมแสงกันเถอะ

มาควบคุมแสงกันเถอะ
มาควบคุมแสงกันเถอะ

คุณเห็นใน "สถานะ" ที่ผู้นำของฉันคือ "เปิด" เราต้องการควบคุมแสงใน "สถานะ"

วางไว้ข้าง URL ที่คุณมีอยู่แล้ว:https:// /api/ /lights/ 3/ state

ใส่บรรทัดถัดไปใน BODY

กด PUT

ตอนนี้ไฟของคุณจะดับลง! เปลี่ยนค่าในตัวให้เป็น true แล้วไฟจะเปิดขึ้นอีกครั้ง

ขั้นตอนที่ 12:

ตอนนี้ทุกอย่างทำงานได้ ฉันต้องการทำสิ่งนี้กับ Arduino ของฉัน ฉันดูลิงก์ที่ฟิลิปส์เว้ให้เพื่อทำการเปลี่ยนสีของแสง แต่คุณต้องการ Python สำหรับสิ่งนี้ ฉันไม่เคยทำงานกับ Python ดังนั้นฉันจึงมองหาอย่างอื่น

หากคุณต้องการดูรหัสนี้ ฉันมีลิงก์ Github ที่นี่:

github.com/bsalinas/ArduinoHue

ขั้นตอนที่ 13:

ฉันดูว่าฉันจะรับข้อมูลจากเว็บไซต์สำหรับนักพัฒนานี้ไปยัง Arduino ได้อย่างไร ส่วนใหญ่ฉันไม่เข้าใจภาษา แต่ฉันพบรหัสบนเว็บไซต์ของ James Bruce

นี่คือลิงค์ไปยังเว็บไซต์

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

ขั้นตอนที่ 14:

ตอนแรกฉันเห็นว่าเขาใช้สายอีเทอร์เน็ต ฉันมีหลอดไฟ Hue Light และบริดจ์ Arduino และเข้าใจโค้ดเพียงเล็กน้อย ฉันต้องใช้เวลาสักพักกว่าจะเข้าใจโค้ดของเขา แต่ฉันก็ยังไม่เข้าใจจริงๆ

ครั้งแรกที่ฉันเพิ่มห้องสมุดนี้สำหรับอินเทอร์เน็ต

#รวม

นี่สำหรับเครือข่ายของคุณ (จะต้องเหมือนกับหลอดไฟ Hue)

const ถ่าน* ssid = " "; // ใส่รหัสผ่าน SSIDconst char* เครือข่าย WiFi ของคุณที่นี่ = " "; // ใส่รหัสผ่านเครือข่าย WiFi ของคุณที่นี่

นี่คือ ID ของบริดจ์ของคุณและชื่อผู้ใช้ที่บริดจ์ของคุณมอบให้คุณ (ฉันไม่รู้ว่า 80 ย่อมาจากอะไร แต่เมื่อฉันทำวิจัยบางอย่าง ฉันเห็นว่ามันถูกใช้สำหรับเครือข่าย)

// ค่าคงที่ฮิว const ถ่าน hueHubIP = ""; // Hue hub IP const char hueUsername = ""; // ชื่อผู้ใช้ Hue const int hueHubPort = 80;

// ตัวแปร Hue bool hueOn; // เปิด/ปิด int hueBri; // ค่าความสว่างยาว hueHue; // ค่าฮิว สตริง hueCmd; // คำสั่งเว้

บัฟเฟอร์ยาวที่ไม่ได้ลงนาม=0; //บัฟเฟอร์สำหรับการจัดเก็บข้อมูลที่ได้รับ unsigned ยาว addr;

ขั้นตอนที่ 15:

สำหรับการตั้งค่าเป็นโมฆะ ฉันใช้การเชื่อมต่ออินเทอร์เน็ตให้เกิดประโยชน์สูงสุด ในรหัสนี้ Arduino กำลังมองหาว่าเขาสามารถเชื่อมต่อกับเครือข่ายได้หรือไม่

การตั้งค่าเป็นโมฆะ () { Serial.begin (9600);

Serial.println();

Serial.printf("กำลังเชื่อมต่อกับ %s ", ssid);

WiFi.begin(ssid, รหัสผ่าน);

ในขณะที่ (WiFi.status () != WL_CONNECTED) {

ล่าช้า (500);

Serial.print("."); }

Serial.println("เชื่อมต่อ"); }

ขั้นตอนที่ 16:

ในวงของเจมส์ ผมเห็นว่าเขามีคำสั่ง if และ else แต่นั่นเป็นสำหรับสายอีเทอร์เน็ต ดังนั้นฉันจึงพยายามละทิ้งสิ่งนี้ บางครั้งฉันก็พยายามปรับมัน แต่ฉันยังไม่รู้ด้วยข้อมูลมากมาย บางสิ่งในรหัสที่ฉันเข้าใจในสตริงคือข้อมูลที่ให้กับแสงเว้

วงเป็นโมฆะ (){

// ชุดคำสั่งตัวอย่างสี่ชุด ซึ่งสีจะหรี่ไฟสองดวงระหว่างสีแดงและสีชมพู อ่านเอกสาร Hue API // สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับคำสั่งที่แน่นอนที่จะใช้ แต่โปรดทราบว่าเครื่องหมายคำพูดต้องหลีกเลี่ยง

คำสั่งสตริง = "{"on\": true, \"hue\": 50100, \"sat\":255, \"bri\":255, \"transitiontime\":"+String(random(15), 25))+"}";setHue(1, คำสั่ง);

command = "{"on\": true, \"hue\": 65280, \"sat\":255, \"bri\":255, \"transitiontime\":"+String(random(15, 25))+"}"; setHue(2, คำสั่ง);

command = "{"hue\": 65280, \"sat\":255, \"bri\":255, \"transitiontime\":"+String(random(15, 25))+"}"; setHue(1, คำสั่ง);

command = "{"hue\": 50100, \"sat\":255, \"bri\":255, \"transitiontime\":"+String(random(15, 25))+"}"; setHue(2, คำสั่ง);

}

ขั้นตอนที่ 17:

รหัสต่อไปคือบูลีน แต่ใน Arduino คุณต้องเขียนบูล ตอนแรก ฉันได้รับข้อผิดพลาดมากมายเนื่องจากคำว่าไคลเอนต์ ดังนั้นฉันจึงค้นหาและเห็นว่าโค้ดบางตัวใช้บรรทัด "ไคลเอนต์ Wifi" ดังนั้นฉันจึงใช้มันและได้ผล

ในคำสั่ง if คุณมักจะเห็น client.print หากคุณดูรหัส คุณจะเห็นว่า URL ที่คุณป้อนก่อนหน้านี้แบ่งออกเป็นส่วนๆ ตอนนี้ป้อนรหัสของคุณเอง ฉันต้องเลือกไฟ LED ดวงที่ 3

/* setHue() คือฟังก์ชันคำสั่งหลักของเรา ซึ่งจำเป็นต้องส่งผ่านตัวเลข light และ * สตริงคำสั่งที่จัดรูปแบบอย่างถูกต้องในรูปแบบ JSON (โดยทั่วไปจะเป็นอาร์เรย์สไตล์ Javascript ของตัวแปร * และค่าต่างๆ จากนั้นจึงส่งคำขอ HTTP PUT อย่างง่ายไปยัง สะพานที่ IP ที่ระบุตอนเริ่มต้น */

bool setHue (int lightNum คำสั่ง String) {

ไคลเอนต์ WiFiClient;

ถ้า (client.connect (hueHubIP, hueHubPort)){

ในขณะที่ (client.connected()){

client.print("PUT /api/"); client.print(hueUsername); client.print("/ไฟ/"); client.print(lightNum); // hueLight เป็นศูนย์ตาม เพิ่ม 1 client.println("3/state"); // ที่นี่ฉันเปลี่ยนชื่อฮิวและ stateclient.print("Host: "); client.println(hueHubIP); client.print("เนื้อหา-ความยาว: "); client.println(command.length()); client.println("Content-Type: text/plain;charset=UTF-8"); client.println(); // บรรทัดว่างก่อนร่างกาย client.println (คำสั่ง); // คำสั่งเว้

} 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(', ') == "จริง"); // หากไฟสว่างขึ้น ให้ตั้งค่าตัวแปรเป็น true client.findUntil("\"bri\":", "\0"); hueBri = client.readStringUntil(', ').toInt(); // ตั้งค่าตัวแปรเป็นค่าความสว่าง client.findUntil("\"hue\":", "\0"); hueHue = client.readStringUntil(', ').toInt(); // ตั้งค่าตัวแปรให้แบ่งค่าฮิว; // ยังไม่จับแอตทริบิวต์แสงอื่น ๆ } } client.stop(); คืนค่าจริง; // จับ, bri, hue } else คืนค่าเท็จ; // เกิดข้อผิดพลาดในการอ่าน bri, hue }

ขั้นตอนที่ 19:

ภาพ
ภาพ

ฉันคิดว่าฉันสามารถเชื่อมต่อกับ Philips Hue ได้ ได้รับข้อมูลแล้วแต่ยังจำเป็นต้องใช้

น่าเสียดายที่สิ่งนี้มีมากกว่าที่ฉันสามารถเขียนโค้ดได้ หากคุณรู้คำตอบหรือมีข้อผิดพลาดจริงที่ต้องแก้ไข ฉันชอบที่จะได้ยินมัน:-)

แนะนำ: