iFBalance-코딩으로 뽀샤버리기

1강. Color LED 제어하기 - 1부

Posted by INDIFROG on 2021-03-01
Words 495 and Reading Time 3 Minutes
Viewed Times

1강. Color LED 제어하기 - 1부

ESP32나 iFZero 보드를 이용해서 처음으로 코딩 공부를 하시는 분들은 앞서 강의한 자료인 iFLine편을 먼저 살펴보시는 것이 순서인 듯 합니다.

2020-06-23-iFLine-개발강좌_01 ➾
2020-06-24-iFLine-개발강좌_02 ➾
2020-06-25-iFLine-개발강좌_03 ➾
2020-06-26-iFLine-개발강좌_04 ➾

iFBalance에 대한 강좌를 시작하기에 앞서 기존에 잘 정리되어 있는 iFLine 강좌편 중에서 1강 ~ 4강까지 먼저 숙지를 하시고 큰 어려움이 없으시다면 입문을 하시기 바랍니다. 다행히도 이번 강의도 iFLine의 5강과 유사한 내용으로 시작을 합니다.

그러나 iFLine에서 설명드린 것보다 좀 더 진보적으로 COLOR LED를 컨트롤하기 위한 클래스를 만들고 이 클래스에서 스스로 COLOR LED를 동작시키도록 Free RTOS 기반에서 동작하는 코드를 설명할 예정입니다.

iFBalance 보드에 연결된 Color LED 제어

이번 강좌는 iFBalance의 좌우로 2개, ToF샌서 보드에 2개의 Color LED를 제어하는 코드를 구현하는 것입니다.
iFBalance는 iFLine과 마찬가지로 동일하게 신호선 1개(GPIO 02)로 4개의 RGB Color LED를 제어할 수 있습니다.

  • Color LED SK6812Mini RGB LED 부품을 사용하고 있습니다.
  • Color LED 제어 신호는 1번 LED의 1 Din 패드를 시작으로 3 DOUT으로 신호가 전달되어 반복적으로 2, 3, 4 LED의 번호 순서대로 동작하도록 설계가 되어 있습니다.

iFBalance COLOR_LED

따라서 3D 그림처럼 개발자가 직접 iFZero 보드의 GPIO2 PIN 소켓과 1번 LED의 1 Din 패드가 연결된
3COLOR으로 표시된 소켓에 전선을 직접 연결할 필요가 있습니다.

( 주의 : ESP32-PICO-V3칩 GPIO중에서 INPUT 전용핀과 GPIO12, GPIO20 을 제외하고 대부분 사용이 가능합니다. 
단, 예제에서는 GPIO2를 사용한 것입니다. )

VSVODE 라이브러리 추가 ( NeoPixelBus )

Color LED를 동작시키기 위해서는 Color LED 구동 라이브러리를 반드시 설치를 해야 합니다.

초기에 개발되어 널리 알려진 Adafruit사의 Neopixel RGB 라이브러리와 호환이 가능하지만 이 라이브러리엔 심각한 버그가 존재합니다. 1번 LED가 간혹, 랜덤하게 ON / OFF가 발생하는 문제가 있습니다. 사실 위 문제는 ESP32에서만 발생하는 소프트웨어적인 버그입니다.

따라서 이 문제를 해결한 소프트웨어 라이브러리를 사용하면 되는데 그것이 바로 NeoPixelBus 라이브러리입니다.

VSCODE_LIB

Visual Studio Code의 개미 얼굴 아이콘을 눌러서 PIO Home의 Libraries 패널에서 NeoPixelBus 라이브러리를 추가할 수 있습니다.

iFZero 보드에 연결된 COLOR LED 제어 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <NeoPixelBus.h>


#define PIN GPIO_NUM_2
#define colorSaturation 128

NeoPixelBus<NeoGrbFeature, Neo800KbpsMethod> strip(4, PIN);

RgbColor red(colorSaturation, 0, 0);
RgbColor green(0, colorSaturation, 0);
RgbColor blue(0, 0, colorSaturation);
RgbColor white(colorSaturation);
RgbColor black(0);

long nPixel = 0;

void setup()
{
Serial.begin(115200);

////////////////////////////////////////////////////////////////
//
strip.Begin();
strip.SetPixelColor(0, black);
strip.Show(); // Send the updated pixel colors to the hardware.

}

void loop() {
int c = ++nPixel % 4;
strip.SetPixelColor(0, c==0? blue : black);
strip.SetPixelColor(1, c==1? blue : black);
strip.SetPixelColor(2, c==2? blue : black);
strip.SetPixelColor(3, c==3? blue : black);
strip.Show(); // Send the updated pixel colors to the hardware.

delay( 1000 );

}

VSCODE_LIB

위 코드는 간단히 1초마다 nPixel 변수 값을 증가하면서 4로 나눈 나머지의 값에 해당하는 위치의 Color LED 만 Blue 색으로 켜도록 동작하는 코드입니다.

이번 강좌에서는 Visual Studio Code에서 외부 라이브러리를 추가하는 방법과 iFBalance의 Color LED를 동작시키는 방법을 공부했습니다.