티스토리 뷰
이전 포스팅 '저렴한 RGB LED(WS2812B) 구임/사용기' 라는 포스팅에서 WS2812B 에 대하여 잠깐 소개한적이 있다. 간단한 사용 방법에 대하여 소개를 하지 않아서 본격적으로 사용법에 대하여 소개를 하려고 한다.
우선 구입은 Aliexpress 와 같은 해외 사이트를 추천한다. 글을 올린 시간 기준으로 100개에 약 18달러정도 한다.
뿐만 아니라 LED 매트릭스와 스트립도 검색하면 싼 값에 구입할 수 있다. WS2812B는 복잡한 배선과 코딩하기 어려운 일반적인 RGB LED 의 좋은 대안이 될 수 있다.
WS2812B 는 사실 Adafruit 의 Neopixel 에도 사용되는데 이는 Neopixel 의 라이브러리를 그대로 이용해도 사용 가능하다. (옵션 변경을 통하여 WS2811 도 가능하다, 아래 예제코드 참고.)
(Neopixel)
우선 Neopixel 라이브러리 프로젝트(https://github.com/adafruit/Adafruit_NeoPixel) 를 library 폴더에 다운받아 Arduino 툴에 라이브러리로 추가한다. (스케치 -> 라이브러리 가져오기 -> add Library 를 선택한 뒤에 NeoPixel 라이브러리 폴더 선택) Neopixel 라이브러리 라이센스가 GPLv3 인 것에 유의하자. (사용/수정시 GPLv3 로 소스 배포, 상업적 사용 불가)
우선 예제를 한 번 실행시켜보자. 상단 메뉴의 '파일 -> 예제 -> Neopixel -> Simple' 을 열면 간단한 사용 예제를 볼 수 있다. 만약 예제가 안 나온다면 아두이노툴을 재시작 하자.
이 곳에서 여러분이 연결한 WS2812B 의 개수를 NUMPIXELS 에 설정하고 PIN 에 연결되는 디지털 핀을 설정할 수 있다.
WS2812B 와 아두이노의 연결 회로는 다음과 같이 매우 간단하다.
자, 이제 아까 불러온 예제 파일을 조금 수정하여 Serial 콘솔을 통하여 읽어온 값을 기반으로 선택한 LED 의 색을 바꾸는 간단한 프로젝트를 만들어 보겠다.
우선 WS2812B 10개를 다음과 같이 연결해 보았다.
그리고 다음과 같은 코드를 작성여 아두이노로 업로드 하였다.
예제코드:
#include <Adafruit_NeoPixel.h> // 컨트롤 핀 #define PIN 6 // WS2812B 의 연결된 개수 #define NUMPIXELS 10 #define READ_BUFFER_SIZE 6
// 만약 WS2811 를 사용할 경우 NEO_KHZ800 을 NEO_KHZ400 으로 변경해야 한다. Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); int R = 0, G = 0, B = 0, selectNum; char buffer[READ_BUFFER_SIZE]; int readNumber(); void setup() { pixels.begin(); // This initializes the NeoPixel library. Serial.begin(9600); } void loop() { // 핀 번호 입력. Serial.print("Select LED(0~"); Serial.print(NUMPIXELS - 1); Serial.print(") : "); // Serial 에 값이 들어올 때 까지 대기하는 동안 지속적으로 업데이트 해준다. while(!Serial.available()) pixels.show(); // 값을 입력 받는다. selectNum = readNumber(); Serial.print("R(0~255) : "); while(!Serial.available()) pixels.show(); R = readNumber(); Serial.print("G(0~255) : "); while(!Serial.available()) pixels.show(); G = readNumber(); Serial.print("B(0~255) : "); while(!Serial.available()) pixels.show(); B = readNumber(); pixels.setPixelColor(selectNum, pixels.Color(R,G,B)); pixels.show(); } // String 으로 입력받은 숫자를 integer 형태로 변환하여 반환한다. int readNumber() { int index = 0, number = 0; while(Serial.available()) { delay(5); buffer[index++] = Serial.read(); buffer[index] = '\0'; if(index + 1 == READ_BUFFER_SIZE) { break; } } Serial.flush(); number = atoi(buffer); Serial.println(number); return number; }
결과 :
시리얼 콘솔을 통하여 LED 의 번호를 설정하고 RGB 값을 설정한다.
색상을 설정한 LED 는 이렇게 불이 들어온다.
'개발 관련 > 아두이노,IOT' 카테고리의 다른 글
아두이노 남아있는 메모리 (메모리 사용량) 확인하기 - 메모리 공포에서 벗어나자. (0) | 2014.10.14 |
---|---|
Attiny85 에 아두이노 부트로더 올리기 + 삽질기. (2) | 2014.10.07 |
아두이노에서 OLED 제어하기. (0) | 2014.08.19 |
아두이노에서 PWM 제어와 NPN 트랜지스터를 이용한 LED 밝기 및 모터 속도 조절. (6) | 2014.08.10 |
FTDI 사용하여 업로드시 avrdude: stk500_recv(): programmer is not responding 가 뜰때. - 아두이노 미니, 서드파티 아두이노 에서. (4) | 2014.07.13 |
- Total
- Today
- Yesterday
- json
- 스마트 무드등
- 개발
- 블루투스
- Iot
- arduino
- 칩두이노
- 침블락
- 가습기
- 부트로더
- ENC28J60
- 아두이노
- ESP8266
- Android
- ndk
- HC-06
- activity
- oled
- 알리익스프레스
- 이더넷
- 안드로이드 개발
- NeoPixel
- 병렬 프로그래밍
- bluetooth
- Cheapduino
- 안드로이드
- Java
- noidemcu
- WS2812B
- ATtiny85
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |