"네오픽셀 (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(); //초기값(모두 꺼짐) 적용
  
==== loop() ====
+
==== step5. 색 설정 ====
색설정 후 show()로 적용.
 
 
 
 
'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://learn.adafruit.com/adafruit-neopixel-uberguide/overview
+
snap4arduino 용 라이브러리 [https://github.com/bromagosa/Snap4Arduino/wiki/Firmata-Modifications#using-an-adafruit-neopixel-stripe]

2017년 5월 19일 (금) 10:30 판

=='"UNIQ--h-0--QINU"' 개요 == [[scsCq.jpg]] =='"UNIQ--h-1--QINU"' 회로 연결 == 5BQjV.jpg

  • neopixel 부품의 volt 규격 확인해 전원 연결. 연결된 led 가 많다면 큰 전류 공급 가능해야함. (연결된 led 가 많지 않다면 아두이노 자체전원 사용해도 됨.)
  • 전원에 연결하는 캐패시터는 선택사항. 갑작스런 전류로 led 손상되는 것을 방지하기 위함.
  • 신호선에 연결하는 저항은 선택사항. 300~500옴 사이 적당한 값으로. 역시 회로 보호 역할.
  • 신호선은 당연히 pwm 출력가능한 핀 사용.
  • 아두이노와 외부전원 GND 연결하는 것 잊지않도록 주의

=='"UNIQ--h-2--QINU"' 아두이노에서 ==

  • 라이브러리 설치 아두이노 IDE의 library manager에서 바로 설치 가능하다. 5eEtb.jpg

==='"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 */

  1. include
  2. include
  3. include
  4. define NEOPIXEL 0x72
  5. define NEOMATRIX 0x73
  6. define NEOPIXEL_REGISTER 0x74
  7. define NEOMATRIX_REGISTER 0x75
  8. 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]