クリエイター手抜きプロジェクト[588]IoT M5 Stack編 NeoPixel LEDの制御/古籏一浩

投稿:  著者:  読了時間:11分(本文:約5,300文字)



今回は、M5 StackでNeoPixel互換のLEDを扱ってみます。M5 Stack本体にもLEDがありますが、今回使用するのは有名なNeoPixel社の、互換LEDテープです。長さはいくつかありますが、どれでも同じように制御できます。屋外でイルミネーションとして使う場合は、2mなど長いものの方がいいかもしれません。ここでは一番短い10cmのものを使います。

・M5Stack用NeoPixel互換 LEDテープ 10cm
https://www.switch-science.com/catalog/5208/

Switch Science社のページに互換と書いてあるのですが、面倒なので以後、互換の文字は省略します。まず、LEDテープをM5 Stackに接続します。ポートAに接続します。次にUI Flowのページにアクセスしてブロックを使ってLEDテープを制御します。





LEDテープを制御するには、Unit(ユニット)を読み込ませる必要があります。画面左にあるUnitsの文字の下にある「+」ボタンをクリックします。すると、追加できるユニットのアイコンが表示されます。

その中のNEOPIXELと書かれたアイコンをクリックします。クリックすると、チェックマークが付きます。すると、接続ポートとLEDの数を指定する項目が表示されます。

接続ポートはA、LEDの数は15と入力します。10cmのLEDテープでは15個のLEDが付いています。もし、60個なら60と入力します。ここで間違って入力しても、後からLEDの数は変更できます。入力したらOKボタンを押します。

すると、Unitsの中にNeopixelのカテゴリが追加されます。このNeopixelのカテゴリ内に、LEDテープを制御するブロックが用意されています。

それでは簡単なところで、すべてのLEDを指定した色で点灯させてみましょう。Neopixelのカテゴリ内にある「Neopixel [neopixel0] 全てのLEDの色 ■」ブロックを「Setup」ブロックの下に配置します。デフォルトでは赤色になっていますが、ここでは緑色を指定しました。ここは好みの色で構いません。実行ボタンを押すとLEDのすべての色が緑色になります。

Pythonのコードだと以下のようになります。

--------------------------------------------------------------------------
from m5stack import *
from m5ui import *
import units
clear_bg(0x222222)
neopixel0 = units.RGB_Multi(units.PORTA, 15)
btnA = M5Button(name="ButtonA", text="ButtonA", visibility=False)
btnB = M5Button(name="ButtonB", text="ButtonB", visibility=False)
btnC = M5Button(name="ButtonC", text="ButtonC", visibility=False)
neopixel0.setColorAll(0x33ff33)
--------------------------------------------------------------------------

それでは次に、指定した位置にあるLEDの色を指定して点灯させてみます。Neopixelのカテゴリ内にある「Neopixel [neopixel0][1]番目のLEDの色 ■」ブロックを「Setup」ブロックの下に配置します。

ここでは1番目を赤色、2番目を緑色、3番目を青色に設定しました。つまり、ブロックを3つ「Setup」ブロックの下に配置しました。色や配置する個数、点灯させる位置は好みのものにしてもらっても構いません。

Pythonのコードだと以下のようになります。

--------------------------------------------------------------------------
from m5stack import *
from m5ui import *
import units
clear_bg(0x222222)
neopixel0 = units.RGB_Multi(units.PORTA, 15)
btnA = M5Button(name="ButtonA", text="ButtonA", visibility=False)
btnB = M5Button(name="ButtonB", text="ButtonB", visibility=False)
btnC = M5Button(name="ButtonC", text="ButtonC", visibility=False)
neopixel0.setColor(1, 0xff0000)
neopixel0.setColor(2, 0x33ff33)
neopixel0.setColor(3, 0x3333ff)
--------------------------------------------------------------------------

実行ボタンを押すと、M5 Stackに近いLEDから赤色、緑色、青色の順番で点灯します。

それでは最後に、イルミネーションでありがちな、LEDが移動するように見える処理を行ってみます。といっても、今回はシンプルに赤い点がM5 Stack本体から外側に向かってひとつずつ移動するだけのものです。

この場合、無限に繰り返しますが、繰り返しブロックはイベントのカテゴリ内にある「くりかえし」(黄色いブロック)を使います。

この「くりかえし」ブロック内に、繰り返し処理を入れます。繰り返しのカテゴリ内にある「[i]を[ ]から[ ]まで[ ]ずつカウントする」ブロックを入れます。繰り返す数値のところには、「[1]から[15]まで[1]」のように数値を指定します。要は1から15個までのLEDの数だけ繰り返す、ということになります。

