FastLEDライブラリ解説

概要

M5Stack ATOMなどに利用されているFastLEDライブラリの使い方を調べてみました。

FastLEDとは?

定番LED制御ライブラリで、特にNeoPixel的な複数のLEDがつながっているタイプのLED制御ではよく使われています。

対応LED

  • Adafruit’s DotStars – APA102
  • Adafruit’s Neopixel – WS2812B (WS2811/WS2812/WS2813)
  • TM1809/4
  • TM1803
  • UCS1903
  • GW6205
  • LPD8806
  • WS2801
  • SM16716
  • APA102
  • P9813
  • DMX
  • SmartMatrix panels
  • LPD6803

かんたんなスケッチ例

#include "FastLED.h"
#define NUM_LEDS 60
CRGB leds[NUM_LEDS];
void setup() { FastLED.addLeds<NEOPIXEL, 6>(leds, NUM_LEDS); }
void loop() {
	leds[0] = CRGB::White; FastLED.show(); delay(30);
	leds[0] = CRGB::Black; FastLED.show(); delay(30);
}

シンプルな利用例として、上記のコードが提示されていました。60個接続されたNeoPixelをGPIO6に接続しているのかな?

LEDの数分だけCRGB構造体の配列が用意されており、色を設定してからshow()関数で反映します。

M5Stack ATOMなどはラッパー関数があるので、若干使い方が違ってきますので注意してください。

色の指定方法

FastLEDはCRGB構造体で色を指定します。

