Series
Lập Trình ESP32 Cơ Bản
  1. Series Lập Trình ESP32 Cơ Bản – Giới Thiệu: Lộ Trình 19 Bài Từ Số 0
  2. 1Lập trình ESP32 – Bài 1: ESP32 là gì? Hướng dẫn bắt đầu với ESP32 cho người mới
  3. 2Lập trình ESP32 – Bài 2: Kết nối WiFi và kiểm tra Internet với ESP32
  4. 3Lập trình ESP32 – Bài 3: Đọc nút nhấn và điều khiển LED với ESP32
  5. 4Lập trình ESP32 – Bài 4: Đọc nhiệt độ & độ ẩm với cảm biến DHT11
  6. 5Lập trình ESP32 – Bài 5: ESP32 Web Server – Điều khiển LED qua trình duyệt
  7. 6Lập trình ESP32 – Bài 6: Điều khiển LED RGB
  8. 7Lập trình ESP32 – Bài 7: Điều khiển Relay qua Web Server
  9. 8Lập trình ESP32 – Bài 8: WebSocket – Điều khiển LED realtime từ trình duyệt
  10. 9Lập trình ESP32 – Bài 9: Đọc cảm biến ánh sáng (LDR) và hiển thị realtime qua WebSocket
  11. 10Lập trình ESP32 – Bài 10: Điều khiển Servo SG90 qua Web Server
  12. 11Lập trình ESP32 – Bài 11: Đọc các loại biến trở (Potentiometer / Analog Sensor)
  13. 12Lập trình ESP32 – Bài 12: Đọc cảm biến khoảng cách HC-SR04
  14. 13Lập trình ESP32 – Bài 13: ESP32 – Đọc cảm biến nhiệt độ, độ ẩm DHT11 và hiển thị dữ liệu realtime qua WebSocket
  15. 14Lập trình ESP32 – Bài 14: Hiển thị màn hình TFT (SPI)
  16. 15Lập trình ESP32 – Bài 15: Màn hình OLED SSD1306 (I2C)
  17. 16Lập trình ESP32 – Bài 16: Module SIM 4G A7680C – Gọi điện thoại, in thông tin SIM/Module, trạng thái 4G
  18. 17Lập trình ESP32 – Bài 17: Phát nhạc MP3 với module DFPlayer Mini
  19. 18Lập trình ESP32 – Bài 18: Đọc cảm biến khí gas MQ-2 và hiển thị lên màn hình OLED
  20. 19Lập trình ESP32 – Bài 19: Kết nối MQTT, Publish dữ liệu cảm biến & Subscribe điều khiển thiết bị
Kiến thức

Lập trình ESP32 – Bài 6: Điều khiển LED RGB

Th11 2025
Lập trình ESP32 – Bài 6: Điều khiển LED RGB

Hướng dẫn điều khiển dải LED RGB WS2812B bằng ESP32, tạo hiệu ứng đổi màu, chạy sáng, cầu vồng động và hơn thế nữa.

Trong ví dụ này chúng ta sẽ dùng LED RGB WS2812B NeoPixel.

Mục lục

  1. Giới thiệu
  2. Cấu tạo WS2812B
  3. Phần cứng cần chuẩn bị
  4. Sơ đồ kết nối
  5. Cài thư viện
  6. Mã nguồn ví dụ
  7. Giải thích mã
  8. Demo & mở rộng

1) Giới thiệu

LED WS2812B (NeoPixel) là loại LED RGB thông minh, mỗi bóng có chip điều khiển riêng và có thể nối chuỗi nhiều bóng chỉ qua một chân DATA.

Bạn có thể:

  • Hiển thị màu tĩnh hoặc động.
  • Tạo hiệu ứng chạy đèn, cầu vồng, nhấp nháy, phản ứng âm thanh, v.v.

2) Cấu tạo WS2812B

  • Mỗi LED có 3 màu cơ bản Red, Green, Blue (8-bit mỗi kênh → 16 triệu màu).
  • Tín hiệu điều khiển theo giao thức 1-wire (1 chân DATA).
  • Chuỗi LED có 3 dây:
    • VCC (5V)
    • GND
    • DIN (Data Input)

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

Linh kiệnSố lượngGhi chú
ESP32 DevKit V11
Dải LED WS2812B hoặc vòng LED RGB 8 bóng1
Nguồn 5V1Có thể cấp từ ESP32 nếu < 10 LED
Điện trở 330Ω1Nối giữa GPIO và chân DATA
Tụ điện 1000µF1Nối giữa 5V và GND để chống sụt áp
Breadboard, dây nốiVài sợi

4) Sơ đồ kết nối

  • LED VCC → 5V
  • LED GND → GND (chung với ESP32)
  • LED DIN → GPIO15 (qua điện trở 330Ω)
  • Tụ 1000µF nối song song giữa 5V và GND để ổn định nguồn.

5) Cài thư viện

Trong Arduino IDE → Tools → Manage Libraries…
Tìm và cài:

  • Adafruit NeoPixel (by Adafruit)

6) Mã nguồn ví dụ

#include <Adafruit_NeoPixel.h>

#define PIN        15       // Chân dữ liệu LED
#define NUMPIXELS  8        // Số LED trong dải

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  pixels.begin(); // khởi tạo dải LED
}

void loop() {
  rainbowCycle(5);
}

// Hiệu ứng cầu vồng chạy qua các LED
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;
  for (j = 0; j < 256 * 5; j++) { // 5 vòng màu
    for (i = 0; i < pixels.numPixels(); i++) {
      pixels.setPixelColor(i, Wheel(((i * 256 / pixels.numPixels()) + j) & 255));
    }
    pixels.show();
    delay(wait);
  }
}

// Hàm tạo màu RGB từ giá trị 0-255
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if (WheelPos < 85) {
    return pixels.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if (WheelPos < 170) {
    WheelPos -= 85;
    return pixels.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return pixels.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

7) Giải thích mã

  • Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800) → cấu hình dải LED.
  • pixels.setPixelColor(i, pixels.Color(r,g,b)) → đổi màu từng bóng.
  • Wheel() tạo dải màu cầu vồng.
  • rainbowCycle() chạy màu liên tục qua các LED.

8) Demo & mở rộng

  • Khi nạp xong code, bạn sẽ thấy dải LED chạy màu cầu vồng liên tục.
  • Có thể đổi hiệu ứng:
    • pixels.fill(Color(255,0,0)) → toàn bộ LED đỏ.
    • pixels.clear() → tắt tất cả LED.
  • Dùng thêm WebSocket để điều khiển màu qua trình duyệt.
  • Kết hợp âm thanh / cảm biến chuyển động để tạo hiệu ứng tương tác.