โปรเจกต์นี้จะเปลี่ยนบอร์ดควบคุมราคาประหยัดธรรมดาให้เป็นตัวควบคุมไฟ RGB แบบไร้สายที่คุณสามารถควบคุมได้โดยตรงจากโทรศัพท์ของคุณ — ไม่ต้องใช้อุปกรณ์เสริมเฉพาะแอปพลิเคชัน ไม่ต้องใช้โมดูลไร้สายเพิ่มเติม คุณจะเชื่อมต่อผ่าน Bluetooth Low Energy (BLE) ส่งค่าสีหรือความสว่างจากแอปบนโทรศัพท์ และดูแถบ LED จริงตอบสนองแบบเรียลไทม์
ตัวควบคุมทำอะไรได้บ้าง
ESP32-C3 เป็นสมองของโปรเจกต์ทั้งหมด และเหมาะสมอย่างยิ่งด้วยเหตุผลเฉพาะ: มันมี Bluetooth 5 (BLE) ในตัวชิปโดยตรง ไม่ต้องมีโมดูล Bluetooth แยกต่างหากเพื่อเดินสายหรือกำหนดค่า — บอร์ดเดียวกันที่รันโปรแกรมของคุณยังจัดการวิทยุไร้สายอีกด้วย หน้าที่ของตัวควบคุมมีสามประการ: โฆษณาตัวเองผ่าน BLE เพื่อให้โทรศัพท์ค้นหาได้, ฟังค่าที่เข้ามาที่เขียนไปยัง BLE characteristic, และแปลค่าเหล่านั้นเป็นคำสั่งสำหรับแถบ LED
แถบ LED ทำอะไรได้บ้าง
แถบ WS2812B เป็นแถบ LED RGB ที่สามารถระบุตำแหน่งแต่ละดวงได้ — LED แต่ละดวงมีชิปไดรเวอร์ขนาดเล็กในตัว ดังนั้นตัวควบคุมจึงสามารถตั้งค่า LED แต่ละดวงให้มีสีของตัวเองได้ แทนที่จะส่องสว่างทั้งแถบด้วยสีเดียว ข้อมูลทั้งหมดจะถูกส่งผ่านสายข้อมูลเส้นเดียว, สตรีมบิตเดียว, ตามลำดับ, จาก LED ดวงแรกไปจนถึงดวงสุดท้าย
Buck Converter ทำอะไรได้บ้าง
หน้าที่ของ LM2596 buck converter ที่นี่เกี่ยวกับพลังงานล้วนๆ ไม่ใช่ข้อมูล แถบที่มี LED จำนวนมากสว่างพร้อมกันสามารถดึงกระแสไฟได้มากกว่าที่ตัวควบคุมบนบอร์ดจะสามารถจ่ายได้ — ตัวควบคุมนั้นมีขนาดสำหรับตรรกะของตัวควบคุมเอง ไม่ใช่สำหรับขับเคลื่อนแถบ LED Buck converter จะลดแรงดันและจ่ายกระแสไฟที่สะอาดและเพียงพอให้กับแถบ LED บนเส้นทางพลังงานเฉพาะของตัวเอง แยกจากพลังงานตรรกะของตัวควบคุม ดังนั้นแถบจึงได้รับสิ่งที่ต้องการโดยไม่ทำให้ตัวควบคุมขาดพลังงานหรือดับ
BLE เชื่อมต่อโทรศัพท์กับตัวควบคุมได้อย่างไร
ในระดับง่ายๆ: ESP32 จะโฆษณา "บริการ" BLE ที่มี "คุณสมบัติ" หนึ่งอย่างหรือมากกว่า — ลองนึกถึงคุณสมบัติว่าเป็นกล่องจดหมายขนาดเล็กที่มีชื่อที่ตัวควบคุมกำลังเฝ้าดูอยู่ แอปบนโทรศัพท์จะสแกนหาอุปกรณ์, เชื่อมต่อ, และเขียนค่าลงในกล่องจดหมายนั้น — ตัวอย่างเช่น, สีเป็นสามไบต์ RGB, หรือไบต์ความสว่างเดียว โค้ดของตัวควบคุมเพียงแค่รอให้กล่องจดหมายนั้นเปลี่ยนแปลง; เมื่อเป็นเช่นนั้น, มันจะอ่านค่าใหม่และอัปเดตสิ่งที่ส่งไปยังแถบ LED ไม่จำเป็นต้องมีวงจรการสำรวจบนฝั่งโทรศัพท์และไม่จำเป็นต้องประดิษฐ์โปรโตคอลไร้สายที่กำหนดเอง — BLE จะจัดการการเชื่อมต่อและการจัดส่ง, โค้ดของคุณเพียงแค่ตัดสินใจว่าจะทำอะไรกับไบต์ที่ได้รับ
แนวคิดซอฟต์แวร์และไลบรารี
คุณจะใช้ประโยชน์จากไลบรารีสองตัวที่แยกจากกันและเป็นที่ยอมรับอย่างดีที่นี่: ไลบรารีเซิร์ฟเวอร์ BLE เพื่อจัดการการโฆษณาและเหตุการณ์การอ่าน/เขียนลักษณะเฉพาะ และไลบรารี LED ที่สามารถระบุตำแหน่งได้เพื่อจัดการโปรโตคอลข้อมูลและเวลาของแถบ รักษาข้อกังวลทั้งสองให้แยกจากกันในโค้ดของคุณ — ฟังก์ชันเรียกกลับ BLE ที่เพียงแค่จัดเก็บค่าที่เข้ามา และลูปหลัก (หรือเรียกกลับที่สอง) ที่ใช้ค่าที่จัดเก็บปัจจุบันกับแถบ ทำให้แต่ละไลบรารีทำงานได้ด้วยตัวเองด้วยค่าทดสอบที่ฮาร์ดโค้ดก่อนที่จะนำมารวมกัน
การทดสอบและการแก้ไขปัญหา
โทรศัพท์ไม่สามารถค้นหาหรือเชื่อมต่อกับอุปกรณ์ได้ — ตรวจสอบให้แน่ใจว่าโค้ดโฆษณา BLE กำลังทำงานอยู่จริง และชื่ออุปกรณ์/UUID บริการในโค้ดของคุณตรงกับสิ่งที่แอปของคุณกำลังสแกนหา
ไฟ LED ไม่ตอบสนองแม้ว่าโทรศัพท์จะแสดงว่า "เชื่อมต่อแล้ว" — ตรวจสอบการเดินสายของพินข้อมูลของแถบ LED ก่อน จากนั้นยืนยันความเข้ากันได้ของระดับตรรกะระหว่างเอาต์พุตของตัวควบคุมและอินพุตข้อมูลของแถบ
สี LED ออกมาผิด — ตัวอย่างเช่น สีแดงแสดงเป็นสีเขียว — นี่เป็นข้อผิดพลาดทั่วไปของ WS2812B: การตั้งค่าลำดับสีไม่ตรงกัน (RGB เทียบกับ GRB) ในไลบรารี LED ตรวจสอบการตั้งค่านั้นก่อนที่จะสันนิษฐานว่าเกิดความผิดปกติของฮาร์ดแวร์
การเชื่อมต่อหลุดบ่อยครั้งหรือค่ามาถึงแต่ดูเหมือนจะล่าช้า — ยืนยันว่าคุณไม่ได้บล็อกการเรียกกลับ BLE ด้วยโค้ดที่ช้า (เช่น การหน่วงเวลานาน) ภายในตัวจัดการการเขียนเอง; ทำให้ตัวจัดการนั้นทำงานเร็วและปล่อยให้ลูปหลักทำงานที่หนักกว่า
การอัปเกรดในอนาคต (ทางเลือก): โซนแสงหลายโซน
เมื่อการควบคุมสีและความสว่างของแถบเดียวมั่นคงแล้ว ขั้นตอนต่อไปคือการระบุช่วงย่อยของแถบเดียวกันเป็นโซนอิสระ — การส่งดัชนีโซนพร้อมกับค่าสีผ่าน BLE และอัปเดตเฉพาะส่วนนั้นของแถบในโค้ด — โดยไม่ต้องเพิ่มฮาร์ดแวร์ใหม่ใดๆ