struct CRGB {
	union {
		struct {
            union {
                uint8_t r;
                uint8_t red;
            };
            union {
                uint8_t g;
                uint8_t green;
            };
            union {
                uint8_t b;
                uint8_t blue;
            };
        };
		uint8_t raw[3];
	};
(略)

一般的にはCRGB(r, g, b)のように色を指定できます。

定義済み色見本

色名設定値見本色RGB
CRGB::AliceBlue0xF0F8FF
   
F0F8FF
CRGB::Amethyst0x9966CC
        
9966CC
CRGB::AntiqueWhite0xFAEBD7
        
FAEBD7
CRGB::Aqua0x00FFFF
        
00FFFF
CRGB::Aquamarine0x7FFFD4
        
7FFFD4
CRGB::Azure0xF0FFFF
        
F0FFFF
CRGB::Beige0xF5F5DC
        
F5F5DC
CRGB::Bisque0xFFE4C4
        
FFE4C4
CRGB::Black0x000000
        
000000
CRGB::BlanchedAlmond0xFFEBCD
        
FFEBCD
CRGB::Blue0x0000FF
        
0000FF
CRGB::BlueViolet0x8A2BE2
        
8A2BE2
CRGB::Brown0xA52A2A
        
A52A2A
CRGB::BurlyWood0xDEB887
        
DEB887
CRGB::CadetBlue0x5F9EA0
        
5F9EA0
CRGB::Chartreuse0x7FFF00
        
7FFF00
CRGB::Chocolate0xD2691E
        
D2691E
CRGB::Coral0xFF7F50
        
FF7F50
CRGB::CornflowerBlue0x6495ED
        
6495ED
CRGB::Cornsilk0xFFF8DC
        
FFF8DC
CRGB::Crimson0xDC143C
        
DC143C
CRGB::Cyan0x00FFFF
        
00FFFF
CRGB::DarkBlue0x00008B
        
00008B
CRGB::DarkCyan0x008B8B
        
008B8B
CRGB::DarkGoldenrod0xB8860B
        
B8860B
CRGB::DarkGray0xA9A9A9
        
A9A9A9
CRGB::DarkGrey0xA9A9A9
        
A9A9A9
CRGB::DarkGreen0x006400
        
006400
CRGB::DarkKhaki0xBDB76B
        
BDB76B
CRGB::DarkMagenta0x8B008B
        
8B008B
CRGB::DarkOliveGreen0x556B2F
        
556B2F
CRGB::DarkOrange0xFF8C00
        
FF8C00
CRGB::DarkOrchid0x9932CC
        
9932CC
CRGB::DarkRed0x8B0000
        
8B0000
CRGB::DarkSalmon0xE9967A
        
E9967A
CRGB::DarkSeaGreen0x8FBC8F
        
8FBC8F
CRGB::DarkSlateBlue0x483D8B
        
483D8B
CRGB::DarkSlateGray0x2F4F4F
        
2F4F4F
CRGB::DarkSlateGrey0x2F4F4F
        
2F4F4F
CRGB::DarkTurquoise0x00CED1
        
00CED1
CRGB::DarkViolet0x9400D3
        
9400D3
CRGB::DeepPink0xFF1493
        
FF1493
CRGB::DeepSkyBlue0x00BFFF
        
00BFFF
CRGB::DimGray0x696969
        
696969
CRGB::DimGrey0x696969
        
696969
CRGB::DodgerBlue0x1E90FF
        
1E90FF
CRGB::FairyLight0xFFE42D
        
FFE42D
CRGB::FairyLightNCC0xFF9D2A
        
FF9D2A
CRGB::FireBrick0xB22222
        
B22222
CRGB::FloralWhite0xFFFAF0
        
FFFAF0
CRGB::ForestGreen0x228B22
        
228B22
CRGB::Fuchsia0xFF00FF
        
FF00FF
CRGB::Gainsboro0xDCDCDC
        
DCDCDC
CRGB::GhostWhite0xF8F8FF
        
F8F8FF
CRGB::Gold0xFFD700
        
FFD700
CRGB::Goldenrod0xDAA520
        
DAA520
CRGB::Gray0x808080
        
808080
CRGB::Grey0x808080
        
808080
CRGB::Green0x008000
        
008000
CRGB::GreenYellow0xADFF2F
        
ADFF2F
CRGB::Honeydew0xF0FFF0
        
F0FFF0
CRGB::HotPink0xFF69B4
        
FF69B4
CRGB::IndianRed0xCD5C5C
        
CD5C5C
CRGB::Indigo0x4B0082
        
4B0082
CRGB::Ivory0xFFFFF0
        
FFFFF0
CRGB::Khaki0xF0E68C
        
F0E68C
CRGB::Lavender0xE6E6FA
        
E6E6FA
CRGB::LavenderBlush0xFFF0F5
        
FFF0F5
CRGB::LawnGreen0x7CFC00
        
7CFC00
CRGB::LemonChiffon0xFFFACD
        
FFFACD
CRGB::LightBlue0xADD8E6
        
ADD8E6
CRGB::LightCoral0xF08080
        
F08080
CRGB::LightCyan0xE0FFFF
        
E0FFFF
CRGB::LightGoldenrodYellow0xFAFAD2
        
FAFAD2
CRGB::LightGreen0x90EE90
        
90EE90
CRGB::LightGrey0xD3D3D3
        
D3D3D3
CRGB::LightPink0xFFB6C1
        
FFB6C1
CRGB::LightSalmon0xFFA07A
        
FFA07A
CRGB::LightSeaGreen0x20B2AA
        
20B2AA
CRGB::LightSkyBlue0x87CEFA
        
87CEFA
CRGB::LightSlateGray0x778899
        
778899
CRGB::LightSlateGrey0x778899
        
778899
CRGB::LightSteelBlue0xB0C4DE
        
B0C4DE
CRGB::LightYellow0xFFFFE0
        
FFFFE0
CRGB::Lime0x00FF00
        
00FF00
CRGB::LimeGreen0x32CD32
        
32CD32
CRGB::Linen0xFAF0E6
        
FAF0E6
CRGB::Magenta0xFF00FF
        
FF00FF
CRGB::Maroon0x800000
        
800000
CRGB::MediumAquamarine0x66CDAA
        
66CDAA
CRGB::MediumBlue0x0000CD
        
0000CD
CRGB::MediumOrchid0xBA55D3
        
BA55D3
CRGB::MediumPurple0x9370DB
        
9370DB
CRGB::MediumSeaGreen0x3CB371
        
3CB371
CRGB::MediumSlateBlue0x7B68EE
        
7B68EE
CRGB::MediumSpringGreen0x00FA9A
        
00FA9A
CRGB::MediumTurquoise0x48D1CC
        
48D1CC
CRGB::MediumVioletRed0xC71585
        
C71585
CRGB::MidnightBlue0x191970
        
191970
CRGB::MintCream0xF5FFFA
        
F5FFFA
CRGB::MistyRose0xFFE4E1
        
FFE4E1
CRGB::Moccasin0xFFE4B5
        
FFE4B5
CRGB::NavajoWhite0xFFDEAD
        
FFDEAD
CRGB::Navy0x000080
        
000080
CRGB::OldLace0xFDF5E6
        
FDF5E6
CRGB::Olive0x808000
        
808000
CRGB::OliveDrab0x6B8E23
        
6B8E23
CRGB::Orange0xFFA500
        
FFA500
CRGB::OrangeRed0xFF4500
        
FF4500
CRGB::Orchid0xDA70D6
        
DA70D6
CRGB::PaleGoldenrod0xEEE8AA
        
EEE8AA
CRGB::PaleGreen0x98FB98
        
98FB98
CRGB::PaleTurquoise0xAFEEEE
        
AFEEEE
CRGB::PaleVioletRed0xDB7093
        
DB7093
CRGB::PapayaWhip0xFFEFD5
        
FFEFD5
CRGB::PeachPuff0xFFDAB9
        
FFDAB9
CRGB::Peru0xCD853F
        
CD853F
CRGB::Pink0xFFC0CB
        
FFC0CB
CRGB::Plaid0xCC5533
        
CC5533
CRGB::Plum0xDDA0DD
        
DDA0DD
CRGB::PowderBlue0xB0E0E6
        
B0E0E6
CRGB::Purple0x800080
        
800080
CRGB::Red0xFF0000
        
FF0000
CRGB::RosyBrown0xBC8F8F
        
BC8F8F
CRGB::RoyalBlue0x4169E1
        
4169E1
CRGB::SaddleBrown0x8B4513
        
8B4513
CRGB::Salmon0xFA8072
        
FA8072
CRGB::SandyBrown0xF4A460
        
F4A460
CRGB::SeaGreen0x2E8B57
        
2E8B57
CRGB::Seashell0xFFF5EE
        
FFF5EE
CRGB::Sienna0xA0522D
        
A0522D
CRGB::Silver0xC0C0C0
        
C0C0C0
CRGB::SkyBlue0x87CEEB
        
87CEEB
CRGB::SlateBlue0x6A5ACD
        
6A5ACD
CRGB::SlateGray0x708090
        
708090
CRGB::SlateGrey0x708090
        
708090
CRGB::Snow0xFFFAFA
        
FFFAFA
CRGB::SpringGreen0x00FF7F
        
00FF7F
CRGB::SteelBlue0x4682B4
        
4682B4
CRGB::Tan0xD2B48C
        
D2B48C
CRGB::Teal0x008080
        
008080
CRGB::Thistle0xD8BFD8
        
D8BFD8
CRGB::Tomato0xFF6347
        
FF6347
CRGB::Turquoise0x40E0D0
        
40E0D0
CRGB::Violet0xEE82EE
        
EE82EE
CRGB::Wheat0xF5DEB3
        
F5DEB3
CRGB::White0xFFFFFF
        
FFFFFF
CRGB::WhiteSmoke0xF5F5F5
        
F5F5F5
CRGB::Yellow0xFFFF00
        
FFFF00
CRGB::YellowGreen0x9ACD32
        
9ACD32

上記の色が定義されています。実際色が多すぎてよくわかりません。

色がおかしいとき

leds[0] = CRGB::Red;

例えば赤を指定して、緑色が光った場合には設定が必要です。

上記にありますが、一部のLEDは色の並びがRGBではなくBRGになっています。そのため赤を指定して緑になった場合には設定が必要になります。

void setup() { 
  LEDS.addLeds<WS2811, DATA_PIN, GRB>(leds, NUM_LEDS);
}

上記の例がありましたが、ピンのあとにGRBを追加します。

M5Stack社のATOMで確認

#include <M5Atom.h>
void setup() {
  // 初期化
  M5.begin(true, false, true);  // (Serial, I2C, NeoPixel)
  // LED(0固定)
  M5.dis.drawpix(0, CRGB::Red);
}
void loop() {
}

赤になりましたでしょうか?

残念ながら現在のライブラリは緑になると思います。。。

LED_Display::LED_Display(uint8_t LEDNumbre)
{
    FastLED.addLeds<WS2812, DATA_PIN>(_ledbuff, LEDNumbre);
    _xSemaphore = xSemaphoreCreateMutex();
    _numberled = LEDNumbre;
}

初期化部分を見てみると、GRBが指定されていませんね、、、

修正のプルリクエストはあったのですが、最近ライブラリに動きがないのでまったく修正されていません。

色がおかしいまま使うか、自分で初期化コードにGRBを入れるかして対応する必要があります。

色味の調整

RGB LEDは基本的に緑が明るいものが多いです。そのため通常のRGB指定をしても、緑が強く出すぎてしまいます。

これはチップごとに調整する必要があるので、ライブラリ側では補正していません。気になる場合には各色に補正値を入れてから設定する必要があります。

まとめ

はやくM5stack ATOMの色指定がなおってほしい、、、

コメント