코드 검색

ESP32 튜토리얼 12/55 - SunFounder의 ESP32 IoT 학습 키트를 사용한 WS2812 RGB 스트립 4 프로젝트

ESP32 튜토리얼 12/55 - SunFounder의 ESP32 IoT 학습 키트를 사용한 WS2812 RGB 스트립 4 프로젝트

이 튜토리얼에서는 ESP32 마이크로컨트롤러를 사용하여 WS2812 LED 스트립을 제어하는 방법을 살펴보겠습니다. 이 프로젝트를 통해 다양한 색상을 만들고 각 LED를 개별적으로 제어할 수 있으며, 프로그래밍과 전자공학을 배우는 재미있고 시각적으로 매력적인 방법을 제공합니다. 이 튜토리얼이 끝나면 색상과 패턴을 동적으로 변경할 수 있는 완전히 작동하는 설정을 갖게 됩니다.

SunFounder-ESP32-Lesson-12-LED-Strip.mp4_snapshot_00.02.422

Wi-Fi와 Bluetooth 기능이 내장된 SunFounder의 ESP32 마이크로컨트롤러를 사용하면 WS2812 RGB LED 스트립을 쉽게 연결하고 제어할 수 있습니다. 이 LED 스트립의 유연성은 장식용 조명이나 교육용 프로젝트 등 창의적인 응용을 가능하게 합니다. 관련 단계를 더 잘 이해하려면 (00:00 부분의) 비디오를 참조할 수 있습니다.

하드웨어 설명

이 프로젝트의 주요 구성 요소는 ESP32 마이크로컨트롤러와 WS2812 LED 스트립입니다. ESP32는 Arduino와 유사한 작업을 수행할 수 있지만 추가 연결 옵션이 있는 강력한 마이크로컨트롤러입니다. 클라우드에 연결하여 원격 제어와 데이터 로깅을 가능하게 하는 다양한 기능을 갖추고 있습니다.

WS2812 LED 스트립은 개별 주소 지정이 가능한 RGB LED로 구성되어 있어 각 LED를 제어하여 다른 색상을 표시할 수 있습니다. 이 스트립은 단일 와이어 프로토콜로 작동하므로 신호 품질을 잃지 않고 여러 LED를 체인으로 연결할 수 있습니다. 각 LED에는 입력 신호를 받아 체인의 다음 LED로 증폭하는 내장 드라이버가 포함되어 있습니다.

데이터시트 세부 정보

제조업체 Worldsemi
부품 번호 WS2812
로직/IO 전압 3.5–5.3 V
공급 전압 5 V
출력 전류 (채널당) 최대 20 mA
피크 전류 (채널당) 최대 60 mA
PWM 주파수 가이드 400 Hz
입력 로직 임계값 0.3 x VDD ~ 0.7 x VDD
전압 강하 / RDS(on) / 포화 최대 0.5 V
열 제한 -25 ~ 80 °C
패키지 5050
참고 사항 / 변형 더 긴 스트립을 위해 체인 연결 가능

 

  • LED 손상을 방지하려면 적절한 전원 공급(5 V)을 확인하세요.
  • 전원 공급 단자 양단에 커패시터(100 µF)를 사용하여 전압 스파이크를 완화하세요.
  • 신호 저하를 줄이기 위해 데이터 와이어를 짧게 유지하세요.
  • LED 온도에 주의하고 적절한 방열을 보장하세요.
  • 전원과 접지를 연결할 때 올바른 극성을 준수하세요.
  • 긴 스트립을 사용하는 경우 데이터 라인에 풀업 저항을 사용하세요.

배선 지침

ESP32-12-WS2812-wiring

WS2812 LED 스트립을 ESP32에 배선하려면 전원 공급 장치를 연결하는 것부터 시작하세요. LED 스트립의 +5V 와이어는 ESP32의 5V 핀에 연결하고, 접지(GND) 와이어는 ESP32의 GND 핀 중 하나에 연결해야 합니다.

다음으로 LED 스트립의 데이터 입력 와이어를 ESP32의 핀 14에 연결하세요. 올바른 데이터 전송을 위해 연결이 안전한지 확인하세요. 여러 스트립을 사용하거나 더 긴 거리를 사용하는 경우 신호 무결성을 보장하기 위해 레벨 시프터 사용을 고려하세요. 이 설정을 통해 ESP32에서 LED 스트립을 직접 제어할 수 있습니다.

코드 예제 및 설명

코드는 Adafruit NeoPixel 라이브러리를 사용하여 WS2812 LED 스트립을 제어합니다. LED 스트립을 초기화하고 초기 색상을 검은색으로 설정하는 것으로 시작합니다. 코드의 주요 식별자에는 LED 스트립의 데이터 라인에 연결된 핀을 정의하는 LED_PIN과 스트립의 LED 수를 지정하는 NUM_LEDS가 포함됩니다.

