ESP8266 - DotStar LED 스트립 | ESP8266 - DotStar LED Strip
이 튜토리얼에서는 ESP8266을 사용하여 DotStar RGB LED 스트립을 제어하는 방법을 배울 것입니다. 구체적으로, 우리는 다음을 배울 것입니다:
ESP8266을 DotStar LED 스트립에 연결하는 방법
ESP8266 프로그래밍하여 LED 스트립의 각 개별 LED의 색상과 밝기를 제어하는 방법
ESP8266을 프로그래밍하여 DotStar LED 스트립에 혜성 효과를 만드는 방법
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.
DotStar RGB LED 스트립은 세 개의 핀이 있습니다:
GND pin: GND(0V)에 연결되어야 합니다.
CI pin: 클럭 신호를 받는 클럭 핀입니다. ESP8266 핀에 연결되어야 합니다.
DI pin: 제어 신호를 받는 데이터 핀입니다. ESP8266 핀에 연결되어야 합니다.
5V pin: 외부 전원 공급 장치의 5V에 연결되어야 합니다.
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
ESP8266의 핀 배치 및 ESP8266 및 다른 구성 요소에 전원을 공급하는 방법에 대해 더 많이 보십시오.
DotStar 라이브러리를 포함하세요.
#include <Adafruit_DotStar.h>
DotStar 객체를 선언하십시오.
cpp
#define NUMPIXELS 144
#define DATAPIN 2
#define CLOCKPIN 3
Adafruit_DotStar strip(NUMPIXELS, DATAPIN, CLOCKPIN, DOTSTAR_BRG);
DotStar을 초기화합니다.
strip.begin();
strip.setBrightness(255);
strip.show();
각각의 개별 LED(픽셀이라고 함)의 색상(r, g, b)을 설정합니다.
strip.setPixelColor(pixel, g, r, b);
모든 스트립의 밝기 설정하세요.
strip.setBrightness(100);
아래 코드는 각 픽셀 사이에 지연시간을 두고 하나씩 픽셀을 빨간색으로 바꿉니다.
#include <Adafruit_DotStar.h>
#include <SPI.h>
#define NUMPIXELS 144
#define DATAPIN D6
#define CLOCKPIN D5
Adafruit_DotStar strip(NUMPIXELS, DATAPIN, CLOCKPIN, DOTSTAR_BRG);
void setup() {
Serial.begin(9600);
strip.begin();
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);
}
}
Arduino IDE에서 ESP8266을 시작하려면 다음 단계를 따르세요:
다이어그램에 표시된 대로 구성요소들을 연결하세요.
USB 케이블을 사용해 ESP8266 보드를 컴퓨터에 연결하세요.
컴퓨터에서 Arduino IDE를 엽니다.
올바른 ESP8266 보드를 선택하세요, 예를 들어 NodeMCU 1.0 (ESP-12E Module)과 해당 COM 포트입니다.
Arduino IDE의 왼쪽 바에 있는 Libraries 아이콘을 클릭하세요.
“Adafruit DotStar”을 검색한 다음, Adafruit의 DotStar 라이브러리를 찾으세요.
DotStar 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
의존성을 설치하라는 요청을 받게 됩니다. Install All 버튼을 클릭하세요.
아래 코드는 DotStar LED 스트립을 위한 혜성 효과를 제공합니다.
#include <Adafruit_DotStar.h>
#include <SPI.h>
#define COMET_LENGTH_ALL 30
#define COMET_LENGTH_BODY 25
#define COMET_LENGTH_HEAD 5
#define TWO_COMET_DISTANCE 10
#define COMET_SPEED 2000
#define COMET_COLOR_R 204
#define COMET_COLOR_G 255
#define COMET_COLOR_B 255
#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
#define NUMPIXELS 144
#define DATAPIN D6
#define CLOCKPIN D5
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();
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();
}
}
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.