OptoSupply製マイコン内蔵RGBW LED OST45050C1A-W について。 合わせて OSTW3535C1A についても。

- 秋月電子通商: マイコン内蔵RGBWLED OST45050C1A-W (5個入) (I-13417)
- 秋月電子通商: マイコン内蔵RGBLED OSTW3535C1A (4個入) (I-13021)
仕様に関して
OST45050C1A-W
データシート(PDF)に記載されている限りでは、OST45050C1A-Wの内蔵マイコンがSK6812と同等なのかどうかは明記されていないものの、データ転送の仕様はSK6812と同じとなっている。
OST45050C1A-W | SK6812 | |
---|---|---|
LED Color | RGBW(32bit) | RGB(24bit) RGBW(32bit) |
The dynamic parameters | ||
The speed of data transmission | 800kHz | |
The data transmission time | ||
T0H : 0 code, high level time |
0.3μs±0.15μs | |
T0L : 0 code, low level time |
0.9μs±0.15μs | |
T1H : 1 code, high level time |
0.6μs±0.15μs | |
T1L : 1 code, low level time |
0.6μs±0.15μs | |
Trst : Reset code, low level time |
80μs | |
OST45050C1A-W | SK6812 |
一方、OST45050C1A-Wのデータ形式と転送順はRGBWの順にMSB firstと記載されているが、実際に動作させて確認したところGRBWの順となっている模様。 なお、SK6812はGRB/GRBWの順となっている。
The data structure | ||
---|---|---|
OST45050C1A-W (32bit RGBW) | G7, ..., G0, R7, ..., R0, B7, ..., B0, W7, ..., W0 | |
SK6812 | 24bit RGB | G7, ..., G0, R7, ..., R0, B7, ..., B0 |
32bit RGBW | G7, ..., G0, R7, ..., R0, B7, ..., B0, W7, ..., W0 |
OSTW3535C1A
データシート(PDF)にて、WS2812向けのコードで動作させる例が記載されている。 実際、データ転送の仕様を確認すると、WS2812Sと概ね同等となっている。
OSTW3535C1A | WS2812S | |
---|---|---|
LED Color | RGB(24bit) | |
The dynamic parameters | ||
The speed of data transmission | 800Kbps | |
Data transfer time | ||
T0H : 0 code, high voltage time |
200ns~380ns | |
T0L : 0 code, low voltage time |
580ns~1.6μs | 580ns~1μs |
T1H : 1 code, high voltage time |
580ns~1.6μs | 580ns~1μs |
T1L : 1 code, low voltage time |
200ns~420ns | |
RES : low voltage time |
> 280μs | |
OSTW3535C1A | WS2812S |
また、OSTW3535C1Aのデータ形式と転送順も、WS2812Sと同様にGRBの順にMSB firstとなっている。
NeoPixelBusで制御する場合
ライブラリNeoPixelBusでOST45050C1A-W/OSTW3535C1Aを制御する場合について。
OST45050C1A-W
NeoPixelBus
クラスを構築する際、データ転送の仕様はSK6812と同じなのでテンプレート引数T_METHOD
にはNeoSk6812Method
をそのまま指定することができる。 データ転送順はGRBWの順なのでT_COLOR_FEATURE
にはNeoGrbwFeature
を指定する。
コードとしては次のようになる。
#include <Arduino.h>
#include <NeoPixelBus.h>
const uint16_t PixelCount = 4; // make sure to set this to the number of pixels in your strip
const uint8_t PixelPin = 2; // make sure to set this to the correct pin
NeoPixelBus<NeoGrbwFeature, NeoSk6812Method> strip(PixelCount, PixelPin);
:
:
SetPixelColor
など、色を指定するメソッドではRgbColor
の代わりにRgbwColor
を渡す。
NeoPixelBus<NeoGrbwFeature, NeoSk6812Method> strip(PixelCount, PixelPin);
void setup()
{
strip.Begin();
}
void loop()
{
// RgbColorの代わりにRgbwColorを用いる
strip.SetPixelColor(0, RgbwColor(0xff, 0x00, 0x00, 0x00)); // Rのみ100%で点灯
strip.SetPixelColor(1, RgbwColor(0x00, 0xff, 0x00, 0x00)); // Gのみ100%で点灯
strip.SetPixelColor(2, RgbwColor(0x00, 0x00, 0xff, 0x00)); // Bのみ100%で点灯
strip.SetPixelColor(3, RgbwColor(0x00, 0x00, 0x00, 0xff)); // Wのみ100%で点灯
strip.Show();
delay(1000);
// RgbColorを用いると、Wは暗黙的に0%になる
strip.SetPixelColor(0, RgbColor(0xff, 0x00, 0x00)); // Rのみ100%で点灯 (Wは点灯しない)
strip.SetPixelColor(1, RgbColor(0x00, 0xff, 0x00)); // Gのみ100%で点灯 (Wは点灯しない)
strip.SetPixelColor(2, RgbColor(0x00, 0x00, 0xff)); // Bのみ100%で点灯 (Wは点灯しない)
strip.Show();
:
:
}
上記の例にあるように、RgbColor
を渡すと、W=0%を指定した場合と同等に扱われる。
HslColor
/HsbColor
/HtmlColor
の各クラスはWチャンネルをサポートしていない。 そのため、これらのクラスを使いつつtWチャンネルも使用したい場合は、まずHslColor
/HsbColor
/HtmlColor
を構築し、次にそれをRgbwColor
コンストラクタに渡してRgbwColor
に変換したあと、Wチャンネルを別途設定するなどする必要がある。
// HslColor→RgbwColorの例
auto hsl = HslColor(0.0f, 1.0f, 0.5f); // HslColorクラスで色を作成する
auto rgbwFromHsl = RgbwColor(hsl); // RgbwColorクラスに変換する (Wチャンネルは0に初期化される)
rgbwFromHsl.W = 0x40; // Wチャンネルの値を設定する
strip.SetPixelColor(0, rgbwFromHsl);
// HsbColor→RgbwColorの例
auto hsb = HsbColor(0.0f, 1.0f, 1.0f); // HsbColorクラスで色を作成する
auto rgbwFromHsb = RgbwColor(hsb); // RgbwColorクラスに変換する (Wチャンネルは0に初期化される)
rgbwFromHsl.W = 0x40; // Wチャンネルの値を設定する
strip.SetPixelColor(1, rgbwFromHsb);
NeoPixelBus以外のライブラリの場合も、SK6812および32bit RGBWカラーをサポートするライブラリであれば同様に動作すると思われる。 (2020-07時点では、FastLEDはSK6812をサポートしているものの、32bit RGBWカラーが未サポートとなっている)
OSTW3535C1A
OST45050C1A-Wと同様に、OSTW3535C1Aのデータ転送の仕様はWS2812Sと同等なのでテンプレート引数T_METHOD
にはNeoWs2812xMethod
を指定する。 データ転送順はGRBの順なのでT_COLOR_FEATURE
にはNeoGrbFeature
を指定する。
#include <Arduino.h>
#include <NeoPixelBus.h>
const uint16_t PixelCount = 4; // make sure to set this to the number of pixels in your strip
const uint8_t PixelPin = 2; // make sure to set this to the correct pin
NeoPixelBus<NeoGrbFeature, NeoWs2812xMethod> strip(PixelCount, PixelPin);
void setup() {
strip.Begin();
strip.SetPixelColor(0, RgbColor(0xff, 0x00, 0x00));
strip.SetPixelColor(1, RgbColor(0x00, 0xff, 0x00));
strip.SetPixelColor(2, RgbColor(0x00, 0x00, 0xff));
strip.SetPixelColor(3, RgbColor(0xff, 0xff, 0xff));
strip.Show();
}
void loop() {
:
:
}
ライブラリAdafruit_NeoPixelで動作させる場合の例はデータシート(PDF)に掲載されている。
動作例・発光色の色合い (OST45050C1A-W)
WはRGBに比べて輝度が高いため、W=50%〜100%あたりではRGBの値が変わっても色合いはほとんど変わらないように見える。
RGB=100%で合成される白色は、W=100%の白色と比べると若干青に寄った昼光色に見える。