ESP32 Dải LED WS2812B

Trong hướng dẫn này, chúng ta sẽ học cách sử dụng ESP32 để điều khiển dải LED RGB WS2812B. Chỉ với một chân ESP32:

Phần Cứng Cần Thiết

1×mô-đun phát triển ESP-WROOM-32
1×Alternatively, ESP32 Uno-form board
1×Alternatively, ESP32 S3 Uno-form board
1×Cáp USB Type-C
1×Dải LED RGB WS2812B
1×Tụ điện 1000uF
1×Điện trở 470Ω
1×Nguồn Điện 5V
1×(Tùy chọn) DC Power Jack
1×Dây Jumper
1×breadboard
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP32
1×(Khuyến nghị) Breakout Expansion Board for ESP32
1×(Khuyến nghị) Power Splitter for ESP32

Or you can buy the following kits:

1×DIYables ESP32 Starter Kit (ESP32 included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về Dải LED RGB WS2812B

Pinout

Dải LED RGB WS2812B có ba chân:

  • Chân GND: cần được kết nối với GND (0V)
  • Chân VCC: cần được kết nối với 5V từ nguồn điện bên ngoài
  • Chân Din: là chân nhận tín hiệu điều khiển. Chân này nên được kết nối với một chân GPIO của ESP32.
ws2812b sơ đồ chân

※ Lưu ý:

Thứ tự các chân có thể khác nhau giữa các nhà sản xuất. LUÔN sử dụng các nhãn được in trên Dải LED.

Sơ Đồ Kết Nối

ESP32 ws2812b rgb LED strip sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

Nếu bạn chưa rõ cách cấp nguồn cho ESP32 và các linh kiện khác, xem: Cách Cung Cấp Nguồn Điện Cho ESP32.

Cách Lập Trình Cho Dải LED RGB WS2812B

Có hai thư viện có thể được sử dụng để điều khiển dải LED WS2812B:

  • Thư viện Adafruit NeoPixel.
  • Thư viện FastLED.

Hướng dẫn này sẽ sử dụng thư viện Adafruit NeoPixel

  • Khai báo một đối tượng WS2812B
#define PIN_WS2812B 4 // ESP32 pin that connects to WS2812B #define NUM_PIXELS 30 // The number of LEDs (pixels) on WS2812B Adafruit_NeoPixel WS2812B(NUM_PIXELS, PIN_WS2812B, NEO_GRB + NEO_KHZ800);
  • Khởi tạo WS2812B
WS2812B.begin(); // INITIALIZE WS2812B strip object (REQUIRED)
  • Đặt màu sắc cho từng LED riêng lẻ (gọi là pixel).
WS2812B.setPixelColor(pixel, WS2812B.Color(255, 0, 0));
  • Đặt độ sáng cho toàn bộ dải LED.
WS2812B.setBrightness(100); // a value from 0 to 255

※ Lưu ý:

  • WS2812B.setBrightness() được sử dụng cho tất cả pixel trên dải LED. Để đặt độ sáng cho từng pixel riêng biệt, chúng ta có thể điều chỉnh giá trị màu.
  • Các giá trị được đặt bởi WS2812B.setBrightness() và WS2812B.setPixelColor() chỉ có hiệu lực khi WS2812B.show() được gọi.

Code ESP32

Code dưới đây thực hiện:

  • Bật các pixel thành màu xanh lá cây từng cái một với độ trễ giữa mỗi pixel
  • Tắt tất cả pixel trong hai giây
  • Bật tất cả pixel thành màu đỏ cùng lúc trong hai giây
  • Lặp lại quy trình trên vô hạn
/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-ws2812b-led-strip */ #include <Adafruit_NeoPixel.h> #define PIN_WS2812B 16 // The ESP32 pin GPIO16 connected to WS2812B #define NUM_PIXELS 30 // The number of LEDs (pixels) on WS2812B LED strip Adafruit_NeoPixel ws2812b(NUM_PIXELS, PIN_WS2812B, NEO_GRB + NEO_KHZ800); void setup() { ws2812b.begin(); // initialize WS2812B strip object (REQUIRED) } void loop() { ws2812b.clear(); // set all pixel colors to 'off'. It only takes effect if pixels.show() is called // turn pixels to green one-by-one with delay between each pixel for (int pixel = 0; pixel < NUM_PIXELS; pixel++) { // for each pixel ws2812b.setPixelColor(pixel, ws2812b.Color(0, 255, 0)); // it only takes effect if pixels.show() is called ws2812b.show(); // update to the WS2812B Led Strip delay(500); // 500ms pause between each pixel } // turn off all pixels for two seconds ws2812b.clear(); ws2812b.show(); // update to the WS2812B Led Strip delay(2000); // 2 seconds off time // turn on all pixels to red at the same time for two seconds for (int pixel = 0; pixel < NUM_PIXELS; pixel++) { // for each pixel ws2812b.setPixelColor(pixel, ws2812b.Color(255, 0, 0)); // it only takes effect if pixels.show() is called } ws2812b.show(); // update to the WS2812B Led Strip delay(1000); // 1 second on time // turn off all pixels for one seconds ws2812b.clear(); ws2812b.show(); // update to the WS2812B Led Strip delay(1000); // 1 second off time }

Các Bước Nhanh

  • Nhấp vào biểu tượng Libraries trên thanh bên trái của Arduino IDE.
  • Tìm kiếm "Adafruit NeoPixel", sau đó tìm thư viện WS2812B của Adafruit
  • Nhấp nút Install để cài đặt thư viện NeoPixel.
ESP32 neopixel thư viện
  • Sao chép code ở trên và mở bằng Arduino IDE
  • Nhấp nút Upload trên Arduino IDE để tải code lên ESP32
  • Xem hiệu ứng LED

※ Lưu ý:

Đối với bất kỳ hiệu ứng LED phức tạp nào, chúng tôi cung cấp dịch vụ lập trình có phí

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.

Bình Luận