NeoPixelRingをJohnny-Five使ってJavaScriptで制御する

NeoPixelRingをJohnny-Five使ってJavaScriptで制御する

NeoPixelRingをふつうに光らせる

Node.jsとJohnny-five使えばJavaScriptでArduinoを動かせるってことでLEDの制御をするところまではできたので、スイッチサイエンスで見かけて使いたくてたまらなかったLED16連リングを光らせることにしました。

そもそも自分でちゃんと動かせるかどうかわからないので、JavaScriptのことはいったん忘れて普通に光らせてみます。
配線がわからないのでとりあえず商品名で画像検索して参考に。
リングのサイズとピンの位置が微妙すぎて困り、ブレッドボードを2個使う。

Arduinoの5VをVCCにつないで、GNDをつないで、あとはINピンからデータを送るだけですべてのLEDをまとめて制御できます!
よーく見ると、いっこのチップごとにRGBとそれを制御するちっちゃ~いマイコンが入っているんですね!
これはすごいですね。

最初、普通にLEDを光らせるコードを書き込んでみたけどうまくいきませんでした。
おとなしく「NeoPixel code」で検索。

GitHubあった。
このライブラリを読み込んで、サンプルのコードを書き込んで、ピンの番号とかRGBをちょっと変更して動かすと…

(∩´∀`)∩ワーイ

こっそり配線も直してブレッドボード1個にしました(∀`*ゞ)エヘヘ

とりあえずここまでで、リングを光らせることができました。

どうやってJohnny-Five&FirmataでNeoPixelRingを制御するのか

さて、Adafruit_NeoPixelを読み込んでサンプルのコードを書き込んでしまいましたので、nodeコマンドでどうこうすることができなくなってしまいました。
Firmataのスケッチを書き込んだ状態で動かすにはどうしたらいいんでしょう。

こういうときはとにかくググる!

「NeoPixel Node johnnyfive」とかで検索かけたら、ありました。

node-pixelって。
名前からしてもう絶対これ使えるでしょ。
Examplesを見ても、

five = require("johnny-five");

とかしてるし。

さっそく

npm i node-pixel

すると、node-pixelのモジュール内にも「firmata」と「johnny-five」が入っています!
これだけで使えそう!

そしたらサンプルのコードを書いたtest.jsファイルを作って、

node test.js

・・・うまくいきましたか?

良かったですね。

私はうまくいきませんでしたけどね!

気をつけるポイントは

  • 「require(“../lib/pixel.js”)」のこれじゃない感。
    「require(“node-pixel”)」とする。
  • Windowsだから、もちろん
    「new five.Board({port:”COM3″});」。
    ポートを指定する。
  • 「data: 6,」だったらINにつなぐのは6番ピンにする。
  • 16連リングを使うから「length: 4,」は「length: 16,」に変える。

などですが…
それでも動きません!

エラーの内容は「johnny-fiveなんて見つからないよ?」でした。
どうして?johnny-fiveまるごと入っていたじゃない。

( ゚д゚)ハッ!

Windowsなせいで「パスが長すぎる」とかいう理由で警告出てたよね!
つまり、パスが長すぎてjohnny-fiveの当該処理部分のソースに辿りつけていないってことですね。

仕方ないので、johnny-fiveはnode-pixelと同じ階層にインストールし直しました。
まだ長いって警告出るけど、とりあえず動いてるからこのままいくよ!
npm3にできたらいいんだけど、

npm i -g npm

ってやっても2.14.8とかにしかなりませんでした。
やっぱNode.js自体を5.0.0にしないとダメか。
5.0.0だとJohnny-Five動かないんだよな。

(´Д`)ハァ…

ともかくこれで実行した結果、

ワーイヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノワーイ

ついでにstaticのほうも。

NeoPixelRing

( ´Д`)=3 フゥ

あとはセンサーとかで色を変えたりアニメーションさせたいですね。
今は

PC—USB—Arduino—NeoPixel

って繋いでますが、これをポータブルにしたい。
すると

Wi-Fiモジュール—電源—Arduino—NeoPixel

ってことになるんだけど…

というわけで理想としては

電源—ESP-WROOM-02—NeoPixel

なのですが!

果たしてそんなことできるんでしょうか・・・?

ダメなら

ESP-WROOM-02—電源—FLORA(Arduino)—NeoPixel

とかになるのかなぁ…
FLORAにFirmataスケッチ書き込んでおいて、通信だけWROOMで、センサーもつけて…
(´ε`;)ウーン…