ESP8266 Dải đèn LED WS2812B

Dải LED WS2812B RGB được cấu thành từ các LED mà màu sắc và độ sáng có thể được điều chỉnh riêng lẻ. Hướng dẫn này chỉ cho bạn cách sử dụng ESP8266 để điều khiển dải LED WS2812B RGB. Cụ thể, chúng ta sẽ tìm hiểu:

Chúng ta chỉ cần sử dụng một chân GPIO của ESP8266 để điều khiển toàn bộ các đèn LED trên dải.

Phần cứng cần chuẩn bị

1×ESP8266 NodeMCU ESP-12E
1×Recommended: ESP8266 NodeMCU ESP-12E (Uno-form)
1×USB Cable Type-A to Type-C (for USB-A PC)
1×USB Cable Type-C to Type-C (for USB-C PC)
1×WS2812B RGB LED Strip
1×1000uF Capacitor
1×470Ω Resistor
1×5V Power Adapter
1×DC Power Jack
1×dây jumper
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP8266
1×(Khuyến nghị) Power Splitter for ESP8266 Type-C

Or you can buy the following kits:

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

Giới thiệu về dải LED RGB WS2812B

Cấu hình chân của dải LED WS2812B

Dải đèn LED RGB WS2812B có ba chân cần các kết nối đặc biệt:

  • Chân GND phải được nối với GND (0V)
  • Chân VCC nên được kết nối với 5V từ nguồn cấp ngoài
  • Chân Din là chân nhận tín hiệu điều khiển và nên được liên kết với một chân trên ESP8266
sơ đồ chân ws2812b

※ Lưu ý:

Thứ tự các chân có thể khác nhau tùy thuộc vào nhà sản xuất. Việc sử dụng các ký hiệu được in trên dải LED là bắt buộc.

Sơ đồ đấu dây

sơ đồ đấu nối dải đèn LED rgb ws2812b cho ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

Xem thêm Sơ đồ chân ESP8266Cách cấp nguồn cho ESP8266.

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

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.

  • Tạo một đối tượng WS2812B
#define PIN_WS2812B D1 // The ESP8266 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);
  • Dải LED gồm 30 đèn
  • Khởi tạo dải WS2812B chứa 30 đèn LED.
WS2812B.begin(); // INITIALIZE WS2812B strip object (REQUIRED)
  • Xác định màu sắc của mỗi LED (được gọi là một điểm ảnh).
WS2812B.setPixelColor(pixel, WS2812B.Color(255, 0, 0));
  • Điều chỉnh độ sáng cho tất cả các dải.
WS2812B.setBrightness(100); // a value from 0 to 255

※ Lưu ý:

  • WS2812B.setBrightness() được dùng để điều chỉnh độ sáng của tất cả các pixel trên dải LED. Để thiết lập độ sáng cho mỗi pixel riêng lẻ, ta có thể nhân các giá trị màu (R, G, B) với cùng một tỉ lệ.
  • Các giá trị được thiết lập bởi WS2812B.setBrightness()WS2812B.setPixelColor() sẽ chỉ được áp dụng khi WS2812B.show() được thực thi.

Mã ESP8266

Đoạn mã dưới đây thực hiện các chuỗi sau đây:

  • Chuyển các pixel sang 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ả các pixel trong hai giây
  • Bật sáng tất cả các pixel màu đỏ đồng thời trong hai giây
  • Lặp lại quá trình này mãi mãi
/* * Mã ESP8266 NodeMCU này được phát triển bởi newbiely.vn * Mã ESP8266 NodeMCU 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/esp8266/esp8266-ws2812b-led-strip */ #include <Adafruit_NeoPixel.h> #define PIN_WS2812B D1 // The ESP8266 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); 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(); // send the updated pixel colors to the WS2812B hardware. delay(DELAY_INTERVAL); // pause between each pixel } // turn off all pixels for two seconds WS2812B.clear(); WS2812B.show(); // send the updated pixel colors to the WS2812B hardware. delay(2000); // 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(); // send the updated pixel colors to the WS2812B hardware. delay(2000); // on time // turn off all pixels for one seconds WS2812B.clear(); WS2812B.show(); // send the updated pixel colors to the WS2812B hardware. delay(2000); // off time }

Hướng dẫn từng bước

Để bắt đầu với ESP8266 trên Arduino IDE, hãy làm theo các bước sau:

  • Xem ESP8266 - Cài đặt phần mềm nếu đây là lần đầu bạn sử dụng ESP8266.
  • Nối các thành phần như được hiển thị trong sơ đồ.
  • Kết nối board ESP8266 với máy tính của bạn bằng cáp USB.
  • Mở Arduino IDE trên máy tính của bạn.
  • Chọn board ESP8266 phù hợp, chẳng hạn như (ví dụ: NodeMCU 1.0 (ESP-12E Module)), và cổng COM tương ứng.
  • Nhấn vào biểu tượng Libraries ở thanh bên trái của Arduino IDE.
  • Tìm kiếm “Adafruit NeoPixel” và tìm thư viện NeoPixel của Adafruit.
  • Sau đó, nhấn nút Install để cài đặt thư viện NeoPixel.
thư viện neopixel cho ESP8266 NodeMCU
  • Sao chép mã và mở nó trong Arduino IDE.
  • Nhấp vào nút Tải lên để gửi mã đến ESP8266.
  • 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 trả 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.