2023年3月23日新規作成
2023年3月23日最終更新今更ですがNeoPixelについて調べました。CytronMakerPiPicoに装備されているNeoPixelがなかなかうまく使えなかったので理解を深めておく必要があると考えました。
そもそもNeoPixelとはマイコン入りの RGB LED の総称です。装飾にLEDを使う事を目的とした商品だと認識しています。
Adafruit社のサイトに資料があります。
https://learn.adafruit.com/adafruit-neopixel-uberguide/the-magic-of-neopixelsチップとしてはWS2811、WS2812、WS2813、WS2815等々幾つか種類があるようです。
外観 | 型番 | コメント |
![]() |
WS2811 | データシート |
![]() |
WS2812B 秋月価格\50 |
データシート |
![]() |
WS2813B 秋月価格\30 |
データシート |
![]() |
WS2815B 秋月価格\100 |
データシート |
![]() |
WS2822S 秋月価格\100 |
データシート |
![]() |
WS2851B 秋月価格\100(4個) |
データシート |
それぞれのチップは基本R/G/BのLEDが個別制御出来、アドレス指定により、バスに繋がったLEDリールを制御出来る事になります。
Arduino用のNeoPixelライブラリも幾つか存在するようです。が、基本、Adafruit社が提供するライブラリが標準なのかと思います。
Adafruit_NeoPixel | #include Adafruit_NeoPixel.h | |
FastLED | #include <FastLED.h> |
Adafruit_NeoPixel.hの基本的な使い方は simple.ino が示している通りかと思います。
実際に使う為のパラメータですが、結構注意しないといけないようです。情報が少ない。
- 初期化ですが Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ400); number of LEDs, pin number, LED type
number of LEDsは明解です。
pin numberも明解です。
LED typeですが、CytronMakerPiPicoのDataSheetにはWS2812としか書かれていません。これからどのパラメータを設定すべきかは判断出来ないし、サンプルプログラムを動かしていちいちパラメータを変更して結果を見て判断する必要が出てきます。
手元で調べた限り、NEO_GRBW + NEO_KHZ800 が良さそうです。
32bit長のようです。GRBの設定では色が固定出来ません。
NEO_KHZ400だと不安定です。理由は判りません。NEO_KHZ800だと安定した色で発光しました。
※void setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b, uint8_t w);- setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b, uint8_t w);でwは意味をなさないようです。0でも255でも結果に違いがありません。
nはindexです。CytronMakerPiPicoの場合は0固定です。- clear(); は色情報をクリアするとありますが、その後にshow();しないと反映されないようです。
#include <Adafruit_NeoPixel.h> //NeoPixels が接続されてPINを指定します。 #define PIN 28 //取り付けられているNeoPixelの数を設定します。 #define NUMPIXELS 1 // 人気のNeoPixelリングサイズは16です。 //CytronMakerPiPicoには一つしかついていません。 //NeoPixel ライブラリをセットアップするとき、ピクセル数と信号の送信に使用するピンを指定します。 //古い NeoPixel ストリップでは、3 番目のパラメーターを変更する必要がある場合があることに注意してください。 //可能な値の詳細については、strandtest の例を参照してください。 Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRBW + NEO_KHZ800); #define DELAYVAL 500 // ピクセル間で一時停止する時間 (ミリ秒単位) //--------- void setup() { pixels.begin(); // 初期化 NeoPixel ストリップ オブジェクト (必須) } //--------- void loop() { pixels.clear(); // すべてのピクセルの色を「オフ」に設定 //テープ の最初の NeoPixel は #0、2 番目は 1 で、ピクセル数から 1 を引いた数までです。 for(int i=0; i<NUMPIXELS; i++) { // For each pixel... pixels.setPixelColor(i, 0,0,0,255)); // ここでは、適度に明るい緑色を使用しています。 pixels.show(); //更新されたピクセルの色をハードウェアに送信します。 delay(DELAYVAL); //次のパススルー ループの前に一時停止 } } |
本ソフトウエアは、あなたに対して何も保証しません。本ソフトウエアの関係者(他の利用者も含む)は、あなたに対して一切責任を負いません。
あなたが、本ソフトウエアを利用(コンパイル後の再利用など全てを含む)する場合は、自己責任で行う必要があります。本ソフトウエアの著作権はToolsBoxに帰属します。
本ソフトウエアをご利用の結果生じた損害について、ToolsBoxは一切責任を負いません。
ToolsBoxはコンテンツとして提供する全ての文章、画像等について、内容の合法性・正確性・安全性等、において最善の注意をし、作成していますが、保証するものではありません。
ToolsBoxはリンクをしている外部サイトについては、何ら保証しません。
ToolsBoxは事前の予告無く、本ソフトウエアの開発・提供を中止する可能性があります。
Microsoft、Windows、WindowsNTは米国Microsoft Corporationの米国およびその他の国における登録商標です。
Windows Vista、Windows XPは、米国Microsoft Corporation.の商品名称です。
LabVIEW、National Instruments、NI、ni.comはNational Instrumentsの登録商標です。
I2Cは、NXP Semiconductors社の登録商標です。
その他の企業名ならびに製品名は、それぞれの会社の商標もしくは登録商標です。
すべての商標および登録商標は、それぞれの所有者に帰属します。