สารบัญ:
- ขั้นตอนที่ 1: ฮาร์ดแวร์สำหรับ BLE-LED-Stick
- ขั้นตอนที่ 2: การประกอบอุปกรณ์อิเล็กทรอนิกส์
- ขั้นตอนที่ 3: วิธีสร้างแบบอักษร
- ขั้นตอนที่ 4: ซอฟต์แวร์ควบคุม BLE
- ขั้นตอนที่ 5: การทดสอบครั้งแรก
- ขั้นตอนที่ 6: เลือกแอนิเมชั่น
- ขั้นตอนที่ 7: การควบคุม RGB
- ขั้นตอนที่ 8: Text_Animation Service และ Persistent Storage Service
- ขั้นตอนที่ 9: เริ่มแอพ Android
- ขั้นตอนที่ 10: เขียนข้อความในรูปภาพ
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
คำแนะนำนี้แสดงวิธีสร้างแท่งไฟเขียนด้วยไฟ LED RGB ซึ่งสามารถควบคุมผ่าน BLE จากโทรศัพท์ของคุณ!
ตอนนี้ ฤดูมืดเริ่มต้นขึ้น และคุณต้องถ่ายภาพโดยเปิดรับแสงนาน: ด้วยแท่งไม้นี้ คุณสามารถเขียนลายเซ็นของคุณลงในรูปภาพ หรือคำพูดที่สร้างแรงบันดาลใจ หรือการประกาศความรัก รหัส QR ที่อยู่เว็บ หรืออีกมากมาย สิ่งอื่น…
ครอบคลุมหัวข้อการพัฒนาหลายหัวข้อ:
- การสร้างฮาร์ดแวร์
- การเขียนโปรแกรมชิปเซ็ต Cypress BLE ด้วย C
- สร้างแอปของคุณเองเพื่อควบคุม
ขั้นตอนที่ 1: ฮาร์ดแวร์สำหรับ BLE-LED-Stick
สำหรับแท่งคุณต้องมีสิ่งต่อไปนี้:
- โมดูล Cypress BLE (CY8C4247LQI-BL583)
- WS2812b RGB-LED-Strip (64LEDs จากแถบ 144Led ต่อเมตร)
- แบตเตอรี่ Li-Ion พร้อมตัวยึดที่เหมาะสม (18650)
- ปุ่มกด
- เขียงหั่นขนมชิ้นหนึ่ง
ฮาร์ดแวร์ของแท่งนั้นค่อนข้างง่าย
โมดูล Cypress BLE ติดตั้งอยู่บนเขียงหั่นขนมและไฟ LED ปุ่มและแหล่งจ่ายไฟเชื่อมต่อกับเขียงหั่นขนมนี้
ทุกอย่างถูกติดตั้ง ติดกาว หรือขันให้เป็นแผ่นไม้ชิ้นเล็กๆ ซึ่งส่วนหนึ่งถูกสอดเข้าไปในท่อโพลีอะคริลใสบางส่วน แต่นี่ไม่ใช่สิ่งที่จำเป็น ฉันต้องการติดตั้งทุกอย่างในหลอด แต่ฉันไม่พบโมดูล BLE และแบตเตอรี่ที่ค่อนข้างใหญ่เมื่อเปรียบเทียบกับ LED สำหรับช็อตแรกคุณไม่จำเป็นต้องใช้หลอดอะคริล
ขั้นตอนที่ 2: การประกอบอุปกรณ์อิเล็กทรอนิกส์
ขั้นตอนนี้แสดงวิธีการติดตั้งโมดูล BLE และพินที่ใช้เพื่อวัตถุประสงค์ใด
เช่นเดียวกับในหลายคำแนะนำของฉัน ฉันใช้ Cypress BLE Development Kit CY8CKIT-042-BLE คู่มือเริ่มต้นอย่างรวดเร็ว
หากคุณต้องการใช้งานโมดูลด้วยตัวเอง สิ่งที่คุณต้องทำคือเชื่อมต่อแหล่งพลังงานและพินที่ใช้แล้ว
สำหรับโครงการของเรา เราใช้พิน 3.5 เพื่อขับเคลื่อน LED-Strip เท่านั้น แต่แน่นอน คุณสามารถเปลี่ยนสิ่งนั้นได้ด้วย PSoC Creator
ดังที่คุณเห็นในภาพ PCB ฉันเพิ่มพินเฮดในทุกมุมของชิป แต่ฉันข้ามพิน VREF
วิธีนี้จะติดตั้งโมดูลอย่างถูกต้องและไม่สามารถเชื่อมต่อโมดูลผิดพลาดได้
ขั้นตอนที่ 3: วิธีสร้างแบบอักษร
ฉันคิดว่านี่เป็นหนึ่งในปัญหาที่น่าสนใจที่สุดที่ฉันแก้ไขในระหว่างโครงการนี้
แน่นอนว่าเราสามารถออกแบบฟอนต์ใหม่และเขียนลงในอาร์เรย์ได้ แต่นั่นก็ใช้ได้ผลจริงๆ!
แล้วฉันทำอะไรลงไป?
ฉันรู้ว่าฉันต้องการ ASCII เพื่อแปลง hex-bitmap และฉันโชคดีเพราะฉันไม่ใช่คนแรกที่มีปัญหานี้!:-)
ซอฟต์แวร์ "GLCD Font Generator" ทำสิ่งที่ถูกต้อง:
เนื่องจากฉันต้องการใช้แท่งไฟ LED ให้เกิดประโยชน์สูงสุด ฉันจึงนำเข้าแบบอักษรในขนาดที่ค่อนข้างใหญ่ (~32 พิกเซล) หากคุณใช้เฉพาะอักษรตัวพิมพ์ใหญ่ คุณไม่จำเป็นต้องสนใจเกี่ยวกับเครื่องหมายดอกจัน ซึ่งจะเพิ่มขนาดแบบอักษรที่มองเห็นได้ของคุณอีกสองสามพิกเซล แต่ฉันเลือกใช้ทั้งตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก (https://en.wikipedia.org/wiki/Ascender_%28typography%29)
เมื่อคุณนำเข้าแบบอักษรลงในตัวสร้างแบบอักษร GLCD คุณสามารถเลือกส่งออกในรูปแบบต่างๆ
ฉันพยายามส่งออกไปยังส่วนหัวโดยตรงซึ่งดี แต่ไม่สมบูรณ์แบบ ผลลัพธ์ที่ได้คืออาร์เรย์ shorts (16 บิต) ที่มีค่าไบต์-ฐานสิบหกสำหรับคอลัมน์สำหรับอักขระแต่ละตัวของอักขระ 128-ascii ตัวแรก ไม่ใช่สิ่งที่ฉันต้องการหรือจำเป็น…
ดังนั้นฉันจึงนำเข้าอาร์เรย์ลงในเวิร์กชีต calc ของ office แบบเปิด จากนั้นฉันก็ลบ "0x" ออกจากค่าสามในสี่ค่าและรวมเป็นค่ายาว 32 บิตหนึ่งค่า ฉันยังแก้ไข endianess ที่ไม่ถูกต้องของแต่ละไบต์
อาร์เรย์ที่เป็นผลลัพธ์คืออาร์เรย์ N*M ของค่า 32 บิต M คืออักขระตามลำดับ และ N คือคอลัมน์ที่แสดงตัวอักษรนี้ ในฉบับร่างแรกนี้ อักขระทั้งหมดมีจำนวนคอลัมน์เท่ากัน ซึ่งหมายความว่าตัวอักษรทั้งหมดมีความกว้างเท่ากัน เช่นเดียวกับแบบอักษร Courier ที่รู้จักกันดี อักขระขนาดเล็กเช่น "i" หรือ "t" ดูเหมือนหายไปในอวกาศ
ดังนั้นฉันจึงเพิ่มพารามิเตอร์ใหม่ในตอนต้นของอักขระแต่ละตัวเพื่อบอกว่าอักขระนี้มีคอลัมน์เท่าใด หรืออักขระนี้กว้างเพียงใด ช่วยประหยัดหน่วยความจำและทำให้ข้อความดูดีขึ้น!
ขั้นตอนที่ 4: ซอฟต์แวร์ควบคุม BLE
หลักการของซอฟต์แวร์ BLE นั้นง่ายมาก:
- ตอนแรกก็ไม่ได้ทำอะไรเลย
- ผ่าน BLE คุณสามารถตั้งค่าภาพเคลื่อนไหวหรือข้อความต่างๆ ที่จะแสดงได้
- เมื่อคุณกดปุ่ม ระบบจะแสดงแต่ละคอลัมน์ของภาพเคลื่อนไหวหรือข้อความ
- หลังจากแสดงข้อความแล้ว จะรออีกครั้ง
เพียงนำเข้าโปรเจ็กต์ไซเปรสไปยัง PSoC-Creator ของคุณแล้วแก้ไขหากต้องการ
PSoC-4 มี RAM และแฟลชไม่มากนักเพื่อให้สามารถเก็บภาพ RGB ของแบบอักษรได้อย่างสมบูรณ์ ดังนั้นฉันจึงต้องการวิธีสร้างเนื้อหา LED แบบไดนามิกจากข้อความ นั่นค่อนข้างตรงไปตรงมา ไม่มีอะไรพิเศษจนถึงตอนนี้ จากข้อความที่มีตัวอักษรหลายตัว อัลกอริทึมจะใช้ตัวอักษรหนึ่งตัวและแปลงเป็นอาร์เรย์บิตแมปขาวดำ จากนั้นจะใช้แต่ละคอลัมน์ของหนึ่งบิตแมปนี้และแทนที่จะเป็นสีขาว มันจะเขียนสี RGB ปัจจุบันไปยังอาร์เรย์ LED ด้วยวิธีนี้ คุณสามารถสร้างข้อความสีเดียวหรือโดยฟังก์ชันเพิ่มเติม เปลี่ยนสีหลังแต่ละคอลัมน์ ตัวอักษรแต่ละตัว หรือแม้แต่หลังแต่ละพิกเซล
"จดหมาย" สามารถจัดเก็บในตัวแปรไบต์เดียวในขณะที่ต้องเก็บบิตแมปขาวดำในอาร์เรย์บางประเภท
โครงสร้างข้อมูลคือ:
สตริง: newtext = "สวัสดี";
แบบอักษร: uint32 อักขระ = { FirstCharacter_ColumnCount, FirstCharacter_FirstColumn, FirstCharacter_SecondColumn, … SecondCharacter_ColumnCount, SecondCharacter_FirstColumn, … … LastCharacter_ColumnCount, … LastCharacter_LastColumn }; สี: uint32 rgbcolor = 0xHHBBGGRR; // ความสว่าง, น้ำเงิน, เขียว, แดง โดยแต่ละค่าเป็น 8 บิต
ในการแปลงสตริงสำหรับการแสดงผล เราทำดังต่อไปนี้:
getCharacter(): H (8 บิต)
getColumn(int i): คอลัมน์ (32 บิต) (ฉันเริ่มต้นด้วยคอลัมน์แรก รันจนถึงคอลัมน์สุดท้าย) ถ้า (บิตในคอลัมน์คือ 1) LED ใน Strip ถูกตั้งค่าเป็นสี LED-Strip Array เป็น LED 64 ดวงพร้อมสี 32 บิตแต่ละสี!
และถ้าคอลัมน์นี้แสดงขึ้น เราจะดำเนินการต่อไปในคอลัมน์ถัดไป
มันง่ายอย่างนี้
ขั้นตอนที่ 5: การทดสอบครั้งแรก
เมื่อซอฟต์แวร์ทำงาน เราก็พร้อมสำหรับการทดสอบครั้งแรก
วิธีที่ง่ายที่สุดในการทดสอบฟังก์ชันฝังตัวคือการใช้แอปทดสอบบลูทูธพลังงานต่ำ เช่นเดียวกับแอปนอร์ดิกหรือไซเปรส
นอร์ดิก: nRF Connect for Mobile
ไซเปรส: CySmart
เริ่ม Pov-Stick และสังเกตว่าจะแสดงสตริงสาธิตอย่างไร เมื่อเสร็จแล้วก็ถึงเวลาเริ่มต้นแอป ค้นหาอุปกรณ์ Povstick และคลิกเชื่อมต่อ
เมื่อสร้างการเชื่อมต่อแล้ว แอปจะค้นหาบริการและคุณลักษณะที่กำหนดไว้ทั้งหมดโดยอัตโนมัติ
มองหาบริการแรก (ควรเริ่มต้นด้วย 0000ccce…) คลิกเพื่อเปิดและแสดงคุณสมบัติแรก (เริ่มต้นด้วย 0000ccc1) จากนั้นกดปุ่มเขียน (หรืออัปโหลด) และเขียน 01 ให้กับคุณลักษณะนี้
เมื่อคุณกดส่ง POVstick จะเริ่มแอนิเมชั่น Color-Knight-rider aka Larson Scanner ด้วยการเปลี่ยนสี
ขอแสดงความยินดีที่คุณส่งค่าแรกของคุณผ่าน BLE!
ขั้นตอนที่ 6: เลือกแอนิเมชั่น
ในซอฟต์แวร์ เราได้กำหนด enum "e_Animation" ด้วยค่าต่อไปนี้:
typedef enum { Knightrider = 0, ColorKnightRider, Rainbowswirl, Valueswirl, WS_CandyCane, WS_CandyCane_2, WS_CandyCane_3, WS_Twinkle, WS_Icicle, WS_ColorWheel, RGB_Control, TextAnimation, Animation_Maxation } e_Animation
ค่าเหล่านี้เป็นค่าที่ถูกต้องสำหรับคุณลักษณะ ccc1 หากคุณต้องการดู CandyCane-Animation คุณต้องเขียน 4, 5 หรือ 6 ให้กับคุณลักษณะนี้ พวกเขาแตกต่างกันในสี
แอนิเมชั่นพิเศษสองแบบคือ RGB_Control และ TextAnimation หากคุณเลือกเปิดใช้งานสิ่งเหล่านี้ แท่งไม้จะไม่แสดงอะไรเลยในตอนแรก แต่มีตัวเลือกเพิ่มเติมให้คุณควบคุมบริการอื่นๆ
ขั้นตอนที่ 7: การควบคุม RGB
RGB-Control สามารถทดสอบได้ง่ายมากด้วย CySmart App เพราะฉันใช้ UUID เดียวกันสำหรับคุณลักษณะนี้เช่นเดียวกับใน Cypress Demo
เริ่มแอป CySmart และเชื่อมต่อกับ Povstick ก่อนอื่น คุณต้องเขียน "0x0A" ไปที่คุณลักษณะ ccc1
0x0A คือค่าฐานสิบหกสำหรับ 10 ซึ่งเป็นแอนิเมชั่น RGB-Control ใน enum
จากนั้นคุณสามารถเปลี่ยนไปใช้แผงควบคุม RGB-LED ในแอป CySmart บางทีคุณอาจต้องรีสตาร์ทแอปเพื่อไปที่หน้าจอนี้ จากนั้น คุณสามารถควบคุมสีของไฟ LED ทั้งหมดด้วยไดอะแกรม RGB นี้
แน่นอน คุณสามารถเขียนค่าลงในคุณลักษณะได้โดยตรง
ขั้นตอนที่ 8: Text_Animation Service และ Persistent Storage Service
บริการเหล่านี้ไม่ใช่เรื่องง่ายที่จะทดสอบ
ในทางเทคนิคแล้ว คุณยังสามารถใช้แอปนอร์ดิกสำหรับสิ่งนี้ได้ แต่คุณจำเป็นต้องรู้ว่าควรเขียนค่าใดถึงคุณลักษณะใด
ดังนั้นหากคุณต้องการทดสอบสิ่งเหล่านี้ คุณควรดูที่โครงการ PSoC ซึ่งมีลักษณะเฉพาะที่มี UUID
สิ่งสำคัญคือคุณลักษณะ "Set-Speed" ด้วยคุณสมบัตินี้ คุณสามารถควบคุมความเร็วของแอนิเมชั่นได้
ด้วยคุณลักษณะ "Set_Animation" ของ PersistentStorageService คุณสามารถควบคุมแบบอักษรและสีของสตริงข้อความได้ ค่าที่ถูกต้องถูกกำหนดใน "povanimation.h" สองแบบอักษร "mono" และ "serif" และสีเดียวและสีรุ้ง ค่า 0 และ 1 จะแสดงข้อความด้วยสีคงที่ ซึ่งสามารถควบคุมได้ผ่านคุณสมบัติ RGB_Control ค่า 2 และ 3 เปลี่ยนสีสำหรับแต่ละคอลัมน์และทำให้สตริงมีสายรุ้งที่สวยงาม
"Write_Text_Service" นั้นแตกต่างออกไป คุณสามารถเขียนสตริงใหม่ไปยังอุปกรณ์โดยการเขียนอักขระแต่ละตัวไปที่คุณลักษณะ "Set_Character" ในการเขียนแต่ละครั้ง คุณจะได้รับการแจ้งเตือนกลับถึงความยาวปัจจุบันของสตริง
ในการเริ่มสตริงใหม่ ให้เขียน "true" ถึง "Clear_String"
นี่ไม่ใช่การใช้งานที่ดีที่สุด แต่ใช้ได้กับสตริงใดๆ ที่มีอักขระไม่เกิน 250 ตัวโดยไม่ต้องเปลี่ยนขนาด MTU
การแสดงสตริงใหม่พร้อมการเริ่มต้นเมื่อกดปุ่มบน Povstick
ขั้นตอนที่ 9: เริ่มแอพ Android
นี่เป็นขั้นตอนที่สำคัญ แต่อยู่นอกเหนือขอบเขตของคำแนะนำนี้ ขอโทษสำหรับสิ่งนั้น!
บางทีฉันอาจอัปโหลดแอปทดสอบของฉันไปที่ play store แต่ยังไม่เสร็จสิ้นหรือเผยแพร่ไม่ได้
ขั้นตอนที่ 10: เขียนข้อความในรูปภาพ
นี่คือเหตุผลที่ฉันสร้าง povstick นี้ตั้งแต่แรก: เพื่อเขียนข้อความในรูป
คุณต้องมีขาตั้งกล้อง กล้องที่มีฟังก์ชั่นเปิดรับแสงนาน และตำแหน่งที่ดี
ตั้งค่ากล้องและปรับเวลาเปิดรับแสงเป็น 10 วินาทีสำหรับการทดสอบครั้งแรก
กระตุ้นการปล่อยและเริ่มเดินผ่านภาพโดยเริ่มแสดงข้อความบนไม้เท้า
Et Voila เราอยู่ที่นั่น!
ด้วยการผสมผสานที่ลงตัวระหว่างความสว่าง LED รูรับแสง และเวลาเปิดรับแสง คุณจึงสามารถถ่ายภาพในยามเช้าได้
ภาพสามภาพในขั้นตอนนี้แสดงความเป็นไปได้ทั้งหมด
ในขั้นแรก ไฟ LED จะเปิดรับแสงมากเกินไปและสร้างแสงที่น่าอัศจรรย์ แต่นั่นเป็นเหตุผลว่าทำไมเงาสะท้อนบนพื้นจึงมองเห็นได้และแบ็คกราวด์ก็ค่อนข้างดี
ภาพที่สองถูกเปิดเผยสำหรับ LED แต่นั่นทำให้พื้นหลังเป็นสีดำสนิท
และอันที่สามแสดงไฟ LED ที่ค่อนข้างสลัวหลังจากพระอาทิตย์ตกดินไม่นาน ไฟ LED สว่างเหมือนในภาพอื่นๆ แต่สภาพแวดล้อมนั้นสว่างมากจนฉันต้องใช้รูรับแสงต่ำและ ISO ต่ำ เพื่อให้ไฟ LED ดูค่อนข้างมืด
รางวัลที่สองในการประกวด Make it Glow 2018