この繰り返しブロックの中に、先ほども使用した「Neopixel [neopixel0][1]番目のLEDの色 ■」ブロックを使います。この[1]番目の[1]となっている部分を変数iのブロックに置き換えます。

次に、表示させる時間を指定します。時間はタイマーのカテゴリ内にある「[1]秒間停止」ブロックを配置します。このブロックの後に「Neopixel [neopixel0][i]番目のLEDの色 ■」を配置します。この時にLEDの色は黒色を指定します。これでできあがりです。

Pythonのコードだと以下のようになります。

--------------------------------------------------------------------------
from m5stack import *
from m5ui import *
import units
clear_bg(0x222222)
neopixel0 = units.RGB_Multi(units.PORTA, 15)
btnA = M5Button(name="ButtonA", text="ButtonA", visibility=False)
btnB = M5Button(name="ButtonB", text="ButtonB", visibility=False)
btnC = M5Button(name="ButtonC", text="ButtonC", visibility=False)
i = None
while True:
for i in range(1, 16):
neopixel0.setColor(i, 0xff0000)
wait(0.1)
neopixel0.setColor(i, 0x000000)
wait(0.001)
--------------------------------------------------------------------------

実行ボタンを押すと赤色のLEDがM5 Stack本体から外側に向かって移動します。赤色LEDの点を往復させたい場合は、以下のようになります。Pythonコードで示しますが、ブロックの場合は「[i]を[14]から[1]まで[-1]ずつカウントする」を追加することになります。(-1増やすという指定方法になります)

--------------------------------------------------------------------------
from m5stack import *
from m5ui import *
import units
clear_bg(0x222222)
neopixel0 = units.RGB_Multi(units.PORTA, 15)
btnA = M5Button(name="ButtonA", text="ButtonA", visibility=False)
btnB = M5Button(name="ButtonB", text="ButtonB", visibility=False)
btnC = M5Button(name="ButtonC", text="ButtonC", visibility=False)
i = None
while True:
for i in range(1, 16):
neopixel0.setColor(i, 0xff0000)
wait(0.1)
neopixel0.setColor(i, 0x000000)
for i in range(14, 1, -1):
neopixel0.setColor(i, 0xff0000)
wait(0.1)
neopixel0.setColor(i, 0x000000)
wait(0.001)
--------------------------------------------------------------------------


【古籏一浩】openspc@alpha.ocn.ne.jp
http://www.openspc2.org/

長野県の小学校でもようやくまるまる一か月の夏休みに。今まではとても短い夏休みだったのです。7/29〜8/17とか、すごく短い時もありました。夏休みが短いので、実質休めるのは最初の5日間くらい。畑仕事とか手伝ったり、お盆とかで帰省したりとかで、本当に休む日がほとんどありませんでした。

北海道を除く他県の夏休みの長さがとても羨ましかったけど、長い休みだったら、粘土細工か紙工作のどっちかやってただろうなあ。プラモデルなど高価なものは存在しなかったので、全部自分で作るしかないという具合でした。

最近、いろいろな人の話を聞いたりするのですが、普通の人の生活と貧乏人の生活では基本レベルが全然違う、というのを実感しました。でも「葬儀簡素化要項」ってのは、他のところでもありそうな気がするけど、どうなんだろう。

・InDesign自動化サンプルプログラム逆引きリファレンス上/下
https://www.amazon.co.jp/dp/4844396846/
https://www.amazon.co.jp/dp/4844396854/

・創って学ぼうプログラミング
https://news.mynavi.jp/series/makeprogram

・みんなのIchigoLatte入門 JavaScriptで楽しむゲーム作りと電子工作
https://www.amazon.co.jp/dp/4865940936
[正誤表]
http://www.openspc2.org/book/error/ichigoLatte/

・After Effects自動化サンプルプログラム 上巻、下巻
https://www.amazon.co.jp/dp/4844397591
https://www.amazon.co.jp/dp/4844397605

・IchigoLatteでIoT体験
https://www.amazon.co.jp/dp/B06X3X1CHP
http://digiconcart.com/dccartstore/cart/info/2561/218591

・みんなのIchigoJam入門 BASICで楽しむゲーム作りと電子工作
http://www.amazon.co.jp/dp/4865940332/

・Photoshop自動化基本編
http://www.amazon.co.jp/dp/B00W952JQW/

・Illustrator自動化基本編
http://www.amazon.co.jp/dp/B00R5MZ1PA/

・4K/ハイビジョン映像素材集
http://www.openspc2.org/HDTV/

・クリエイター手抜きプロジェクト
http://www.openspc2.org/projectX/