#include  // Adafruit NeoPixel 라이브러리 포함

#define LED_PIN 14 // NeoPixel LED 스트립
#define NUM_LEDS 8 // LED 수

설정 함수에서 스트립은 strip.begin()을 사용하여 초기화되고, 초기 색상은 strip.show()로 검은색으로 설정됩니다. 이는 프로그램이 실행될 때 색상 변경을 위해 스트립을 준비합니다.

void setup() {
  strip.begin(); // NeoPixel 스트립 초기화
  strip.show(); // 초기 색상을 검은색으로 설정
}

프로그램의 메인 루프는 두 개의 for 루프로 구성됩니다. 첫 번째 루프는 각 LED의 색상을 설정하고 스트립을 업데이트하여 LED를 하나씩 켭니다. 두 번째 루프는 같은 방식으로 각 LED를 끕니다. 이는 간단하지만 효과적인 조명 애니메이션을 만듭니다.

void loop() {
  // LED를 하나씩 켜기
  for (int i = 0; i < NUM_LEDS; i++) {
    strip.setPixelColor(i, 100, 45, 0); // i번째 LED의 색상을 빨간색으로 설정
    strip.show(); // 새 색상으로 LED 스트립 업데이트
    delay(100); // 100밀리초 대기
  }
  
  // LED를 하나씩 끄기
  for (int i = 0; i < NUM_LEDS; i++) {
    strip.setPixelColor(i, 0, 0, 0); // i번째 LED의 색상을 검은색으로 설정 (끄기)
    strip.show(); // 새 색상으로 LED 스트립 업데이트
    delay(100); // 100밀리초 대기
  }
}

다양한 색상 효과와 애니메이션을 구현하는 방법에 대한 자세한 내용은 기사 아래의 전체 코드 로딩을 시청하세요.

시연 / 기대 효과

배선을 완료하고 코드를 업로드한 후에는 스트립의 LED가 지정된 색상으로 하나씩 켜지고, 이어서 같은 순서로 꺼지는 것을 볼 수 있습니다. 이로 인해 "러닝 라이트" 효과가 만들어집니다. LED가 예상대로 켜지지 않으면 배선 연결을 다시 확인하고 전원 공급이 충분한지 확인하십시오. 또한 코드에서 올바른 핀이 정의되어 있는지 확인하십시오(비디오 12:30 참조).

비디오 타임스탬프

  • 00:00 시작
  • 1:40 WS2812 LED 소개
  • 7:25 프로젝트 문서 페이지
  • 9:16 RGB 색상 설명
  • 13:16 배선 설명
  • 13:48 Arduino 코드-1 설명
  • 19:03 Arduino IDE에서 ESP32 보드 및 포트 선택
  • 20:45 코드-1 데모
  • 22:00 개별 LED 제어
  • 24:16 워킹 라이트 LED
  • 25:41 앞뒤로 움직이는 라이트

이미지

ESP32-12-WS2812-wiring
ESP32-12-WS2812-wiring
ESP32-12-WS2812-schematic
ESP32-12-WS2812-schematic
SunFounder-ESP32-Lesson-12-LED-Strip.mp4_snapshot_00.02.422
SunFounder-ESP32-Lesson-12-LED-Strip.mp4_snapshot_00.02.422
811-ESP32 Tutorial 12/55- Arduino code for WS2812 RGB LED stripe using ESP32
언어: C++
#include <Adafruit_NeoPixel.h> // Include the Adafruit NeoPixel library

#define LED_PIN 14 // NeoPixel LED strip
#define NUM_LEDS 8 // Number of LEDs

// Create an instance of the Adafruit_NeoPixel class
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800); 

void setup() {
  strip.begin(); // Initialize the NeoPixel strip
  strip.show(); // Set initial color to black
}

void loop() {
  // Turn on LEDs one by one
  for (int i = 0; i < NUM_LEDS; i++) {
    strip.setPixelColor(i, 100, 45, 0); // Set the color of the i-th LED to red
    strip.show(); // Update the LED strip with the new colors
    delay(100); // Wait for 100 milliseconds
  }
  
  // Turn off LEDs one by one
  for (int i = 0; i < NUM_LEDS; i++) {
    strip.setPixelColor(i, 0, 0, 0); // Set the color of the i-th LED to black (turn it off)
    strip.show(); // Update the LED strip with the new colors
    delay(100); // Wait for 100 milliseconds
  }
}

필요할 수 있는 것들

자원 및 참고자료

아직 자원이 없습니다.

파일📁

파일이 없습니다.