สารบัญ:

Hue Magic: 4 ขั้นตอน (พร้อมรูปภาพ)
Hue Magic: 4 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Hue Magic: 4 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Hue Magic: 4 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: HUE Animation Studio (magic unboxing video)! 2024, มิถุนายน
Anonim
Image
Image

ยินดีต้อนรับวิซาร์ด!

สองสามเดือนที่ผ่านมา ฉันสร้างกล่องวิเศษขนาดเล็กพร้อมไม้กายสิทธิ์สำหรับลูกชายวัย 3 ขวบของฉัน เมื่อเขาสัมผัสกล่องด้วยไม้กายสิทธิ์ แสงสีที่เปลี่ยนไปจะเริ่มเปล่งออกมาจากกล่อง เมื่อเขาเห็นสีที่เขาชอบเป็นพิเศษ เขาสามารถชี้ไม้กายสิทธิ์ไปทางโคมไฟตั้งโต๊ะ (มีหลอดไฟ Philips Hue อยู่ข้างใน) ร่ายมนตร์ แล้วสีจากกล่องจะพุ่งไปที่โคมไฟอย่างน่าอัศจรรย์! โคมกับไฟจากกล่องกะทันหันมีสีเดียวกัน…

หลังจากนั้นไม่กี่วินาที สีจะจางหายไปและโคมไฟตั้งโต๊ะจะกลับสู่สถานะก่อนการสะกด จนกว่าจะร่ายคาถาใหม่…

ขั้นตอนที่ 1: สิ่งที่คุณต้องการในการสร้างโครงการนี้

สิ่งที่คุณต้องการในการสร้างโครงการนี้
สิ่งที่คุณต้องการในการสร้างโครงการนี้
สิ่งที่คุณต้องการเพื่อสร้างโครงการนี้
สิ่งที่คุณต้องการเพื่อสร้างโครงการนี้
สิ่งที่คุณต้องการเพื่อสร้างโครงการนี้
สิ่งที่คุณต้องการเพื่อสร้างโครงการนี้

ในการสร้างโครงการนี้ คุณจะต้องมีเอกสารดังต่อไปนี้:

    • 1 (หรือมากกว่า) หลอดสี Philips Hue และ Hue Bridge
    • 1 Wemos D1 mini หรือไมโครคอนโทรลเลอร์ที่ใช้ esp8266 ที่คล้ายกัน
    • เซ็นเซอร์สัมผัส 1 (Arduino) (เช่น TTP223R)
    • 1 (Arduino) ปุ่มชั่วขณะ
    • ตัวเก็บประจุ 1 10uF
    • 1 RGB led (ประเภทขั้วบวกทั่วไป)
    • ตัวต้านทาน 5 ตัว (10, 22 และ 47 โอห์ม, 2x 10K โอห์ม)
    • PCB ต้นแบบขนาดเล็ก 2 แผ่น (2x3 นิ้วหรือประมาณ 5x7 ซม. ควรใหญ่พอ)
    • สายจัมเปอร์บางส่วน
    • หัวแร้ง
    • ไม้กายสิทธิ์ (สามารถซื้อเป็นของเล่นสำเร็จรูปในร้านขายของเล่นหรือทำเองก็ได้)
    • กล่องเล็กทำด้วยกระดาษแข็งหรือไม้ (สามารถเป็นกล่องที่มีอยู่ได้ แต่คุณสามารถสร้างกล่องจากศูนย์ได้แน่นอน)
    • บางเทป
    • กาวและ/หรือน็อตและสลักเกลียวสำหรับติดตั้ง PCB ในกล่อง
    • ทางเลือก: กระดาษห่อสำหรับกล่อง

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

ประสบการณ์บางอย่างในการเขียนโปรแกรม Arduino โดยใช้ Arduino IDE ก็มีประโยชน์เช่นกัน ประสบการณ์พื้นฐานน่าจะเพียงพอแล้ว เนื่องจากฉันจะให้รหัสที่สมบูรณ์เพื่อให้คุณคัดลอก/วาง คุณจะต้องปรับเปลี่ยนบางอย่างเพื่อให้ทำงานในการตั้งค่าเฉพาะของคุณ (เช่น การตั้งค่าเครือข่ายและรายละเอียดบางส่วนจากการกำหนดค่า Hue) หากฟังดูน่ากลัวเล็กน้อย ไม่ต้องกังวล ฉันจะช่วยคุณดึงข้อมูลทั้งหมดที่คุณต้องการ

