บทเรียน ESP32 12/55 - โปรเจกต์แถบ RGB WS2812 4 ร่วมกับชุดเรียนรู้ IoT ESP32 ของ SunFounder
ในบทช่วยสอนนี้ เราจะสำรวจวิธีการควบคุมแถบ LED WS2812 โดยใช้ไมโครคอนโทรลเลอร์ ESP32 โปรเจกต์นี้ช่วยให้คุณสร้างสีต่างๆ ได้หลากหลายและควบคุม LED แต่ละดวงได้อย่างอิสระ ซึ่งเป็นวิธีที่สนุกและน่าดึงดูดสายตาในการเรียนรู้เกี่ยวกับการเขียนโปรแกรมและอิเล็กทรอนิกส์ เมื่อจบบทช่วยสอนนี้ คุณจะมีการตั้งค่าที่ทำงานได้อย่างสมบูรณ์ซึ่งสามารถเปลี่ยนสีและรูปแบบได้อย่างไดนามิก
การใช้ไมโครคอนโทรลเลอร์ ESP32 จาก SunFounder ซึ่งมีคุณสมบัติ Wi-Fi และ Bluetooth ในตัว เราสามารถเชื่อมต่อและควบคุมแถบ LED RGB WS2812 ได้อย่างง่ายดาย ความยืดหยุ่นของแถบ LED นี้ช่วยให้สามารถนำไปประยุกต์ใช้ได้อย่างสร้างสรรค์ ไม่ว่าจะเป็นไฟตกแต่งหรือโปรเจกต์เพื่อการศึกษา เพื่อความเข้าใจที่ดีขึ้นเกี่ยวกับขั้นตอนต่างๆ คุณสามารถดูวิดีโอได้ที่ (ในวิดีโอที่ 00:00)
อธิบายฮาร์ดแวร์
ส่วนประกอบหลักสำหรับโปรเจกต์นี้ประกอบด้วยไมโครคอนโทรลเลอร์ ESP32 และแถบ LED WS2812 ESP32 เป็นไมโครคอนโทรลเลอร์ที่ทรงพลังซึ่งสามารถทำงานคล้ายกับ Arduino แต่มีตัวเลือกการเชื่อมต่อเพิ่มเติม มีชุดคุณสมบัติที่หลากหลายที่ช่วยให้สามารถเชื่อมต่อกับคลาวด์ได้ ทำให้สามารถควบคุมระยะไกลและบันทึกข้อมูลได้
แถบ LED WS2812 ประกอบด้วย LED RGB ที่สามารถระบุตำแหน่งได้ทีละดวง ซึ่งหมายความว่า LED แต่ละดวงสามารถควบคุมให้แสดงสีที่แตกต่างกันได้ แถบนี้ทำงานบนโปรโตคอลสายเดียว ทำให้สามารถต่อ LED หลายดวงเป็นลูกโซ่ได้โดยไม่สูญเสียคุณภาพสัญญาณ LED แต่ละดวงมีไดรเวอร์ในตัวที่รับสัญญาณอินพุตและขยายสัญญาณสำหรับ LED ตัวถัดไปในสายโซ่
รายละเอียดจาก Datasheet
| ผู้ผลิต | Worldsemi |
|---|---|
| หมายเลขชิ้นส่วน | WS2812 |
| แรงดันไฟฟ้าลอจิก/IO | 3.5–5.3 V |
| แรงดันไฟฟ้าจ่าย | 5 V |
| กระแสเอาต์พุต (ต่อช่อง) | สูงสุด 20 mA |
| กระแสสูงสุด (ต่อช่อง) | สูงสุด 60 mA |
| คำแนะนำความถี่ PWM | 400 Hz |
| เกณฑ์ลอจิกอินพุต | 0.3 x VDD ถึง 0.7 x VDD |
| แรงดันตก / RDS(on) / อิ่มตัว | สูงสุด 0.5 V |
| ขีดจำกัดความร้อน | -25 ถึง 80 °C |
| แพ็คเกจ | 5050 |
| หมายเหตุ / รุ่นต่างๆ | สามารถต่อเป็นลูกโซ่สำหรับแถบที่ยาวขึ้นได้ |
- ตรวจสอบให้แน่ใจว่าแหล่งจ่ายไฟเพียงพอ (5 V) เพื่อหลีกเลี่ยงความเสียหายต่อ LED
- ใช้ตัวเก็บประจุ (100 µF) ข้ามขั้วแหล่งจ่ายไฟเพื่อปรับแรงดันไฟฟ้ากระเพื่อมให้เรียบ
- รักษาสายข้อมูลให้สั้นเพื่อลดการเสื่อมคุณภาพของสัญญาณ
- ระวังอุณหภูมิของ LED ตรวจสอบให้แน่ใจว่ามีการระบายความร้อนที่เหมาะสม
- สังเกตขั้วที่ถูกต้องเมื่อเชื่อมต่อไฟและกราวด์
- ใช้ตัวต้านทาน pull-up บนสายข้อมูลหากใช้แถบที่ยาว
คำแนะนำการเดินสายไฟ

