【Raspberry Pi Pico入門 – 9】NeoPixelを制御してみる
概要
今回はNeoPixelとよばれているRGB LEDを制御してみます。
NeoPixelにはマイコンが内蔵されており、GPIOを1ピンだけ使った通信で信号を送り、RGB LEDの明るさや色を調整することが出来ます。また通信線を デイジーチェーン で複数のNeoPixcelに接続し、同じくGPIOの1ピンだけですべてを制御することも出来ます。
実行環境
IDE:Arduino IDE 2.1.1
MCU:Raspberry Pi Pico
NeoPixel:Freenove 8 RGB LED Module
スターターキットに付属しているものを使用します。おそらく以下リンク先のものと同等品が8個並んでいるモジュールと思われます。
今回のテーマ
- Arduino IDEでライブラリを導入して使ってみる
回路
以下のように配線します。今回からは回路図を用いて解説していきます。これまでのLEDやスイッチの回路を参考に配線してみてください。
ライブラリのインストール
回路図のSIGNALを単純なON/OFFで制御するのはかなり難しいコーディングが必要となります。そのような時に便利なものが ライブラリ です。Arduino IDEでは簡単な操作でライブラリをインストールすることができます。(これがArduino IDEの強みです)
今回はAdafruit社(色々なモジュールを作っているメーカー)が無料で公開しているNeoPixel用のライブラリをインストールします。
Arduino IDEを起動して①ライブラリマネージャーをクリックし、②検索画面に「Adafruit NeoPixel」と入力します。
いくつか候補が出てくるので、「Adafruit NeoPixel by Adafruit」と書かれているものを探し、④インストールをクリックします。
※byの後が作者の名前です。似たようなライブラリが多いので、必ずライブラリ名と作者が一致しているか確認してください。
「ライブラリ~~のインストールに成功しました。」とメッセージが出ればインストール成功です。
コーディング
新しくスケッチを作成し、以下の内容をコピペしてください。
#include <Adafruit_NeoPixel.h> const int PIN_SIG = 16; const int NUM_PIXELS = 8; Adafruit_NeoPixel pixels(NUM_PIXELS, PIN_SIG, NEO_GRB + NEO_KHZ800); void setup() { pixels.begin(); pixels.setBrightness(20); } void loop() { pixels.clear(); for (int i = 0; i < NUM_PIXELS; i++) { pixels.setPixelColor(i, pixels.Color(255, 0, 0)); pixels.show(); delay(500); } pixels.clear(); for (int i = 0; i < NUM_PIXELS; i++) { pixels.setPixelColor(i, pixels.Color(0, 255, 0)); pixels.show(); delay(500); } pixels.clear(); for (int i = 0; i < NUM_PIXELS; i++) { pixels.setPixelColor(i, pixels.Color(0, 0, 255)); pixels.show(); delay(500); } }
動作確認
NeoPixelが一つずつ点灯し、色が「赤 → 緑 → 青」の順に変われば成功です。
解説
C言語にはない構文
今回から以下のようなC言語では使われない構文が使われています。
Adafruit_NeoPixel pixels(NUM_PIXELS, PIN_SIG, NEO_GRB + NEO_KHZ800); pixels.begin();
これはC言語ではなく、C++の構文です。実はArduinoの言語はC++をベースにしています。ただ、初心者の範囲ではC++の構文は上記のような形以外はほとんど使用せず、C++はC言語も動かすことが出来るため、基本的にはC言語の知識で大丈夫です。
まず6行目のコードの意味ですが、これは「pixelsという名前でパラメータを設定している」というイメージでOKです。
初期設定のパラメータはカッコの中で設定します。
pixelsという名前に含まれるものは変数だけでなく、ライブラリで定義した関数も含まれています。9行目のコードは「pixelsという名前で初期設定したものを使ってbegin()という関数を実行」というイメージです。
※イメージを伝えるための説明なので厳密にはちょっと違います。この辺りの概念について詳しく知りたい方は「オブジェクト指向プログラミング」とググってみてください。Adafruit_NeoPixelがクラス、pixelsがインスタンス、begin()がメソッドです。
コードの解説
今回使った関数の一覧です。
- begin()
NeoPixelの初期設定をします。Adafruit_NeoPixel pixels(NUM_PIXELS, PIN_SIG, NEO_GRB + NEO_KHZ800)はbegin()で使うパラメータを設定しているだけなので、実際の初期設定はbegin()で実行します。 - setBrightness(20);
0~255の範囲で明るさを設定します。 - clear()
全てのNeoPixelを消灯に設定します。 - pixels.setPixelColor(i, pixels.Color(R, G, B))
R、G、Bで指定した色をi番目のNeoPixelに設定します。 - show()
設定した内容を通信でNeoPixelに送ります。
ここで初めて通信するので、この関数が実行されない限りNeoPixelの光りかたは変わりません。なので設定を変更する度にshow()を実行してください。
ディスカッション
コメント一覧
まだ、コメントがありません