본문 바로가기

ESP32

ESP32-C6 RGB LED 제어

반응형

 

ESP32-C6 마이크로컨트롤러에 내장된 RGB LED를 제어하는 ​​아두이노 코드가 포함되어 있습니다. 이 코드를 사용하면 LED 색상과 밝기를 간단하고 유연하게 관리할 수 있습니다. 

 

ESP32-C6에 내장된 RGB LED는 에 연결되어 있습니다 GPIO 8. 이는 코드에 이미 설정되어 있지만, 다른 구성 요소를 사용하거나 핀 구성을 수정하는 경우 알아두는 것이 중요합니다. 

 

특징

  • GPIO 8에 내장된 RGB LED를 간편하게 제어할 수 있습니다.
  • 일반적인 색상에 대한 사전 정의된 색상 상수
  • 밝기 조절 (0-100%)
  • RGB 색상을 간단하게 설정할 수 있는 기능입니다.
  • 다양한 색상과 패턴을 추가하여 쉽게 확장할 수 있습니다.
  • 재미있는 패턴(숨쉬기, 무지개, 반짝임)이 담긴 예시 폴더 

 

설치

 

arduino.cc 에서 Arduino IDE를 설치하세요.

Arduino IDE에 ESP32 보드 지원을 추가합니다.

아두이노 IDE를 엽니다.

파일 > 환경설정으로 이동하세요.

"추가 보드 관리자 URL"에 다음 URL을 추가하세요. https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

도구 > 보드 > 보드 관리자로 이동하세요.

"esp32"를 검색하여 최신 버전을 설치하세요.

Adafruit NeoPixel 라이브러리를 설치하세요:

Sketch > 라이브러리 포함 > 라이브러리 관리로 이동하세요.

"Adafruit NeoPixel"을 검색하세요.

최신 버전을 설치하세요 

 

맞춤 설정

  • 이 값은 내장 LED용 LED_PIN 8 으로 설정되어 있습니다 . 외부 LED를 사용하지 않는 한 이 값을 변경하지 마십시오 .
  • RGB구조체 형식 으로 새로운 색상 정의를 추가하세요.
  • setColor() 함수에 값(0~100)을 전달하여 밝기를 조절하세요.
  • setColor()다양한 blinkColor()기능을 조합하여 새로운 조명 패턴을 만들어 보세요.
  • BLINK_DURATION깜빡임 패턴의 속도를 변경하려면 수정하세요.
  • 밝기 수준은 blinkColor()고정된 50% 값을 수정하여 사용자 지정할 수 있습니다. 

기본 Blink 코드

 

#include <Adafruit_NeoPixel.h>
constexpr uint8_t LED_PIN = 8;
constexpr uint8_t NUM_LEDS = 1;
Adafruit_NeoPixel rgbLed(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
struct RGB {
    uint8_t r, g, b;
};

constexpr RGB COLOR_OFF   = {0, 0, 0};
// ...Feel free to add more colors here...
constexpr RGB CUSTOM_COLOR = {255, 0, 255}; 

void setColor(const RGB& color, uint8_t brightness = 100) {
    uint16_t scale = (uint16_t)brightness * 255 / 100;
    uint8_t r = (uint8_t)(((uint16_t)color.r * scale) / 255);
    uint8_t g = (uint8_t)(((uint16_t)color.g * scale) / 255);
    uint8_t b = (uint8_t)(((uint16_t)color.b * scale) / 255);
    rgbLed.setPixelColor(0, rgbLed.Color(r, g, b));
    rgbLed.show();
}

void setup() {
    rgbLed.begin(); 
    rgbLed.show(); 
}

void loop() {
    setColor(CUSTOM_COLOR, 50); // 50% brightness
    delay(1000);
    setColor(COLOR_OFF);
    delay(1000);
}

 

 

페이드 인 아웃 코드

 

#include <Adafruit_NeoPixel.h>

constexpr uint8_t LED_PIN = 8;
constexpr uint8_t NUM_LEDS = 2;    
Adafruit_NeoPixel rgbLed(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);

const uint8_t BASE_R = 180, BASE_G = 0, BASE_B = 255; // purple

void setup() {
  rgbLed.begin();
  rgbLed.show();
}

inline uint8_t scaleColor(uint8_t base, uint8_t level) {
  return (uint8_t)((uint16_t)base * level / 255);
}

void loop() {
  for (int i = 0; i < 512; ++i) {
    uint8_t level = (i < 256) ? i : (511 - i); 

    rgbLed.setPixelColor(0, rgbLed.Color(
      scaleColor(BASE_R, level),
      scaleColor(BASE_G, level),
      scaleColor(BASE_B, level)));

    if (NUM_LEDS > 1) {
      uint8_t inv = 255 - level;
      rgbLed.setPixelColor(1, rgbLed.Color(
        scaleColor(BASE_R, inv),
        scaleColor(BASE_G, inv),
        scaleColor(BASE_B, inv)));
    }

    rgbLed.show();
    delay(5);
  }
}

 

 

무지개 사이클 HSV Color

#include <Adafruit_NeoPixel.h>
#include <cmath>

constexpr uint8_t LED_PIN = 8;
constexpr uint8_t NUM_LEDS = 1;

Adafruit_NeoPixel rgbLed(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);

// brightness variable (0-255)
uint8_t brightness = 255; 

struct RGB { uint8_t r, g, b; };

RGB hsvToRgb(float h, float s, float v) {
  float c = v * s;
  float x = c * (1 - fabs(fmod(h / 60.0f, 2) - 1));
  float m = v - c;
  float r=0, g=0, b=0;
  if (h < 60) { r=c; g=x; }
  else if (h < 120) { r=x; g=c; }
  else if (h < 180) { g=c; b=x; }
  else if (h < 240) { g=x; b=c; }
  else if (h < 300) { r=x; b=c; }
  else { r=c; b=x; }
  return { 
    (uint8_t)((r+m) * brightness), 
    (uint8_t)((g+m) * brightness), 
    (uint8_t)((b+m) * brightness) 
  };
}

void setup() {
  rgbLed.begin();
  rgbLed.show();
}

void setColor(const RGB &c) {
  rgbLed.setPixelColor(0, rgbLed.Color(c.r, c.g, c.b));
  rgbLed.show();
}

void loop() {
  constexpr float cycleMs = 6000.0f; // 6 second full loop
  unsigned long ms = millis();
  float hue = fmod(ms, (unsigned long)cycleMs) / cycleMs * 360.0f;
  RGB c = hsvToRgb(hue, 1.0f, 1.0f);
  setColor(c);
  delay(10); // smooth
}

 

 

랜덤 컬러 폭죽

 

#include <Adafruit_NeoPixel.h>

constexpr uint8_t LED_PIN = 8;
constexpr uint8_t NUM_LEDS = 1;

// brightness variable (0-255 range)
constexpr uint8_t brightness = 255;

Adafruit_NeoPixel rgbLed(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  rgbLed.begin();
  rgbLed.setBrightness(brightness);
  rgbLed.show();
  randomSeed(analogRead(A0)); // seed randomness (A0 floating is fine)
}

void setColor(uint8_t r, uint8_t g, uint8_t b) {
  rgbLed.setPixelColor(0, rgbLed.Color(r, g, b));
  rgbLed.show();
}

void loop() {
  uint8_t r = random(0, 256);
  uint8_t g = random(0, 256);
  uint8_t b = random(0, 256);
  setColor(r, g, b);
  delay(150 + random(0, 400));
  setColor(0, 0, 0);
  delay(50 + random(0, 200));
}

 

 

 

 

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

당신의 성공을 위해 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