Tìm kiếm mã

Hướng dẫn ESP32 12/55 - Dự án 4 Dải đèn RGB WS2812 với bộ học IoT ESP32 của SunFounder

Hướng dẫn ESP32 12/55 - Dự án 4 Dải đèn RGB WS2812 với bộ học IoT ESP32 của SunFounder

Trong hướng dẫn này, chúng ta sẽ khám phá cách điều khiển dải đèn LED WS2812 bằng vi điều khiển ESP32. Dự án này cho phép bạn tạo ra nhiều màu sắc khác nhau và điều khiển từng đèn LED riêng lẻ, mang lại một cách thú vị và trực quan để học về lập trình và điện tử. Đến cuối hướng dẫn, bạn sẽ có một thiết lập hoạt động hoàn chỉnh có thể thay đổi màu sắc và mẫu hiển thị một cách linh hoạt.

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

Sử dụng vi điều khiển ESP32 từ SunFounder, có tích hợp khả năng Wi-Fi và Bluetooth, chúng ta có thể dễ dàng kết nối và điều khiển dải đèn LED RGB WS2812. Tính linh hoạt của dải đèn LED này cho phép tạo ra nhiều ứng dụng sáng tạo, dù là cho chiếu sáng trang trí hay các dự án giáo dục. Để hiểu rõ hơn về các bước thực hiện, bạn có thể tham khảo video tại (trong video ở 00:00).

Giải thích về Phần cứng

Các thành phần chính cho dự án này bao gồm vi điều khiển ESP32 và dải đèn LED WS2812. ESP32 là một vi điều khiển mạnh mẽ có thể thực hiện các tác vụ tương tự như Arduino, nhưng có thêm các tùy chọn kết nối. Nó có một bộ tính năng phong phú cho phép kết nối với đám mây, cho phép điều khiển từ xa và ghi dữ liệu.

Dải đèn LED WS2812 bao gồm các đèn LED RGB có thể định địa chỉ riêng lẻ, nghĩa là mỗi đèn LED có thể được điều khiển để hiển thị các màu sắc khác nhau. Dải đèn hoạt động trên giao thức một dây, cho phép nhiều đèn LED được nối tiếp nhau mà không làm giảm chất lượng tín hiệu. Mỗi đèn LED chứa một bộ điều khiển tích hợp nhận tín hiệu đầu vào và khuếch đại nó cho đèn LED tiếp theo trong chuỗi.

Chi tiết Datasheet

Nhà sản xuất Worldsemi
Số bộ phận WS2812
Điện áp Logic/IO 3.5–5.3 V
Điện áp cung cấp 5 V
Dòng điện đầu ra (mỗi kênh) 20 mA tối đa
Dòng điện đỉnh (mỗi kênh) 60 mA tối đa
Hướng dẫn tần số PWM 400 Hz
Ngưỡng logic đầu vào 0.3 x VDD đến 0.7 x VDD
Sụt áp / RDS(on) / bão hòa 0.5 V tối đa
Giới hạn nhiệt độ -25 đến 80 °C
Kiểu đóng gói 5050
Ghi chú / biến thể Có thể nối tiếp để tạo dải dài hơn

 

  • Đảm bảo nguồn điện phù hợp (5 V) để tránh hỏng đèn LED.
  • Sử dụng tụ điện (100 µF) trên các đầu nguồn điện để làm mịn các xung điện áp.
  • Giữ dây dữ liệu ngắn để giảm suy giảm tín hiệu.
  • Cẩn thận với nhiệt độ của đèn LED; đảm bảo tản nhiệt thích hợp.
  • Quan sát đúng cực tính khi kết nối nguồn và đất.
  • Sử dụng điện trở kéo lên trên đường dữ liệu nếu sử dụng dải dài.

Hướng dẫn Đấu dây

ESP32-12-WS2812-wiring

Để đấu dây dải đèn LED WS2812 với ESP32, hãy bắt đầu bằng cách kết nối nguồn điện. Dây +5V từ dải đèn LED nên được kết nối với chân 5V trên ESP32, và dây nối đất (GND) nên được kết nối với một trong các chân GND trên ESP32.