ในการเดินสายไฟแถบ LED WS2812 เข้ากับ ESP32 ให้เริ่มต้นด้วยการเชื่อมต่อแหล่งจ่ายไฟ สาย +5V จากแถบ LED ควรเชื่อมต่อกับพิน 5V บน ESP32 และสายกราวด์ (GND) ควรเชื่อมต่อกับพิน GND ตัวใดตัวหนึ่งบน ESP32
จากนั้น เชื่อมต่อสายอินพุตข้อมูลจากแถบ LED เข้ากับพิน 14 บน ESP32 ตรวจสอบให้แน่ใจว่าการเชื่อมต่อแน่นหนาเพื่อให้การส่งข้อมูลถูกต้อง หากคุณใช้หลายแถบหรือระยะทางที่ไกลขึ้น ให้พิจารณาใช้ level shifter เพื่อให้แน่ใจว่าสัญญาณมีความสมบูรณ์ การตั้งค่านี้จะช่วยให้คุณควบคุมแถบ LED ได้โดยตรงจาก ESP32
ตัวอย่างโค้ดและคำอธิบาย
โค้ดใช้ไลบรารี Adafruit NeoPixel เพื่อควบคุมแถบ LED WS2812 โดยเริ่มต้นด้วยการเริ่มต้นแถบ LED และตั้งค่าสีเริ่มต้นเป็นสีดำ ตัวระบุสำคัญในโค้ดประกอบด้วย LED_PIN ซึ่งกำหนดพินที่เชื่อมต่อกับสายข้อมูลของแถบ LED และ NUM_LEDS ซึ่งระบุจำนวน LED ในแถบ
#include // รวมไลบรารี Adafruit NeoPixel
#define LED_PIN 14 // แถบ LED NeoPixel
#define NUM_LEDS 8 // จำนวน LED
ในฟังก์ชัน setup แถบจะถูกเริ่มต้นโดยใช้ strip.begin() และตั้งค่าสีเริ่มต้นเป็นสีดำด้วย strip.show() ซึ่งเตรียมแถบสำหรับการเปลี่ยนสีเมื่อโปรแกรมทำงาน
void setup() {
strip.begin(); // เริ่มต้นแถบ NeoPixel
strip.show(); // ตั้งค่าสีเริ่มต้นเป็นสีดำ
}
ลูปหลักของโปรแกรมประกอบด้วยลูป for สองลูป ลูปแรกจะเปิด LED ทีละดวงโดยการตั้งค่าสีและอัปเดตแถบ ลูปที่สองจะปิด LED ทีละดวงในลักษณะเดียวกัน ซึ่งสร้างแอนิเมชันแสงที่เรียบง่ายแต่มีประสิทธิภาพ
void loop() {
// เปิด LED ทีละดวง
for (int i = 0; i < NUM_LEDS; i++) {
strip.setPixelColor(i, 100, 45, 0); // ตั้งค่าสีของ LED ดวงที่ i เป็นสีแดง
strip.show(); // อัปเดตแถบ LED ด้วยสีใหม่
delay(100); // รอ 100 มิลลิวินาที
}
// ปิด LED ทีละดวง
for (int i = 0; i < NUM_LEDS; i++) {
strip.setPixelColor(i, 0, 0, 0); // ตั้งค่าสีของ LED ดวงที่ i เป็นสีดำ (ปิด)
strip.show(); // อัปเดตแถบ LED ด้วยสีใหม่
delay(100); // รอ 100 มิลลิวินาที
}
}
ดูการโหลดโค้ดทั้งหมดด้านล่างบทความเพื่อดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการใช้เอฟเฟกต์สีและแอนิเมชันต่างๆ
การสาธิต / สิ่งที่คาดหวัง
เมื่อคุณได้เดินสายไฟและอัปโหลดโค้ดเรียบร้อยแล้ว คุณควรเห็นไฟ LED บนแถบไฟสว่างขึ้นทีละดวงในสีที่กำหนด ตามด้วยการดับลงในลำดับเดียวกัน ซึ่งจะสร้างเอฟเฟกต์ "ไฟวิ่ง" หากไฟ LED ไม่สว่างตามที่คาดไว้ ให้ตรวจสอบการเชื่อมต่อสายไฟอีกครั้งและตรวจสอบให้แน่ใจว่าแหล่งจ่ายไฟเพียงพอ นอกจากนี้ ตรวจสอบว่ามีการกำหนดพินที่ถูกต้องในโค้ด (ในวิดีโอที่ 12:30)
ไทม์สแตมป์ของวิดีโอ
- 00:00 เริ่มต้น
- 1:40 แนะนำ WS2812 LED
- 7:25 หน้าเอกสารโครงการ
- 9:16 อธิบายสี RGB
- 13:16 อธิบายการเดินสายไฟ
- 13:48 อธิบาย Arduino Code-1
- 19:03 การเลือกบอร์ด ESP32 และพอร์ตใน Arduino IDE
- 20:45 สาธิต Code-1
- 22:00 การควบคุม LED แต่ละดวง
- 24:16 ไฟ LED แบบเดิน
- 25:41 ไฟไปมา
#include <Adafruit_NeoPixel.h> // Include the Adafruit NeoPixel library
#define LED_PIN 14 // NeoPixel LED strip
#define NUM_LEDS 8 // Number of LEDs
// Create an instance of the Adafruit_NeoPixel class
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
strip.begin(); // Initialize the NeoPixel strip
strip.show(); // Set initial color to black
}
void loop() {
// Turn on LEDs one by one
for (int i = 0; i < NUM_LEDS; i++) {
strip.setPixelColor(i, 100, 45, 0); // Set the color of the i-th LED to red
strip.show(); // Update the LED strip with the new colors
delay(100); // Wait for 100 milliseconds
}
// Turn off LEDs one by one
for (int i = 0; i < NUM_LEDS; i++) {
strip.setPixelColor(i, 0, 0, 0); // Set the color of the i-th LED to black (turn it off)
strip.show(); // Update the LED strip with the new colors
delay(100); // Wait for 100 milliseconds
}
}
Common Course Links
Common Course Files
สิ่งที่คุณอาจต้องการ
-
อเมซอน
-
อีเบย์
-
อาลีเอ็กซ์เพรสPurchase WS2812 LED strip from AliExpresss.click.aliexpress.com
-
อาลีเอ็กซ์เพรสPurchase WS2812 LED strip from AliExpress-2s.click.aliexpress.com
-
แบงกูดPurchase WS2812 LED strip from Banggoodbanggood.com
แหล่งข้อมูลและเอกสารอ้างอิง
ยังไม่มีทรัพยากรเลย
ไฟล์📁
ไม่มีไฟล์ที่พร้อมใช้งาน