"네오픽셀 (NeoPixel)"의 두 판 사이의 차이
(→미니멀 코드) |
(네오픽셀, neopixel, 아두이노, arduino, snap4arduino, scratch, 피지컬컴퓨팅, physical computing, 프로토타이핑, prototyping) |
||
| 7번째 줄: | 7번째 줄: | ||
* 신호선에 연결하는 저항은 선택사항. 300~500옴 사이 적당한 값으로. 역시 회로 보호 역할. | * 신호선에 연결하는 저항은 선택사항. 300~500옴 사이 적당한 값으로. 역시 회로 보호 역할. | ||
* 신호선은 당연히 pwm 출력가능한 핀 사용. | * 신호선은 당연히 pwm 출력가능한 핀 사용. | ||
| + | * 아두이노와 외부전원 GND 연결하는 것 잊지않도록 주의 | ||
== 아두이노에서 == | == 아두이노에서 == | ||
| − | * 라이브러리 설치 | + | * 라이브러리 설치 |
아두이노 IDE의 library manager에서 바로 설치 가능하다. | 아두이노 IDE의 library manager에서 바로 설치 가능하다. | ||
http://d.pr/i/5eEtb.jpg | http://d.pr/i/5eEtb.jpg | ||
| 32번째 줄: | 33번째 줄: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| − | ==== 라이브러리 포함시키기 ==== | + | ==== step1. 라이브러리 포함시키기 ==== |
'#include <Adafruit_NeoPixel.h>'로 라이브러리 포함시키기 | '#include <Adafruit_NeoPixel.h>'로 라이브러리 포함시키기 | ||
| − | ==== 연결핀 정의==== | + | ==== step2. 연결핀 정의==== |
'#define PIN 9' 네오픽셀 연결된 핀 정의 ( 꼭 필요하진 않지만 편의를 위해 define) | '#define PIN 9' 네오픽셀 연결된 핀 정의 ( 꼭 필요하진 않지만 편의를 위해 define) | ||
| − | ==== 네오픽셀 오브젝트 만들기 ==== | + | ==== step3. 네오픽셀 오브젝트 만들기 ==== |
'Adafruit_NeoPixel strip = Adafruit_NeoPixel( 60, PIN, NEO_GRB + NEO_KHZ800);'<br> | 'Adafruit_NeoPixel strip = Adafruit_NeoPixel( 60, PIN, NEO_GRB + NEO_KHZ800);'<br> | ||
<br> | <br> | ||
| 50번째 줄: | 51번째 줄: | ||
* NEO_KHZ400 -> 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)<br> | * NEO_KHZ400 -> 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)<br> | ||
| − | ==== setup() ==== | + | ==== step4. setup() ==== |
strip.begin(); //작동시작<br> | strip.begin(); //작동시작<br> | ||
strip.show(); //초기값(모두 꺼짐) 적용 | strip.show(); //초기값(모두 꺼짐) 적용 | ||
| − | ==== | + | ==== step5. 색 설정 ==== |
| − | |||
| − | |||
'strip.setPixelColor(n, red, green, blue);'에서 | 'strip.setPixelColor(n, red, green, blue);'에서 | ||
| 62번째 줄: | 61번째 줄: | ||
* red, gree, blue은 0~255 사이 값.<br> | * red, gree, blue은 0~255 사이 값.<br> | ||
* W채널이 있는 led의 경우 'strip.setPixelColr(n, red, green, blue, white);'로 사용. | * W채널이 있는 led의 경우 'strip.setPixelColr(n, red, green, blue, white);'로 사용. | ||
| + | |||
| + | ==== step 6. 설정한 색 적용 ==== | ||
| + | strip.show() 로 설정한 변경 적용. | ||
=== 라이브러리 === | === 라이브러리 === | ||
| 91번째 줄: | 93번째 줄: | ||
|} | |} | ||
| + | |||
| + | == snap4arduino 에서 == | ||
| + | <youtube>anOZcTTpj4w" frameborder="0" allowfullscreen></youtube> | ||
| + | B.Romagosa가 snap4arduino용 neopixel 라이브러리를 만들어두었다. neopixel strip,circle과 neomatrix 를 모두 지원한다. | ||
| + | |||
| + | 블럭정의파일 추가바람. | ||
| + | |||
| + | === step1. 아두이노 네오픽셀 라이브러리 설치 === | ||
| + | 아두이노 개발환경에서 직접 설치할 수 있다. library manager에서 | ||
| + | * Adafruit GFX | ||
| + | * Adafruit NeoPixel | ||
| + | * Adafruit NeoMatrix | ||
| + | 를 찾아 설치한다. | ||
| + | |||
| + | === step2. snap4arduino + neopixel 용 아두이노 스케치 업로드 === | ||
| + | standardFirmata의 modification이다. 아래 파일을 받거나 B.Romagosa의 깃허브페이지[https://github.com/bromagosa/Snap4Arduino/wiki/Firmata-Modifications#using-an-adafruit-neopixel-stripe]에서 받는다. | ||
| + | [[파일:StandardFirmata-NeoPixel.ino|섬네일|snap4arduino + neopixel용 아두이노 스케치]] | ||
| + | ==== StandardFirmata-NeoPixel.ino 중요부분 ==== | ||
| + | <stylehighlighter lan="arduino"> | ||
| + | |||
| + | ... | ||
| + | |||
| + | /* NEOPIXELS */ | ||
| + | #include <Adafruit_GFX.h> | ||
| + | #include <Adafruit_NeoMatrix.h> | ||
| + | #include <Adafruit_NeoPixel.h> | ||
| + | #define NEOPIXEL 0x72 | ||
| + | #define NEOMATRIX 0x73 | ||
| + | #define NEOPIXEL_REGISTER 0x74 | ||
| + | #define NEOMATRIX_REGISTER 0x75 | ||
| + | #define MAX_NEO 1 | ||
| + | |||
| + | Adafruit_NeoPixel *neopixels = NULL; | ||
| + | Adafruit_NeoMatrix *neomatrix = NULL; | ||
| + | |||
| + | ... | ||
| + | </stylehighlighter> | ||
| + | * sysex명령어 0x72는 NEOPIXEL 컬러설정에 할당. | ||
| + | * sysex명령어 0x73은 NEOMATRIX 컬러설정에 할당. | ||
| + | * sysex명령어 0x74는 NEOPIXEL 초기화에 할당. | ||
| + | * sysex명령어 0x75는 NEOMATRIX 초기화에 할당. | ||
| + | |||
| + | </stylehighlighter lan="arduino"> | ||
| + | |||
| + | ... | ||
| + | |||
| + | switch (command) { | ||
| + | |||
| + | ... | ||
| + | |||
| + | case NEOPIXEL_REGISTER: | ||
| + | { | ||
| + | int pin = argv[0]; | ||
| + | int count = argv[1]; | ||
| + | |||
| + | if (neopixels != NULL) { | ||
| + | delete neopixels; | ||
| + | } | ||
| + | neopixels = new Adafruit_NeoPixel(count, pin, NEO_GRB + NEO_KHZ800); | ||
| + | neopixels->begin(); | ||
| + | } | ||
| + | break; | ||
| + | case NEOPIXEL: | ||
| + | { | ||
| + | int index = argv[0]; | ||
| + | int red = argv[1]; | ||
| + | int green = argv[2]; | ||
| + | int blue = argv[3]; | ||
| + | neopixels->setPixelColor(index, red, green, blue); | ||
| + | neopixels->show(); | ||
| + | } | ||
| + | break; | ||
| + | case NEOMATRIX_REGISTER: | ||
| + | { | ||
| + | int pin = argv[0]; | ||
| + | int width = argv[1]; | ||
| + | int height = argv[2]; | ||
| + | |||
| + | if (neomatrix != NULL) { | ||
| + | delete neomatrix; | ||
| + | } | ||
| + | neomatrix = new Adafruit_NeoMatrix(width, height, pin, | ||
| + | NEO_MATRIX_TOP + NEO_MATRIX_RIGHT + | ||
| + | NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE, | ||
| + | NEO_GRB + NEO_KHZ800); | ||
| + | neomatrix->begin(); | ||
| + | } | ||
| + | break; | ||
| + | case NEOMATRIX: | ||
| + | { | ||
| + | int id = 0; | ||
| + | int x = argv[0]; | ||
| + | int y = argv[1]; | ||
| + | int red = argv[2]; | ||
| + | int green = argv[3]; | ||
| + | int blue = argv[4]; | ||
| + | neomatrix->drawPixel(x, y, neomatrix->Color(red, green, blue)); | ||
| + | neomatrix->show(); | ||
| + | } | ||
| + | break; | ||
| + | |||
| + | } | ||
| + | |||
| + | ... | ||
| + | </stylehighlighter> | ||
| + | |||
| + | === step 3. snap4arduino 블록 정의파일 불러오기 === | ||
| + | "파일메뉴 > Import..." 메뉴로 블록정의파일 불러온다. | ||
| + | 블록정의파일은 아래에서 다운받거나 B.Romagosa의 github페이지에서 받을 수 있다. | ||
| + | [[파일:Snap4arduino block-NeoPixel.xml.zip|섬네일|snap4arduino + neopixel용 블럭 ]] | ||
| + | 불러오기 이후 Arduino 명령어 모음에서 아래 두개의 블럭이 추가된 것을 확인한다. | ||
| + | https://cl.ly/3C1p3h3H431V | ||
| + | |||
| + | ==== 블록정의파일 중요부분 (심화)==== | ||
| + | https://cl.ly/1m2E213T2A3T | ||
| + | https://cl.ly/0x2x0c1S2S2u | ||
| + | |||
| + | === step 4. 미니멈 코드 === | ||
| + | https://cl.ly/2Q303V1K2j22 | ||
| + | * attach 60 - led의 갯수 | ||
| + | * pin 9 - neopixel이 연결된 아두이노 핀. | ||
| + | * set LED 3 - 3번째 led | ||
| + | * R: G: B: - 0~255사이 red, green, blue 값. | ||
== 참고 == | == 참고 == | ||
| − | [[파일:Adafruit_NeoPixel-master.zip]] | + | adafruit 네오픽셀 예제 [[파일:Adafruit_NeoPixel-master.zip]] |
| + | |||
| + | adafruit 네오픽셀 교육자료 [https://learn.adafruit.com/adafruit-neopixel-uberguide/overview] | ||
| − | https:// | + | snap4arduino 용 라이브러리 [https://github.com/bromagosa/Snap4Arduino/wiki/Firmata-Modifications#using-an-adafruit-neopixel-stripe] |
2017년 5월 19일 (금) 10:30 판
=='"UNIQ--h-0--QINU"' 개요 ==
[[
]]
=='"UNIQ--h-1--QINU"' 회로 연결 ==

- neopixel 부품의 volt 규격 확인해 전원 연결. 연결된 led 가 많다면 큰 전류 공급 가능해야함. (연결된 led 가 많지 않다면 아두이노 자체전원 사용해도 됨.)
- 전원에 연결하는 캐패시터는 선택사항. 갑작스런 전류로 led 손상되는 것을 방지하기 위함.
- 신호선에 연결하는 저항은 선택사항. 300~500옴 사이 적당한 값으로. 역시 회로 보호 역할.
- 신호선은 당연히 pwm 출력가능한 핀 사용.
- 아두이노와 외부전원 GND 연결하는 것 잊지않도록 주의
=='"UNIQ--h-2--QINU"' 아두이노에서 ==
==='"UNIQ--h-3--QINU"' 미니멀 코드 ===
'"UNIQ--syntaxhighlight-00000000-QINU"'
===='"UNIQ--h-4--QINU"' step1. 라이브러리 포함시키기 ====
'#include <Adafruit_NeoPixel.h>'로 라이브러리 포함시키기
===='"UNIQ--h-5--QINU"' step2. 연결핀 정의====
'#define PIN 9' 네오픽셀 연결된 핀 정의 ( 꼭 필요하진 않지만 편의를 위해 define)
===='"UNIQ--h-6--QINU"' step3. 네오픽셀 오브젝트 만들기 ====
'Adafruit_NeoPixel strip = Adafruit_NeoPixel( 60, PIN, NEO_GRB + NEO_KHZ800);'
여기에서
- 60 -> led갯수,
- PIN -> 신호핀,
- NEO_GRB -> Pixels are wired for GRB bitstream (most NeoPixel products),
- NEO_RGB -> Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2),
- NEO_GRBW -> 어떤 엘이디들은
- NEO_RGBW -> W채널을 별도로 가지고 있다.
- NEO_KHZ800 -> 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs),
- NEO_KHZ400 -> 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
===='"UNIQ--h-7--QINU"' step4. setup() ====
strip.begin(); //작동시작
strip.show(); //초기값(모두 꺼짐) 적용
===='"UNIQ--h-8--QINU"' step5. 색 설정 ====
'strip.setPixelColor(n, red, green, blue);'에서
- n 은 n번째 led (첫번째 led가 0번째임.)
- red, gree, blue은 0~255 사이 값.
- W채널이 있는 led의 경우 'strip.setPixelColr(n, red, green, blue, white);'로 사용.
===='"UNIQ--h-9--QINU"' step 6. 설정한 색 적용 ====
strip.show() 로 설정한 변경 적용.
==='"UNIQ--h-10--QINU"' 라이브러리 ===
{|border="1"
|-
|setPixelColor(n, r,g,b, [w])
|n = led 번호 (0부터...)
r, g, b, w = 0~255 사이 각 컬러채널 값
|-
|setPixelColor(n, color)
|n = led 번호
color = 32bit 컬러 값 (아래 Color()함수 참고)
|-
|utin32_t Color(r,g,b);
|32bit 컬러값을 만들 수 있음.
예를 들어, 'uint32_t magenta = strip.Color(255, 0, 255);'
|-
|show()
|색 설정후에는 언제나 'show();'를 해 주어야 비로소 적용이 된다.
|-
|uint32_t color = strip.getPixelColor(27);
|27번 led의 컬러를 알아볼 수있다.
|-
|uint16_t n = strip.numPixels();
|몇개의 led를 가진 스트립인지 알아볼 수 있다.
|-
|strip.setBrightness(64);
|전체적인 밝기를 조절 (0~255)할 수 있다. setup()에서 최초 사용하는 용도로 만들어진 함수.
|}
=='"UNIQ--h-11--QINU"' snap4arduino 에서 ==
'"UNIQ--youtube-00000002-QINU"'
B.Romagosa가 snap4arduino용 neopixel 라이브러리를 만들어두었다. neopixel strip,circle과 neomatrix 를 모두 지원한다.
블럭정의파일 추가바람.
==='"UNIQ--h-12--QINU"' step1. 아두이노 네오픽셀 라이브러리 설치 ===
아두이노 개발환경에서 직접 설치할 수 있다. library manager에서
- Adafruit GFX
- Adafruit NeoPixel
- Adafruit NeoMatrix 를 찾아 설치한다.
==='"UNIQ--h-13--QINU"' step2. snap4arduino + neopixel 용 아두이노 스케치 업로드 ===
standardFirmata의 modification이다. 아래 파일을 받거나 B.Romagosa의 깃허브페이지[[1]에서 https://github.com/bromagosa/Snap4Arduino/wiki/Firmata-Modifications#using-an-adafruit-neopixel-stripe]에서] 받는다.
파일:StandardFirmata-NeoPixel.ino
===='"UNIQ--h-14--QINU"' StandardFirmata-NeoPixel.ino 중요부분 ====
...
/* NEOPIXELS */
- include
- include
- include
- define NEOPIXEL 0x72
- define NEOMATRIX 0x73
- define NEOPIXEL_REGISTER 0x74
- define NEOMATRIX_REGISTER 0x75
- define MAX_NEO 1
Adafruit_NeoPixel *neopixels = NULL; Adafruit_NeoMatrix *neomatrix = NULL;
...
- sysex명령어 0x72는 NEOPIXEL 컬러설정에 할당.
- sysex명령어 0x73은 NEOMATRIX 컬러설정에 할당.
- sysex명령어 0x74는 NEOPIXEL 초기화에 할당.
- sysex명령어 0x75는 NEOMATRIX 초기화에 할당.
</stylehighlighter lan="arduino">
...
switch (command) {
...
case NEOPIXEL_REGISTER: { int pin = argv[0]; int count = argv[1]; if (neopixels != NULL) { delete neopixels; } neopixels = new Adafruit_NeoPixel(count, pin, NEO_GRB + NEO_KHZ800); neopixels->begin(); } break; case NEOPIXEL: { int index = argv[0]; int red = argv[1]; int green = argv[2]; int blue = argv[3]; neopixels->setPixelColor(index, red, green, blue); neopixels->show(); } break; case NEOMATRIX_REGISTER: { int pin = argv[0]; int width = argv[1]; int height = argv[2]; if (neomatrix != NULL) { delete neomatrix; } neomatrix = new Adafruit_NeoMatrix(width, height, pin, NEO_MATRIX_TOP + NEO_MATRIX_RIGHT + NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE, NEO_GRB + NEO_KHZ800); neomatrix->begin(); } break; case NEOMATRIX: { int id = 0; int x = argv[0]; int y = argv[1]; int red = argv[2]; int green = argv[3]; int blue = argv[4]; neomatrix->drawPixel(x, y, neomatrix->Color(red, green, blue)); neomatrix->show(); } break;
}
...
==='"UNIQ--h-15--QINU"' step 3. snap4arduino 블록 정의파일 불러오기 ===
"파일메뉴 > Import..." 메뉴로 블록정의파일 불러온다.
블록정의파일은 아래에서 다운받거나 B.Romagosa의 github페이지에서 받을 수 있다.
파일:Snap4arduino block-NeoPixel.xml.zip
불러오기 이후 Arduino 명령어 모음에서 아래 두개의 블럭이 추가된 것을 확인한다.
https://cl.ly/3C1p3h3H431V
===='"UNIQ--h-16--QINU"' 블록정의파일 중요부분 (심화)====
https://cl.ly/1m2E213T2A3T
https://cl.ly/0x2x0c1S2S2u
==='"UNIQ--h-17--QINU"' step 4. 미니멈 코드 ===
https://cl.ly/2Q303V1K2j22
- attach 60 - led의 갯수
- pin 9 - neopixel이 연결된 아두이노 핀.
- set LED 3 - 3번째 led
- R: G: B: - 0~255사이 red, green, blue 값.
=='"UNIQ--h-18--QINU"' 참고 ==
adafruit 네오픽셀 예제 파일:Adafruit NeoPixel-master.zip
adafruit 네오픽셀 교육자료 [https://learn.adafruit.com/adafruit-neopixel-uberguide/overview]
snap4arduino 용 라이브러리 [https://github.com/bromagosa/Snap4Arduino/wiki/Firmata-Modifications#using-an-adafruit-neopixel-stripe]