ขั้นตอนที่ 2: กล่องและไม้กายสิทธิ์

The Box & Wand
The Box & Wand
The Box & Wand
The Box & Wand

โดยปกติขั้นตอนแรกจะยากที่สุด แต่ไม่ใช่ในคำแนะนำนี้! สำหรับการเริ่มต้นอย่างง่าย คุณสามารถซื้อไม้กายสิทธิ์จากร้านขายของเล่น และสำหรับกล่องนั้น คุณสามารถใช้กล่องเล็กๆ ที่มีอยู่แล้วซึ่งวางอยู่รอบๆ กลับมาใช้ใหม่ได้ ตรวจสอบให้แน่ใจว่ากล่องนั้นไม่ได้ทำมาจากโลหะ เพราะมันจะปิดกั้นสัญญาณ wifi และเราต้องการสิ่งเหล่านั้นเพื่อเวทย์มนตร์;-)

เมื่อคุณเปลี่ยนรูปแบบกล่องที่มีอยู่แล้ว สิ่งเดียวที่คุณต้องทำคือทำสองรูที่ด้านบนของกล่อง: รูเล็ก 1 รู (ขนาด 5 มม. = 0.2") สำหรับไฟ LED RGB และรูที่ใหญ่กว่า (ประมาณ 12- 14 มม. หรือประมาณ 0.5") สำหรับเซ็นเซอร์สัมผัส

ตำแหน่งที่แน่นอนของหลุมนั้นไม่สำคัญ เพียงวางไว้ตามความรู้สึกของสุนทรียศาสตร์ของคุณ แต่ให้คำนึงถึงบางสิ่ง:

  • รักษาระยะห่างระหว่างรูทั้งสองเพื่อให้แน่ใจว่าส่วนประกอบที่จะติดตั้งใต้รู (ไฟ LED RGB และเซ็นเซอร์สัมผัส) ได้รับอนุญาตให้ใช้พื้นที่เพียงพอสำหรับการติดตั้งและเดินสาย
  • รูที่ใหญ่ที่สุดสำหรับเซ็นเซอร์สัมผัส เซ็นเซอร์นี้จะติดตั้งไว้ใต้รูในลักษณะที่ไม้เรียวสามารถสัมผัสได้ (และกดได้เล็กน้อย) ดังนั้นตรวจสอบให้แน่ใจว่าไม้กายสิทธิ์ที่คุณซื้อไม่หนาเกินไป!

หรือคุณสามารถใช้ (สเปรย์) สีหรือกระดาษห่อและปิดกล่องพลาสติกเพื่อทำให้กล่องของคุณสวยขึ้นเล็กน้อย และเพื่อป้องกันอาหารหกเลอะและมือที่สกปรก

หากขั้นตอนแรกนี้ไม่ทะเยอทะยานเกินไปสำหรับความชอบของคุณ โปรดสร้างกล่องและไม้กายสิทธิ์ทั้งหมดเลย! มีคำแนะนำหลายอย่างที่จะช่วยให้คุณสร้างไม้กายสิทธิ์ที่สวยงาม

ไม่ว่าคุณจะเลือกเส้นทางใด ก็ได้เวลาสำรวจภายในกล่องแล้ว

ขั้นตอนที่ 3: ฮาร์ดแวร์ภายใน

ฮาร์ดแวร์ภายใน
ฮาร์ดแวร์ภายใน
ฮาร์ดแวร์ภายใน
ฮาร์ดแวร์ภายใน
ฮาร์ดแวร์ภายใน
ฮาร์ดแวร์ภายใน

