ESP32 - Dotstar LED 스트립 | ESP32 - Dotstar LED Strip

이 튜토리얼에서는 ESP32를 사용하여 DotStar RGB LED 스트립을 제어하는 방법을 배우게 됩니다. 구체적으로, 우리는 다음을 학습할 것입니다:

준비물

1×ESP-WROOM-32 Dev Module 쿠팡 | Amazon
1×USB Cable Type-C 쿠팡 | Amazon
1×DotStar RGB LED Strip Amazon
1×1000uF Capacitor Amazon
1×470Ω resistor Amazon
1×5V Power Adapter Amazon
1×DC Power Jack 쿠팡 | Amazon
1×Jumper Wires Amazon
1×(Recommended) ESP32 Screw Terminal Adapter 쿠팡 | Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

DotStar RGB LED 스트립 소개

핀배열

DotStar RGB LED 스트립에는 세 개의 핀이 있습니다:

  • GND 핀: GND(0V)에 연결되어야 합니다.
  • CI 핀: 클럭 신호를 받는 클럭 핀입니다. ESP32 핀에 연결되어야 합니다.
  • DI 핀: 제어 신호를 받는 데이터 핀입니다. ESP32 핀에 연결되어야 합니다.
  • 5V 핀: 외부 전원 공급장치의 5V에 연결되어야 합니다.
DotStar Pinout

선연결

ESP32 DotStar RGB LED strip Wiring Diagram

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

ESP32 및 다른 구성 요소에 전원을 공급하는 방법에 대해 잘 알지 못하는 경우, 다음 튜토리얼에서 안내를 찾을 수 있습니다: ESP32 전원 공급 방법.

DotStar RGB LED 스트립을 프로그래밍하는 방법

DotStar 라이브러리를 포함하세요.

c #include <Adafruit_DotStar.h> #include <SPI.h> // 이 줄을 주석 처리하십시오. GEMMA 또는 TRINKET용입니다.

DotStar 객체를 선언하십시오.

#define NUMPIXELS 144 // 스트립 내 LED 개수 // LED를 어떠한 두 핀에서도 제어하는 방법은 다음과 같습니다: #define DATAPIN 16 #define CLOCKPIN 17 Adafruit_DotStar strip(NUMPIXELS, DATAPIN, CLOCKPIN, DOTSTAR_BRG);

DotStar를 초기화합니다.

strip.begin(); // 출력을 위한 핀 초기화 strip.setBrightness(255); strip.show(); // 가능한 한 빨리 모든 LED를 끕니다

각 개별 LED(픽셀이라고 함)의 색상(r, g, b)을 설정합니다.

strip.setPixelColor(pixel, g, r, b);

모든 스트립의 밝기를 설정하십시오.

strip.setBrightness(100); // 0에서 255까지의 값

※ NOTE THAT:

  • DotStar.setBrightness()는 LED 스트립의 모든 픽셀에 사용됩니다. 각각의 픽셀마다 밝기를 설정하려면 색상 값을 조정할 수 있습니다.
  • DotStar.setBrightness()DotStar.setPixelColor()에 의해 설정된 값들은 DotStar.show()가 호출될 때만 적용됩니다.

ESP32 코드

아래 코드는 픽셀마다 지연 시간을 두고 하나씩 픽셀을 빨간색으로 바꿉니다.

/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-dotstar-led-strip */ #include <Adafruit_DotStar.h> #include <SPI.h> // GEMMA 또는 TRINKET을 위해 이 줄을 주석 처리하세요. #define NUMPIXELS 144 // 스트립의 LED 수 // 여기에 어떻게 두 개의 핀으로 LED를 제어하는지 보여줍니다: #define DATAPIN 16 // ESP32 핀 GPIO16 #define CLOCKPIN 17 // ESP32 핀 GPIO17 Adafruit_DotStar strip(NUMPIXELS, DATAPIN, CLOCKPIN, DOTSTAR_BRG); void setup() { Serial.begin(9600); strip.begin(); // NeoPixel 스트립 객체를 초기화합니다 (필수) strip.show(); // 가능한 빨리 모든 픽셀을 끕니다 strip.setBrightness(255); } void loop() { for (int pixel = 0; pixel < NUMPIXELS; pixel++) { // 빨간색 int r = 255; // 원하는 대로 색상을 변경하세요 int g = 0; // 원하는 대로 색상을 변경하세요 int b = 0; // 원하는 대로 색상을 변경하세요 strip.clear(); // 모든 픽셀을 끕니다 strip.setPixelColor(pixel, g, r, b); // 단일 픽셀을 켭니다 strip.show(); delay(1000); // 각 픽셀을 1초간 켜져 있게 합니다 } }

사용 방법

ESP32를 처음 사용한다면, Arduino IDE에서 ESP32 환경 설정하는 방법을 보세요.

위 이미지와 같이 배선하세요.

ESP32 보드를 마이크로 USB 케이블을 통해 PC에 연결하세요.

PC에서 Arduino IDE를 엽니다.

올바른 ESP32 보드(예: ESP32 Dev Module)와 COM 포트를 선택하세요.

Arduino IDE의 왼쪽 바에 있는 Libraries 아이콘을 클릭하세요.

"Adafruit DotStar"을 검색한 다음, Adafruit의 DotStar 라이브러리를 찾으세요.

DotStar 라이브러리를 설치하려면 Install 버튼을 클릭하세요.

ESP32 DotStar library

의존성을 설치하라는 요청을 받게 됩니다. Install All 버튼을 클릭하십시오.

ESP32 keypad library
  • 위의 코드를 복사하고 Arduino IDE로 열기
  • 코드를 ESP32에 업로드하기 위해 Arduino IDE에서 Upload 버튼을 클릭하세요
  • LED 효과를 확인하세요

ESP32 코드 - LED 스트립 혜성 효과

아래 코드는 DotStar LED 스트립에 혜성 효과를 제공합니다.

/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-dotstar-led-strip */ #include <Adafruit_DotStar.h> #include <SPI.h> // 이 줄을 GEMMA나 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(); // NeoPixel strip 객체를 초기화합니다 (필수) strip.show(); // 가능한 한 빨리 모든 픽셀을 끕니다 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(); // 새로운 사이클 시작 } }

※ NOTE THAT:

다른 LED 효과에 대해서는 유료 프로그래밍 서비스를 제공합니다.

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!