ESP32 DotStar LED Strip

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 DotStar. Cụ thể, chúng ta sẽ học:

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×DotStar RGB LED Strip
1×Tụ điện 1000uF
1×Điện trở 470Ω
1×Adapter nguồn 5V
1×Jack nguồn DC
1×Dây nối (Jumper Wires)
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ề DotStar RGB LED Strip

Sơ Đồ Chân

DotStar RGB LED Strip có ba chân:

  • Chân GND: cần được kết nối với GND (0V)
  • Chân CI: Chân Clock nhận tín hiệu xung nhịp. Nên được kết nối với một chân của ESP32.
  • Chân DI: Chân Data nhận tín hiệu điều khiển. Nên được kết nối với một chân của ESP32.
  • Chân 5V: cần được kết nối với nguồn cung cấp 5V từ bên ngoài
dotstar sơ đồ chân

Sơ Đồ Kết Nối

ESP32 dotstar 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 DotStar RGB LED Strip

  • Include thư viện DotStar
#include <Adafruit_DotStar.h> #include <SPI.h> // COMMENT OUT THIS LINE FOR GEMMA OR TRINKET
  • Khai báo đối tượng DotStar
#define NUMPIXELS 144 // Number of LEDs in strip // Here's how to control the LEDs from any two pins: #define DATAPIN 16 #define CLOCKPIN 17 Adafruit_DotStar strip(NUMPIXELS, DATAPIN, CLOCKPIN, DOTSTAR_BRG);
  • Khởi tạo DotStar
strip.begin(); // Initialize pins for output strip.setBrightness(255); strip.show(); // Turn all LEDs off ASAP
  • Thiết lập màu sắc (r. g, b) cho từng LED riêng lẻ (gọi là pixel).
strip.setPixelColor(pixel, g, r, b);
  • Thiết lập độ sáng cho toàn bộ dải LED.
strip.setBrightness(100); // a value from 0 to 255

※ Lưu ý:

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

Code ESP32

Code dưới đây sẽ bật từng pixel thành màu đỏ với độ trễ giữa mỗi pixel

/* * 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-dotstar-led-strip */ #include <Adafruit_DotStar.h> #include <SPI.h> // COMMENT OUT THIS LINE FOR GEMMA OR TRINKET #define NUMPIXELS 144 // Number of LEDs in strip // Here's how to control the LEDs from any two pins: #define DATAPIN 16 // The ESP32 pin GPIO16 #define CLOCKPIN 17 // The ESP32 pin GPIO17 Adafruit_DotStar strip(NUMPIXELS, DATAPIN, CLOCKPIN, DOTSTAR_BRG); void setup() { Serial.begin(9600); strip.begin(); // INITIALIZE NeoPixel strip object (REQUIRED) strip.show(); // Turn OFF all pixels ASAP strip.setBrightness(255); } void loop() { for (int pixel = 0; pixel < NUMPIXELS; pixel++) { // red color int r = 255; // CHANGE COLOR AS YOUR DESIRE int g = 0; // CHANGE COLOR AS YOUR DESIRE int b = 0; // CHANGE COLOR AS YOUR DESIRE strip.clear(); // turn off all pixel strip.setPixelColor(pixel, g, r, b); // turn on a single pixel strip.show(); delay(1000); // keep each pixel on 1 seconds } }

Các Bước Thực Hiện

  • Nếu đây là lần đầu bạn sử dụng ESP32, hãy xem ESP32 - Cài Đặt Phần Mềm.
  • Thực hiện kết nối theo sơ đồ trên.
  • Kết nối board ESP32 với máy tính của bạn qua cáp micro USB
  • Mở Arduino IDE trên máy tính của bạn.
  • Chọn đúng board ESP32 (ví dụ: ESP32 Dev Module) và cổng COM.
  • Nhấp vào biểu tượng Libraries ở thanh bên trái của Arduino IDE.
  • Tìm kiếm "Adafruit DotStar", sau đó tìm thư viện DotStar của Adafruit
  • Nhấp nút Install để cài đặt thư viện DotStar.
ESP32 dotstar thư viện
  • Bạn sẽ được yêu cầu cài đặt dependency. Nhấp nút Install All.