ใช้หัวแร้งเพื่อเชื่อมต่อชิ้นส่วนอิเล็กทรอนิกส์ตามแผนภาพวงจรด้านบน มีสองสิ่งที่ต้องให้ความสนใจเป็นพิเศษกับ:

  • สายไฟระหว่าง Wemos D1 Mini และไฟ LED RGB ควรยาวเพียงพอเพื่อให้สามารถติดตั้งไฟ LED RGB ในรูที่คุณทำไว้ที่ฝากล่องได้
  • การนับจำนวนสายไฟที่ต่อกับสวิตช์ชั่วขณะและเซ็นเซอร์สัมผัสก็เหมือนกัน เนื่องจากสิ่งเหล่านี้ควรเข้าถึงได้ผ่านรูอีกด้านของฝาปิด
  • ปุ่มของสวิตช์ชั่วขณะควรติดกาวที่ด้านล่างของเซ็นเซอร์สัมผัส (ด้านที่ไม่ละเอียดอ่อน) เพื่อให้คุณสามารถวางปุ่มบนสวิตช์ชั่วขณะโดยติดเซ็นเซอร์สัมผัสที่ด้านบน (ดูรูป) เซ็นเซอร์สัมผัสถูกติดตั้งที่ด้านบนของสวิตช์ชั่วขณะเพื่อตรวจจับการกดปุ่มด้วยนิ้ว ในกรณีนี้ การกดปุ่มจะถูกละเว้น เฉพาะเมื่อกดปุ่มด้วยไม้กายสิทธิ์ (ซึ่งไม่ควรเป็นสื่อกระแสไฟฟ้า ดังนั้นพลาสติกและไม้จึงใช้ได้) วัฏจักรเวทย์มนตร์จะเริ่มขึ้น
  • ติดตั้งปุ่มชั่วขณะด้วยเซ็นเซอร์สัมผัสที่ด้านบนไม่ลึกเกินไปใต้รูในฝาปิด เพราะต้องใช้ไม้กายสิทธิ์เข้าถึงได้เพื่อให้เวทมนตร์เคลื่อนที่
  • ตรวจสอบให้แน่ใจว่าได้สังเกตขั้วของตัวเก็บประจุเมื่อทำการบัดกรี หากคุณย้อนกลับขั้วบวกและขั้วลบ ตัวเก็บประจุมีแนวโน้มที่จะปล่อยควันวิเศษและทำให้วงจรของคุณเข้าสู่โหมดสลีปชั่วนิรันดร์
  • กาว เทป และหรือขันสกรูที่ใส่แบตเตอรี่และ PCB เข้าที่ ไม่จำเป็นต้องเรียบร้อย เพราะจะไม่อยู่ในสายตา มันควรจะเป็นหลักฐานการตก

สู่ซอฟต์แวร์!

ขั้นตอนที่ 4: ซอฟต์แวร์

