3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Raspberry Pi + Node-REDでNeopixelを制御する

Posted at

はじめに

この記事ではNode-REDでNeoPixel互換LEDを制御します。

NeoPixelとは

NeoPixelとは制御IC入りのRGBLEDです。最近は互換LEDがたくさんでているので、どれがNeoPixelでどれが互換か判別するのは困難ですが、基本的に同じ方法で制御できるます。(たまにハマることもあるようですが)

基本的な構造はすべて同じで、RGB各色のLEDと制御用ICがパッケージ化されています。入出力端子は、5V、GND、DI、DOの4端子で、IDが信号入力用、ODが出力用です。
電源の5V、GNDは共有で、一つ目のNeoPixelのDI端子に制御信号を入力したあとは、一つ目のDO⇒二つ目のDI、二つ目のDO⇒三つ目のDIへと数珠つなぎに接続できます。

良く販売されているのはテープ、リング、マトリクスなどの形状で複数のNeoPixelがモジュール化されているものですが、内部接続は数珠繋ぎになっており、モジュール同士もDO⇒DIへ接続可能です。

NeoPixelを接続する

制御信号の出力にはデジタル出力可能なピンであればどのピンでも使用できますので任意のピンとNeoPixelのDIを接続します。今回は制御用信号の出力にGPIO18を使います。
5V、GNDもそれぞれRaspberry Piの5V、GNDと接続してください。

Raspberry Pi NeoPixel
5V 5V
GND GND
GPIO18 DI

ノードのインストール

Node-REDにNeoPixelを制御するのノードをインストールします。
3本線のアイコンからメニューを開き、「パレットの管理」を選択します。の記事ではNode-REDでNeoPixel互換LEDを制御します。

NeoPixelとは

NeoPixelとは制御IC入りのRGBLEDです。最近は互換LEDがたくさんでているので、どれがNeoPixelでどれが互換か判別するのは困難ですが、基本的に同じ方法で制御できるます。(たまにハマることもあるようですが)

基本的な構造はすべて同じで、RGB各色のLEDと制御用ICがパッケージ化されています。入出力端子は、5V、GND、DI、DOの4端子で、IDが信号入力用、ODが出力用です。
電源の5V、GNDは共有で、一つ目のNeoPixelのDI端子に制御信号を入力したあとは、一つ目のDO⇒二つ目のDI、二つ目のDO⇒三つ目のDIへと数珠つなぎに接続できます。

良く販売されているのはテープ、リング、マトリクスなどの形状で複数のNeoPixelがモジュール化されているものですが、内部接続は数珠繋ぎになっており、モジュール同士もDO⇒DIへ接続可能です。

NeoPixelを接続する

制御信号の出力にはGPIO12、13、18、19の4本が使えます。今回はGPIO18を使います。
5V、GNDもそれぞれRaspberry Piの5V、GNDと接続してください。

Raspberry Pi NeoPixel
5V 5V
GND GND
GPIO18 DI

ライブラリのインストール

Raspberry PiにNeoPixelを制御するためのライブラリをインストールします。
ターミナルから、次のコマンドを実行してください。

sudo pip3 install rpi-ws281x

ノードのインストール

Node-REDにNeoPixelを制御するのノードをインストールします。
3本線のアイコンからメニューを開き、「パレットの管理」を選択します。
image.png

「ノードを追加」タブを選択し、検索窓に「neopixel」と入力、「node-red-node-pi-neopixel」というノードが見つかるので、「ノードを追加」をクリックしてインストールします。
image.png

メッセージが出たら「追加」をクリックし、インストールが完了したら「閉じる」ボタンで設定画面を閉じます。
image.png

画面左のノードのパレットを探すと、下の方に「pi-neopixels」というノードが追加されています。

フローを作る

NeoPixelを光らせるためのフローを作成します。
ワークスペースに「inject」「pi-neopixels」「debug」の三つのノードを引き出して接続す。「inject」ノードからは、フローラインを2本引き出して「pi-neopixels」「debug」の両ノードへ接続します。こうすることで、同じデータが両方のノードへ送信されます。

image.png

pi-neopixel ノードを設定する

続いて、「pi-neopixels」ノードをダブルクリックしてプロパティを開き、「LEDs」に接続するLEDの数、「Pin Number」に信号用のPin番号「12」を設定、「Wipe time」を0にして「完了」します。
Pin Numberには12、32、33、35が選択できますが、GPIO番号とは異なることに注意してください。Raspberry PiのGPIOピンは、物理的なPinに振られたPin Numberと、GPIOの役割に応じて振られたGPIO番号の二つの呼び方があります。
今回はGPIO18番を使用し、その物理Pin Numberが12番であるため、12を選択しています。
LEDは24、16、12個のNeoPixelリングを繋いでいるため、52個としています。
image.png

GPIO番号と物理Pin番号

GPIO番号 物理Pin番号
GPIO12 32
GPIO13 33
GPIO18 12
GPIO19 35

制御コマンドを作る

pi-neopixelノードは、光らせるLEDの番地と色情報を送ると任意の色に光らせることができます。また、injectノードはフローの起点となり、任意のメッセージを作成できるノードです。injectノードにpi-neopixelが受け取れる形のメッセージを作り、送信してみましょう。

injectionノードをダブルクリックしてプロパティを開き、送信するメッセージを「日時」から「文字列」に変更します。
image.png

続いて、「msg.payload」の値に、「0,9,100,100,100」と入力して「完了」します。
この値は 「LEDの最初の番地,最後の番地,Rの強度,Gの強度,Bの強度」を示しています。
番地は回路上、Raspberry Piに近い側を0番として連番になっています。RGBはそれぞれ0~255の強度で設定できます。
このメッセージでは、1~10番目のLEDのRGBをすべて強度100(=白色)で光らす設定です。
image.png

デプロイして実行する。

設定がすべて終わったら、「デプロイ」をクリックしてinjectノードの左にあるタブをクリックします。NeoPixelが設定通り光れば成功です。
画面右の虫型のアイコンをクリックしてデバッグタブを開くと、injdectノードから送信されたメッセージが表示されています。
※node-red:rpi-gpio status not-availableというエラーが出た場合は、一度raspberry piを再起動してみてください。

image.png

RGBの値を0にして送信するとLEDが消灯しますが、数値の代わりに「black」という色指定をしても黒色に変化=消灯します。番地を指定していないため、すべてのLEDに対して実行されます。他にも色名指定できる色がありますので試してみてさい。

image.png

image.png

まとめ

Node-REDでNeoPixelを制御してみました。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?