ESP32 bàn phím ma trận thư viện
  • Sao chép code trên và mở bằng Arduino IDE
  • Nhấp nút Upload trên Arduino IDE để upload code lên ESP32
  • Xem hiệu ứng LED

Code ESP32 - Hiệu Ứng Sao Chổi LED Strip

Code dưới đây tạo hiệu ứng sao chổi cho DotStar LED strip

/* * 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-dotstar-led-strip */ #include <Adafruit_DotStar.h> #include <SPI.h> // COMMENT OUT THIS LINE FOR GEMMA OR TRINKET #define COMET_LENGTH_ALL 30 // in pixel COMET_LENGTH_ALL = COMET_LENGTH_BODY + COMET_LENGTH_HEAD #define COMET_LENGTH_BODY 25 // in pixel #define COMET_LENGTH_HEAD 5 // in pixel #define TWO_COMET_DISTANCE 10 // in pixel #define COMET_SPEED 2000 // in millisecond, the time need to move through 144 pixels #define COMET_COLOR_R 204 // color #define COMET_COLOR_G 255 // color #define COMET_COLOR_B 255 // color #define COMET_BRIGHTNESS_MIN 1 #define COMET_BRIGHTNESS_MAX 200 #define COMET_BRIGHTNESS_HEAD 80 #define FLICKER_MAX 255 #define FLICKER_MIN 100 #define FLICKER_SPEED 800 // in millisecond #define NUMPIXELS 144 // Number of LEDs in strip // Here's how to control the LEDs from any two pins: #define DATAPIN 16 // The ESP32 pin GPIO16 #define CLOCKPIN 17 // The ESP32 pin GPIO17 Adafruit_DotStar strip(NUMPIXELS, DATAPIN, CLOCKPIN, DOTSTAR_BRG); int pos_head = 0; unsigned long cometTimeStart; unsigned long flickerTimeStart; unsigned long progress; unsigned long cometBrightness; unsigned long flickerBrightness; unsigned long TIME_PER_PIXEL; void setup() { Serial.begin(9600); strip.begin(); // INITIALIZE NeoPixel strip object (REQUIRED) strip.show(); // Turn OFF all pixels ASAP strip.setBrightness(255); TIME_PER_PIXEL = map(1, 0, NUMPIXELS, 0, COMET_SPEED); cometTimeStart = millis(); flickerTimeStart = millis(); } void loop() { progress = millis() - flickerTimeStart; if (progress >= 2 * FLICKER_SPEED) { progress = 2 * FLICKER_SPEED; flickerTimeStart = millis(); } if (progress > FLICKER_SPEED) progress = 2 * FLICKER_SPEED - progress; flickerBrightness = map(progress, 0, FLICKER_SPEED, FLICKER_MIN, FLICKER_MAX); strip.setBrightness(flickerBrightness); progress = millis() - cometTimeStart; if (progress >= TIME_PER_PIXEL) { pos_head++; pos_head %= (COMET_LENGTH_ALL + TWO_COMET_DISTANCE); int offset = COMET_LENGTH_ALL - pos_head; for (int pixel = 0; pixel < NUMPIXELS; pixel++) { int pos_offset = pixel + offset; pos_offset %= (COMET_LENGTH_ALL + TWO_COMET_DISTANCE); if (pos_offset < COMET_LENGTH_BODY) cometBrightness = map(pos_offset, 0, COMET_LENGTH_BODY - 1, COMET_BRIGHTNESS_MIN, COMET_BRIGHTNESS_MAX); else if (pos_offset >= COMET_LENGTH_BODY && pos_offset < COMET_LENGTH_ALL) cometBrightness = map(pos_offset - COMET_LENGTH_BODY + 1, 0, COMET_LENGTH_ALL - COMET_LENGTH_BODY, COMET_BRIGHTNESS_MAX, COMET_BRIGHTNESS_HEAD); else cometBrightness = 0; int r = (COMET_COLOR_R * cometBrightness) >> 8; int g = (COMET_COLOR_G * cometBrightness) >> 8; int b = (COMET_COLOR_B * cometBrightness) >> 8; strip.setPixelColor(pixel, g, r, b); } strip.show(); cometTimeStart = millis(); // new circle } }

※ Lưu ý:

Đối với các hiệu ứng LED khác, chúng tôi cung cấp dịch vụ lập trình có 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.

Bình Luận