M5Stamp Picoでできること 〜neopixelWriteコマンドを使う

M5Stack社のマイコンデバイスのうち、ディスプレイが付いていない製品の多くには、代わりにRGB LEDが搭載されています(「ATOM LITE」や「M5Stamp Pico」など)。




マイコンデバイスに搭載されているLEDは、何らかの処理をしている間は点灯させるなど、利用機会が非常に多いパーツです。
ただ、シンプルなLEDならば、GPIOをHighやLowにするだけで点灯・消灯ができるのに対し、RGB LEDの場合は、あらかじめライブラリを読み込んだり初期設定をしたりと、事前の設定が結構面倒です。

例えば「M5Stamp Pico」でRGB LEDを点灯させる場合、私はこれまで「FastLED」ライブラリを使って以下のようなスケッチをつくっていました。

#include <FastLED.h>

#define NUM_LEDS 1
#define LED_PIN 27
CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds<SK6812, LED_PIN, GRB>(leds, NUM_LEDS);
}

void loop() {
  leds[0] = CRGB::Green;
  FastLED.show();
  delay(500);
  leds[0] = CRGB::Black;
  FastLED.show();
  delay(500);
}

もっと簡単な方法はないか?と常々思っていたのですが、最近になって偶然「neopixelWrite()」というコマンドを見つけました。外部のライブラリを読み込んだりすることなく、このコマンドを実行するだけでRGB LEDを点灯させることができるようです。

このコマンドを使って、先ほどと同様のスケッチを書くと以下のようになります。

void setup() {
}

void loop() {
  neopixelWrite(27, 0, 255, 0);
  delay(500);
  neopixelWrite(27, 0, 0, 0);
  delay(500);
}

格段にシンプルになりました。

「FastLED」ライブラリでは、複数のRGB LEDがつながった「LEDテープ」なども制御できるのに対し、このコマンドでは1灯のRGB LEDしか制御することができませんが、点灯色を変更することもでき、マイコン搭載のRGB LEDを制御するには十分です。
これまでは、RGB LEDの制御が面倒なばかりに、ついついディスプレイ付きのデバイスを使ってしまうこともあったぐらいですが、これなら今後、RGB LED付きデバイスを利用する機会も増えそうです。


なお、私がM5Stack、M5StickCの使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。


ごく基本的なところから、かなり複雑なスケッチや、ネットワーク接続など、比較的高度なものまで、つまづかずに読み進めていけるような構成になっており、大変わかりやすい本です。


このサイトで書いている、M5Stackシリーズ(M5Stack、M5StickCなど)に関するブログ記事を、「さとやまノート」という別のブログページに、あらためて整理してまとめました。

他のM5Stackシリーズの記事にも興味のある方は「さとやまノート」をご覧ください。