今回はオンボード上のRGBLED(NeoPixel)を操作したいと思います。
オンボード上のRGBLEDはNeoPixel(WS2812C)となっています。
WS28xx用のパッケージを導入することで簡単に制御することができます。
パッケージの導入は前回の記事を参照してください。
ハードウェア
・Freenove ESP32-S3-WROOM Board
(他のボードでも動作するかもしれませんが、LEDの型番が違う場合コードの一部を修正する必要があります。)
導入するパッケージ
・nanoFramework.iot.Device.Ws28xx.Esp32
(Esp32が付かないパッケージもありますが、これはEsp32以外のボード向けになります。)
プログラミング
・新規プロジェクトを作成します。プロジェクト名は「ESP32S3_RGBLED」としました。
・コードを入力する前にパッケージは導入してください。
・コードは次のようになります。
Program.cs
using Iot.Device.Ws28xx.Esp32;
using System.Drawing;
using System.Threading;
namespace ESP32S3_RGBLED
{
public class Program
{
public static void Main()
{
const int count = 1; //LEDの数 オンボードLEDが対象なので1
const int ledPin = 48; //LEDを接続しているGPIO番号
Color[] rainbow = { Color.Red, //配列に点灯パターンを登録
Color.Orange,
Color.Yellow,
Color.Green,
Color.DarkCyan,
Color.DarkBlue,
Color.Purple,
};
//接続しているLEDの型番によって変わります。Ws2812b,Ws2815b,sk6812など
Ws28xx led = new Ws2812c(ledPin, count);
BitmapImage img = led.Image;
while (true)
{
foreach (Color color in rainbow)
{
img.SetPixel(0, 0, color); //順番に色を設定
led.Update(); //設定した色を反映 アップデートしないと色が変わらない
Thread.Sleep(1000); //1秒待機
}
}
}
}
}
・制御方法は SetPixel(x座標,y座標,色) を指定して、表示をアップデートすることでLEDを様々な色で光らせることができます。Ws28xxクラスは複数のLEDを制御できるようになっています。x座標,y座標を指定することで順番にLEDの色を指定することができます。
別の機会に複数のLEDを制御するプログラムを紹介したいと思います。