ตรวจสอบให้แน่ใจว่าคุณมีโปรแกรมแก้ไขซอฟต์แวร์ Arduino ล่าสุด (ฟรี) ซึ่งสามารถดาวน์โหลดได้ที่ https://www.arduino.cc/en/Main/Software หากต้องการเพิ่มการรองรับสำหรับ Wemos D1 mini และบอร์ดอื่นๆ ที่ใช้ ESP8266 ให้ทำตามขั้นตอนต่อไปนี้:

  • หลังการติดตั้ง ให้เริ่มซอฟต์แวร์ Arduino และเปิดหน้าต่าง Preferences
  • ป้อน https://arduino.esp8266.com/stable/package_esp8266com_index.json ลงในฟิลด์ "Additional Board Manager URLs" คุณสามารถเพิ่ม URL ได้หลายรายการ โดยคั่นด้วยเครื่องหมายจุลภาค
  • เปิดตัวจัดการบอร์ดจากเครื่องมือ > เมนูบอร์ด และติดตั้งแพลตฟอร์ม esp8266 (และอย่าลืมเลือกบอร์ด ESP8266 ของคุณจากเครื่องมือ > เมนูบอร์ดหลังการติดตั้ง "LOLIN(WEMOS) D1 R2 & mini" ทำงานได้ดีที่สุดสำหรับ Wemos D1 mini v2 และ v3 กระดาน

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

ในโปรแกรมแก้ไข Arduino ให้เปิดไฟล์ใหม่ (ไฟล์>ใหม่) และคัดลอก/วางโค้ดด้านล่างในหน้าต่างที่เพิ่งเปิด เพียงเขียนทับบรรทัดที่มีอยู่แล้วในหน้าต่างใหม่ (การตั้งค่าเป็นโมฆะและวนรอบเป็นโมฆะ)

ตอนนี้คุณเกือบจะพร้อมแล้ว แต่คุณจะต้องปรับเปลี่ยนโค้ดสองสามส่วนสำหรับการตั้งค่าเฉพาะของคุณ

สิ่งแรกที่ต้องทำคือเปลี่ยนที่อยู่ IP ในบรรทัดที่ 34 (ในโปรแกรมแก้ไข Arduino บรรทัดของรหัสจะถูกกำหนดหมายเลข) เป็นที่อยู่ IP ของ Hue Bridge ของคุณ หากคุณไม่ทราบที่อยู่ IP ของ Hue Bridge ให้ไปที่ https://discovery.meethue.com/ และที่อยู่ IP ที่ถูกต้องจะปรากฏในเบราว์เซอร์ของคุณทันที ที่อยู่ IP คือหมายเลขประที่นำหน้าด้วย "internalipaddress"

ในการสื่อสารกับไฟ Hue คุณจะต้องสร้างผู้ใช้ Hue API สำหรับ Wemos D1 mini เพื่อให้ Wemos สามารถสื่อสารกับแสง Hue ผ่าน Hue API ได้ โดยทำตามคำแนะนำที่ https://developers.meethue.com/develop/get-started-2/ และคัดลอก/วางชื่อผู้ใช้ที่สร้างขึ้น (ค่อนข้างยาว) ในหน้าต่างโค้ด Arduino เพียงแทนที่ทุก "YOUR HUE API USERNAME" ด้วยชื่อผู้ใช้ API ที่สร้างขึ้น

จากนั้นคุณต้องเลือกแสง Hue ที่เหมาะสมเพื่อเปลี่ยนสี ใน Hue API ไฟทุกดวงมีตัวเลข ดังนั้นคุณต้องค้นหาหมายเลขที่ตรงกับแสงที่คุณต้องการใช้สำหรับโครงการนี้ วิธีที่ง่ายที่สุดวิธีหนึ่งในการค้นหาว่าไฟดวงใดมีจำนวนเท่าใด คือการดาวน์โหลดแอป Hue Viewer สำหรับ Android หรือ iOS แทนที่ข้อความ "YOUR LIGHT NUMBER" ด้วยหมายเลขที่ถูกต้องทุกที่ในหน้าต่างโค้ด Arduino

สิ่งสุดท้ายที่ต้องทำคือตั้งค่า Wemos เพื่อเชื่อมต่อกับเครือข่าย wifi ของคุณ ทำได้โดยการอัปโหลดรหัสไปที่ Wemos และบนแล็ปท็อปของคุณสลับไปยังเครือข่าย wifi อื่น: เป็น "AutoConnectAP" จากนั้นเบราว์เซอร์ของคุณจะแสดงหน้าที่คุณสามารถเพิ่ม SSID (ชื่อ) และรหัสผ่านของเครือข่าย wifi ของคุณที่ตัวควบคุม Wemos จะใช้เพื่อเชื่อมต่อกับเครือข่าย wifi ของคุณ (และไปยังสะพานเว้)

หมายเหตุ: หากการอัปโหลดรหัสไปยัง Wemos D1 mini ของเราผ่าน USB ไม่ทำงาน คุณอาจต้องดาวน์โหลดไดรเวอร์สำหรับชิป USB บน Wemos ดาวน์โหลดไดรเวอร์สำหรับแพลตฟอร์มของคุณ (Windows, Mac) ได้ที่

ตอนนี้คุณพร้อมที่จะทดสอบการสร้างของคุณแล้ว!

// ESP8266 Hue Magic Wand// Richard van Kampen - 2018 // รหัสนี้ได้รับการทดสอบบน Wemos D1 mini แล้ว แต่อาจจะใช้งานได้กับบอร์ดพัฒนาอื่นๆ ที่ใช้ ESP8266 // เพื่อเพิ่มการรองรับ Wemos D1 mini และบอร์ด ESP8266 อื่นๆ ในโปรแกรมแก้ไข Arduino ให้ทำตามขั้นตอนต่อไปนี้: // - เริ่ม Arduino และเปิดหน้าต่างการตั้งค่า // - ป้อน https://arduino.esp8266.com/stable/package_esp8266com_index.json ลงในช่อง Additional Board Manager URLs คุณสามารถเพิ่ม URL ได้หลายรายการ โดยคั่นด้วยเครื่องหมายจุลภาค // - เปิดตัวจัดการบอร์ดจากเครื่องมือ > เมนูบอร์ด และติดตั้งแพลตฟอร์ม esp8266 (และอย่าลืมเลือกบอร์ด ESP8266 ของคุณจากเครื่องมือ > เมนูบอร์ดหลังการติดตั้ง) // ไลบรารีที่ใช้: #include "ESP8266WiFi.h" // ESP8266 Core WiFi Library #include "DNSServer.h" // Local DNS Server ใช้สำหรับเปลี่ยนเส้นทางคำขอทั้งหมดไปยังพอร์ทัลการกำหนดค่า WiFiManager หากไม่มีการตั้งค่า WIFI (SSID, รหัสผ่าน) ยังไม่ได้ตั้งค่า #include "ESP8266WebServer.h" //Local WebServer ที่ใช้เพื่อให้บริการพอร์ทัลการกำหนดค่า WiFiManager #include "WiFiManager.h" // ไลบรารีเมจิกการกำหนดค่า WiFi หากยังไม่ได้ติดตั้ง โปรดดูที่ https://github.com/tzapu/WiFiManager #install-through-library-manager #include "RestClient.h" // https://github.com/fabianofranca/ESP8266RestClient จำเป็นสำหรับการใช้ Philips Hue API (ดู https://developers.meethue.com/develop/ ฮิว-api/). #include "ArduinoJson.h" // https://github.com/bblanchon/ArduinoJson จำเป็นต้องวิเคราะห์การตอบสนอง Hue API โปรดติดตั้งเวอร์ชัน 5.x ผ่านตัวจัดการไลบรารีใน Arduino (เมนู "Sketch" > รวมไลบรารี > จัดการ ไลบรารี่ > ค้นหา ArduinoJson และเปลี่ยนเวอร์ชันเป็น 5.x ล่าสุด) เวอร์ชัน 6 (ปัจจุบันอยู่ในรุ่นเบต้า) เกิดข้อผิดพลาด // ตัวแปรและ init: การตอบสนองของสตริง; const int redPin = 13;// บน Wemos นี่คือ d7 const int greenPin = 12;// บน Wemos นี่คือ d6 const int bluePin = 14;// บน Wemos นี่คือ d5 const int touchSensor = 5;// บน Wemos นี่ คือ d1 const int enablePin = 4;//on Wemos นี่คือการเปิดใช้งานบูล d2 = สูง; บูลทัช = ต่ำ; อักขระ const* aan_restore; int bri_restore; x_restore สองครั้ง; สองครั้ง y_restore; x_magic สองเท่า; สองเท่า y_magic; บูลก่อน = จริง; startMillis แบบยาวที่ไม่ได้ลงนาม ไม่ได้ลงนามยาวปัจจุบันMillis; ระยะเวลานานที่ไม่ได้ลงนามMillis; ลูกค้า RestClient = RestClient("192.168.178.23"); // "ที่อยู่ IP Hue Bridge ของคุณ" // หากคุณไม่ทราบที่อยู่ IP Hue Bridge ของคุณ โปรดไปที่ https://discovery.meethue.com และจะปรากฏในเบราว์เซอร์ของคุณทันที ที่อยู่ IP คือหมายเลขประที่นำหน้าด้วย "internalipaddress" การตั้งค่าเป็นโมฆะ () { analogWriteRange (255); Serial.begin(9600); // เริ่มโดยปิดไฟ LED pinMode (เปิดใช้งานพิน, INPUT_PULLUP); โหมดพิน (เซ็นเซอร์สัมผัส, อินพุต); startMillis = มิลลิวินาที (); ตรวจสอบไม้กายสิทธิ์ (); } void loop() { // ไม่มีอะไรทำที่นี่ ปล่อยว่างไว้… } void checkWand() { int rgbColour[3]; // รหัสสี RGB โดย James Harton, https://gist.github.com/jamesotron/766994 // เริ่มต้นด้วยสีแดง rgbColor[0] = 255; rgbColor[1] = 0; rgbColor[2] = 0; การเปิดใช้งาน = digitalRead (activationPin); // LOW หมายถึงกำลังใช้ไม้กายสิทธิ์ touch = digitalRead(touchSensor); // HIGH หมายถึงใช้นิ้วแทนไม้กายสิทธิ์ ซึ่งไม่ควรเป็นเช่นนั้น ในขณะที่ (การเปิดใช้งาน == LOW && touch == LOW) { // เลือกสีเพื่อเพิ่มและลด สำหรับ (int decColour = 0; decColour < 3; decColour += 1) { int incColour = decColour == 2 ? 0: เดคคัลเลอร์ + 1; //= ตัวดำเนินการ ternary หมายถึง: int incColour;if (decColour == 2) {incColour = 0;} else {incColour = decColour +1;} // ข้ามสองสี สำหรับ (int i = 0; i <255; i += 1) { rgbColour[decColour] -= 1; rgbColour[incColour] += 1; // เนื่องจาก RGB led ของเรามีแอโนดทั่วไปแทนที่จะเป็นแคโทด (ดังนั้นเราจึงต้องเชื่อมต่อกับ +3.3V แทนที่จะเป็นกราวด์) เราจึงต้องการค่าผกผันสำหรับ RGB: int red = 255 - rgbColour[0]; int สีเขียว = 255 - rgbColour[1]; สีน้ำเงินเข้ม = 255 - rgbColour[2]; analogWrite (หมุดสีแดง, สีแดง); analogWrite (greenPin, สีเขียว); analogWrite (บลูพิน, น้ำเงิน); ล่าช้า(8); การเปิดใช้งาน = digitalRead (activationPin); if (activation == HIGH) { // HIGH หมายถึงยกไม้กายสิทธิ์ขึ้น ไปที่ stopColorCycling; } } } } stopColorCycling: currentMillis = millis(); ระยะเวลาMillis = (currentMillis - startMillis); ถ้า (durationMillis> 1000) { RGBtoxy(rgbColour[0], rgbColour[1], rgbColour[2]); } อื่น {// ให้ Wemos เข้าสู่โหมดสลีป: ESP.deepSleep (0); } } โมฆะ RGBtoxy (int red, int green, int blue) { //ดู https://developers.meethue.com/documentation/color-conversions-rgb-xy double R = แผนที่ (สีแดง 0, 255, 0, 1,000); R /= 1,000; double G = แผนที่ (สีเขียว 0, 255, 0, 1000); G /= 1,000; double B = แผนที่ (สีน้ำเงิน 0, 255, 0, 1000); ข /= 1,000; R = (R > 0.04045f) ? pow((R + 0.055f) / (1.0f + 0.055f), 2.4f): (R / 12.92f); G = (G > 0.04045f) ? pow((G + 0.055f) / (1.0f + 0.055f), 2.4f): (G / 12.92f); B = (B > 0.04045f) ? pow((B + 0.055f) / (1.0f + 0.055f), 2.4f): (B / 12.92f); ดับเบิ้ล X = R * 0.649926f + G * 0.103455f + B * 0.197109f; สองเท่า Y = R * 0.234327f + G * 0.743075f + B * 0.022598f; ดับเบิ้ล Z = R * 0.0000000f + G * 0.053077f + B * 1.035763f; สองเท่า x = X / (X + Y + Z); สองเท่า y = Y / (X + Y + Z); // การแปลงยังไม่เสร็จสมบูรณ์ แต่น่าจะดีพอสำหรับสิ่งที่เราต้องการบรรลุ ดังนั้นปล่อยไว้ที่นี่แล้วส่งค่า XY ไปยังหลอดไฟ: sendtoHue(x, y); } ถือเป็นโมฆะ sendtoHue (ดับเบิ้ลเอ, ดับเบิ้ลบี) {// การเปลี่ยนสีจริงจากเวทมนตร์ไม้กายสิทธิ์ if (ก่อน) {// ผ่านครั้งแรก: รับสถานะหลอดไฟปัจจุบัน getCurrentValues (); }// จากนั้นส่งสีไม้กายสิทธิ์: // รอการสะกด: รอนาน; x_magic = ก; y_magic = ข; // เปิดไฟด้วยสีไม้กายสิทธิ์: ตอบกลับ = ""; int temp = สุ่ม (2, 9); const char* state = "จริง"; สำหรับ (int i = 1; i <= temp; i++) { // สร้างอาร์เรย์ถ่านเพื่อส่งไปยังบริดจ์: String temp_body1 = "{"on\": " + String (state) + ", \"bri\": 220, \"xy\": [" + String(x_magic) + ", " + String(y_magic) + "], \"transitiontime\": 1}"; int str_len1 = temp_body1.length() + 1; ถ่าน post_body1[str_len1]; temp_body1.toCharArray(post_body1, str_len1);// ตอนนี้ เรามี post_body1 เป็นถ่านอาร์เรย์ // โทรส่วนที่เหลือ: int statusCodePut1 = client.put("/api/YOUR HUE API USERNAME/lights/YOUR LIGHT NUMBER/state", post_body1, &response); รอ = สุ่ม (100, 600); ล่าช้า(รอ); ถ้า (state == "จริง") { state = "เท็จ"; } อื่น ๆ { state = "จริง"; } } // ลดความสว่าง…: ตอบกลับ = ""; อุณหภูมิ = สุ่ม (4, 17); // สร้างอาร์เรย์ถ่านเพื่อส่งไปยังบริดจ์: String temp_body2 = "{"on\": true, \"bri\": 154, \"transitiontime\": " + String(temp) + "}"; int str_len2 = temp_body2.length() + 1; ถ่าน post_body2[str_len2]; temp_body2.toCharArray(post_body2, str_len2);// ตอนนี้เรามี post_body2 เป็นอาร์เรย์ถ่านแล้ว // โทรส่วนที่เหลือ: int statusCodePut2 = client.put("/api/YOUR HUE API USERNAME/lights/YOUR LIGHT NUMBER/state", post_body2, &response); รอ = สุ่ม (1,000, 2500); ล่าช้า(รอ); //..และทำให้สว่างขึ้นอีกครั้ง: response = ""; อุณหภูมิ = สุ่ม (4, 17); // สร้างอาร์เรย์ถ่านเพื่อส่งไปยังบริดจ์: String temp_body3 = "{"bri_inc\": 100, \"transitiontime\": }"; int str_len3 = temp_body3.length() + 1; ถ่าน post_body3[str_len3]; temp_body3.toCharArray(post_body3, str_len3);// ตอนนี้ เรามี post_body3 เป็นอาร์เรย์ถ่าน // โทรส่วนที่เหลือ: int statusCodePut3 = client.put("/api/YOUR HUE API USERNAME/lights/YOUR LIGHT NUMBER/state", post_body3, &response); รอ = สุ่ม (2500, 5000); // รอ 2-5 วินาที ล่าช้า (รอ); // และจางกลับเป็นค่าเดิม: ตอบกลับ = ""; // สร้างอาร์เรย์ถ่านเพื่อส่งไปยังบริดจ์: String temp_body4 = "{"on\": " + String(aan_restore) + ", \"bri\": " + String(bri_restore) + ", \"xy\": [" + String(x_restore) + ", " + String(y_restore) + "], \"transitiontime\": " + String(20) + "}"; int str_len4 = temp_body4.length() + 1; ถ่าน post_body4[str_len4]; temp_body4.toCharArray(post_body4, str_len4);// ตอนนี้เรามี post_body4 เป็นอาร์เรย์ถ่านแล้ว // โทรส่วนที่เหลือ: int statusCodePut4 = client.put("/api/YOUR HUE API USERNAME/lights/YOUR LIGHT NUMBER/state", post_body4, &response); ESP.deepSleep(0); //กำลังจะนอนอีกแล้ว…. } int getCurrentValues () ที่ไม่ได้ลงชื่อ { connectWifi ();// เชื่อมต่อการตอบสนอง Wifi ก่อน = ""; // โทรส่วนที่เหลือ: int statusCodeGet = client.get("/api/YOUR HUE API USERNAME/lights/YOUR LIGHT NUMBER", &response); Serial.print("รหัสสถานะจากเซิร์ฟเวอร์หลัง GET: "); Serial.println (statusCodeGet); Serial.print("เนื้อหาตอบกลับจากเซิร์ฟเวอร์: "); Serial.println (ตอบกลับ); StaticJsonBuffer jsonBuffer; // การแยกวิเคราะห์การตอบสนองของ Json // รูทของแผนผังอ็อบเจ็กต์ // // เป็นการอ้างอิงถึง JsonObject ไบต์จริงอยู่ภายใน // jsonBuffer กับโหนดอื่น ๆ ทั้งหมดของแผนผังวัตถุ // หน่วยความจำจะว่างเมื่อ jsonBuffer อยู่นอกขอบเขต JsonObject& root = jsonBuffer.parseObject (การตอบสนอง); JsonObject& state = root["state"];// ทดสอบว่าการแยกวิเคราะห์สำเร็จหรือไม่ ถ้า (!root.success()) { Serial.println ("parseObject() ล้มเหลว"); } // ดึงค่า aan_restore = state["on"]; Serial.println (aan_restore); bri_restore = รัฐ ["bri"]; x_restore = state["xy"][0]; y_restore = สถานะ["xy"][1]; first = false;} ถือเป็นโมฆะ connectWifi () {// การกำหนดค่าท้องถิ่นเมื่อธุรกิจเสร็จสิ้น ไม่จำเป็นต้องเก็บไว้รอบๆ WiFiManager wifiManager //รีเซ็ตการตั้งค่า - สำหรับการทดสอบ: //wifiManager.resetSettings(); //ตั้งค่าการโทรกลับที่ถูกเรียกเมื่อเชื่อมต่อกับ WiFi ก่อนหน้าล้มเหลว และเข้าสู่โหมดจุดเข้าใช้งาน wifiManager.setAPCallback(configModeCallback); //ดึงข้อมูล ssid และผ่านและพยายามเชื่อมต่อ //ถ้ามันไม่เชื่อมต่อ มันจะเริ่มต้นจุดเชื่อมต่อที่มีชื่อที่ระบุ //ที่นี่ "AutoConnectAP" //และเข้าสู่การวนรอบการบล็อกเพื่อรอการกำหนดค่าหาก (!wifiManager.autoConnect()) { Serial.println("ไม่สามารถเชื่อมต่อและกดหมดเวลา"); //รีเซ็ตแล้วลองใหม่อีกครั้ง หรืออาจจะทำให้หลับลึก ESP.reset(); ล่าช้า (1000); } //ถ้าคุณมาที่นี่ แสดงว่าคุณได้เชื่อมต่อกับ WiFi Serial.println("connected…yeey:)"); Serial.print("เชื่อมต่อกับ: "); Serial.println(WiFi. SSID()); Serial.print("ที่อยู่ IP:"); Serial.println(WiFi.localIP()); //ที่อยู่ IP ที่กำหนดให้กับ ESP (Wemos) ของคุณ // พิมพ์ความแรงของสัญญาณที่ได้รับ: long rssi = WiFi. RSSI(); Serial.print("ความแรงของสัญญาณ (RSSI):"); Serial.println(rssi); } เป็นโมฆะ configModeCallback (WiFiManager * myWiFiManager) { Serial.println ("เข้าสู่โหมดการกำหนดค่า"); Serial.println(WiFi.softAPIP()); // หากคุณใช้ SSID ที่สร้างโดยอัตโนมัติ ให้พิมพ์ Serial.println(myWiFiManager->getConfigPortalSSID()); }

แนะนำ: