ค้นหาโค้ด

บทเรียน ESP32 12/55 - โปรเจกต์แถบ RGB WS2812 4 ร่วมกับชุดเรียนรู้ IoT ESP32 ของ SunFounder

บทเรียน ESP32 12/55 - โปรเจกต์แถบ RGB WS2812 4 ร่วมกับชุดเรียนรู้ IoT ESP32 ของ SunFounder

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

SunFounder-ESP32-Lesson-12-LED-Strip.mp4_snapshot_00.02.422

การใช้ไมโครคอนโทรลเลอร์ 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 บนสายข้อมูลหากใช้แถบที่ยาว

คำแนะนำการเดินสายไฟ

ESP32-12-WS2812-wiring

ในการเดินสายไฟแถบ 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 ไฟไปมา

ภาพ

ESP32-12-WS2812-wiring
ESP32-12-WS2812-wiring
ESP32-12-WS2812-schematic
ESP32-12-WS2812-schematic
SunFounder-ESP32-Lesson-12-LED-Strip.mp4_snapshot_00.02.422
SunFounder-ESP32-Lesson-12-LED-Strip.mp4_snapshot_00.02.422
811-ESP32 Tutorial 12/55- Arduino code for WS2812 RGB LED stripe using ESP32
ภาษา: C++
#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
  }
}

สิ่งที่คุณอาจต้องการ

แหล่งข้อมูลและเอกสารอ้างอิง

ยังไม่มีทรัพยากรเลย

ไฟล์📁

ไม่มีไฟล์ที่พร้อมใช้งาน