Tiếp theo, kết nối dây đầu vào dữ liệu từ dải đèn LED với chân 14 trên ESP32. Đảm bảo các kết nối chắc chắn để đảm bảo truyền dữ liệu chính xác. Nếu bạn sử dụng nhiều dải hoặc khoảng cách dài hơn, hãy cân nhắc sử dụng bộ dịch mức để đảm bảo tính toàn vẹn của tín hiệu. Thiết lập này sẽ cho phép bạn điều khiển dải đèn LED trực tiếp từ ESP32.

Ví dụ Mã & Hướng dẫn Chi tiết

Mã sử dụng thư viện Adafruit NeoPixel để điều khiển dải đèn LED WS2812. Nó bắt đầu bằng việc khởi tạo dải đèn LED và đặt màu ban đầu là màu đen. Các định danh chính trong mã bao gồm LED_PIN, xác định chân kết nối với đường dữ liệu của dải đèn LED, và NUM_LEDS, chỉ định số lượng đèn LED trong dải.

#include  // Bao gồm thư viện Adafruit NeoPixel

#define LED_PIN 14 // Dải đèn LED NeoPixel
#define NUM_LEDS 8 // Số lượng đèn LED

Trong hàm setup, dải đèn được khởi tạo bằng strip.begin(), và màu ban đầu được đặt là màu đen với strip.show(). Điều này chuẩn bị dải đèn cho việc thay đổi màu sắc khi chương trình chạy.

void setup() {
  strip.begin(); // Khởi tạo dải NeoPixel
  strip.show(); // Đặt màu ban đầu là màu đen
}

Vòng lặp chính của chương trình bao gồm hai vòng lặp for. Vòng lặp đầu tiên bật từng đèn LED một bằng cách đặt màu của nó và cập nhật dải đèn. Vòng lặp thứ hai tắt từng đèn LED theo cách tương tự. Điều này tạo ra một hiệu ứng ánh sáng đơn giản nhưng hiệu quả.

void loop() {
  // Bật từng đèn LED một
  for (int i = 0; i < NUM_LEDS; i++) {
    strip.setPixelColor(i, 100, 45, 0); // Đặt màu của đèn LED thứ i thành màu đỏ
    strip.show(); // Cập nhật dải đèn LED với các màu mới
    delay(100); // Chờ 100 mili giây
  }
  
  // Tắt từng đèn LED một
  for (int i = 0; i < NUM_LEDS; i++) {
    strip.setPixelColor(i, 0, 0, 0); // Đặt màu của đèn LED thứ i thành màu đen (tắt nó)
    strip.show(); // Cập nhật dải đèn LED với các màu mới
    delay(100); // Chờ 100 mili giây
  }
}

Xem toàn bộ mã được tải bên dưới bài viết để biết thêm chi tiết về cách triển khai các hiệu ứng màu sắc và hoạt ảnh khác nhau.

Trình diễn / Điều gì sẽ xảy ra

Sau khi bạn đã hoàn tất việc đấu dây và tải mã lên, bạn sẽ thấy các đèn LED trên dải sáng lần lượt từng cái một với màu sắc được chỉ định, sau đó chúng tắt theo cùng trình tự. Điều này tạo ra hiệu ứng "đèn chạy". Nếu đèn LED không sáng như mong đợi, hãy kiểm tra lại các kết nối dây và đảm bảo nguồn điện đủ. Đồng thời, xác minh rằng chân (pin) chính xác đã được định nghĩa trong mã (trong video tại 12:30).

Mốc thời gian video

  • 00:00 Bắt đầu
  • 1:40 Giới thiệu về đèn LED WS2812
  • 7:25 Trang tài liệu dự án
  • 9:16 Giải thích về màu RGB
  • 13:16 Giải thích về cách đấu dây
  • 13:48 Giải thích Mã Arduino-1
  • 19:03 Chọn bo mạch ESP32 và cổng trên Arduino IDE
  • 20:45 Trình diễn Mã-1
  • 22:00 Điều khiển từng đèn LED riêng lẻ
  • 24:16 Đèn LED chạy bước
  • 25:41 Đèn sáng qua lại

Hình ảnh

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
Ngôn ngữ: 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
  }
}

Nghĩ bạn có thể cần

Tài nguyên & tài liệu tham khảo

Chưa có tài nguyên nào.

Tập tin📁

Không có tệp nào khả dụng.