札幌はすっかり秋の空気となり、外に出るときには上着が必要な季節となってきました。秋といえば食欲の秋なtacckです。私の記事でラズパイを触るときに比較的JavaScriptを使ってきましたが、これはどちらかというと外部サービスとの連携のしやすさから選択してきたものでした。そこで今回は、ラズパイのハードである"GPIO"を扱えるパッケージを使って、JavaScriptによるLチカをやってみたいと思います。セットアップOSはRaspbianの最新、Node.jsは7.2.*系がインストールされているものとします。OSのインストールは、下記記事を参考にしてください。入手したのでセットアップ手順をまとめてみる同じく、Node.jsのインストールは、下記記事を参考にしてください。IoTの設定】LチカさせるNPMパッケージのインストール今回利用するパッケージは、node-rpioというものです。node-rpioNode.jsからGPIOを使えるパッケージはいくつかあるようですが、最初に見つけたこちらがとても取り扱いやすかったのでこちらを使うことにしました。上記のサイトに記載のある通り、パッケージのインストールと設定ファイルの追加を行ないます。Piを再起動すれば、準備完了です。その1まずは、簡単な使い方を確かめるところからやってみます。LEDを3つ並べ、順番に点灯し、最後に全部点灯させる、、、というのを繰り返させるものです。rpio.LOW);rpio.msleep(500);}特にこれ以上の説明も不要なものですね。動画で動きを観てみましょう。https://www.indetail.co.jp/wp-content/uploads/2017/07/20170926001.mp4とてもわかりやすいものでしたね。その2その1でもサンプルとしては十分ですが、せっかくなのでもう少し遊んでみましょう。(OFF)」の二種類しかありません。これだと明るさの調整ができなくて不便です。それに、世の中にあるLED照明などは明るさの調整ができますよね。やって実現しているのでしょう?電流を減らすことでもある程度できますが、LEDではあまり良い方法ではありません。(ある程度電流を流さないと、そもそも光らせることができない。)別の方法として、「高速で点滅させ明るい時間と暗い時間の比率を調整する」ことで、明るさを調整する、というものがあります。Modulation)」と呼ばれるものです。PiのGPIOはハード的に実現してくれているのですが、制限として使えるピンが限られています。今回使うパッケージではハードを使うようにサポートしてくれる機能もありますが、基本原理はシンプルなのでプログラムで簡易実装してみましょう。rpio.LOW);}blink()という関数を作りました。ここでは、3000ミリ秒間だけ真ん中(LED_PIN_2)のLEDを光らせます。その間に、20ミリ秒の70%(つまり14ミリ秒)を点灯、残り(6ミリ秒)を消灯、という風に繰り返していきます。比較のために、一番右側(LED_PIN_3)は、点灯しっぱなしとしています。これを実行した結果が、次の動画です。この動画は、点滅がわかりやすいようにiPhoneでスロー撮影しています。https://www.indetail.co.jp/wp-content/uploads/2017/07/20170926002.mp4右側と比べて、明らかに点滅をしていますね。肉眼では点滅はほとんど気にならないレベルで、明るさが少しだけ暗いかな、という感じになっています。その3もう少し、点滅の具合を確かめてみましょう。今度は、点灯する時間の割合を段階的に小さくしてみます。段階的に暗く見えるはずです。rpio.LOW);}こちらのプログラムを実行した結果が、次の動画です。(こちらはスローではなく通常の撮影ですが、多少点滅していることが見えると思います。)https://www.indetail.co.jp/wp-content/uploads/2017/07/20170926003.mp4プログラム通り、2秒ごとに暗くなっていったのがわかると思います。早い周期の点滅を使えば、肉眼では点滅が見えない状態でも暗くなっていく、、というのが実現できますが、このような簡単な実装でそれなりに対応することもできます。(雨情報表示)おまけとして、今までのLチカを少し応用して、これから雨が降りそうか、、という情報表示ガジェットを作ってみましょう。LEDなどはそのままで、プログラムだけ作り変えます。情報源は、商用でも無償利用できる"OpenWeatherMap"を使い、下記のような仕様とします。左が0〜6時間までの情報。(出かけるときに雨が降るか?)真ん中が6〜12時間までの情報。(仕事の帰りに雨が降るか?)一番右が12~18時間までの情報。(帰りが遅くなった場合に雨が降るか?)上記それぞれの時間帯で、降雨量が0mm/hより多い場合は暗めに光り、1.5mm/hより多い場合は明るめに光る。いう感じで、ざっくりとしたプログラムを作成しました。STATE_OFF;}このような感じです。一通り動いているはずですが、天気の情報相手なのでしばらく動かしてみないと改善点なども見えてこないかなぁ、と思います。自宅の玄関に設置して運用です。まとめいかがでしたでしょうか。ありましたが、同じくらい簡単にJavaScriptでもLチカさせることができました。今回使ったパッケージ"node-rpio"ではI2CやSPIなどの規格も扱えるようなので、他のセンサーとの連携もできそうです。そちらは、次の機会に確かめてみたいと思います。Xの顔認証からルンバまで。indexともに世界をアップグレードできる、そんな日を夢見て。