ラズベリーパイのGPIOを、Node.jsで操作してLED光らせてみた!

1

前々から、ラズベリーパイのGPIOをJavaScriptでいじりたかったのですが、いろいろ試行錯誤した結果、Node.jsを使うことにしました。

と言っても、ガッツリNode.jsを知らなくても大丈夫で、今回は非常にシンプルなコードしか使いません。(ファイルシステムをチョコっと使うくらい…)


事前準備!

2

今回、用意するのは…、

となっています。

(参考)
ラズベリーパイ「電子工作入門キット」|Amazon

あと、私のラズパイ環境なのですが、Google製の「Coder」を導入して、SSH接続でMacbookのターミナルから無線LANで操作しています。

(参考)
参考:「Coderを使って、ラズパイをSSH接続!

もし、同じように進めたい場合は、上記リンクを参考にしてみてください。

ただ、特殊な環境ですが、Node.jsで操作する方法は、基本的には普通のラズベリーパイと同じことをするので、無理に合わせなくても問題ありません。

 
本題の「Node.js」に関しては、Coderを使っていれば一緒にインストールされているのですが、自分でインストールする場合は、以下のリンクを参考にしてみてください。

(参考)
Node.jsの準備」|うえぶまなぶ


LEDを光らせる基本操作!

まずは、ターミナル上でラズパイのファイルを直接操作して、LEDを光らせてみたいと思います。

予備知識として、LEDは「アノード(足が長い)」から「カソード(足が短い)」へ電流が流れるという点に注意しましょう。

3

 
そして、今回は25番ピンから電気が流れて、LEDが点灯しながらGNDへ抜けていくようになっています。

4

 
イラストにすると、こんな感じ!

5

(参考)
「ラズベリーパイGPIO図

 
LEDを光らせるために、まずはラズパイのターミナル上から直接ファイルを操作したいと思います。

ファイルへのアクセス権が必要なので、rootに移動します。

$ sudo su

これで、rootになりました。

 
次に、以下のコマンドを入力して、25番ピンを「export」します。

$ echo 25 > /sys/class/gpio/export

これで、25番ピンを使えるようになりました。

 
今回は、25番ピンから電気を出力するので「out」に設定します。

$ echo out > /sys/class/gpio/gpio25/direction

これで、もう準備完了です!

 
LEDを「ON」にするには、数字の「1」を書き込めばOKです!

$ echo 1 > /sys/class/gpio/gpio25/value

どうですか? 光りましたか?

 
LEDの「OFF」は、数字の「0」を書き込みます。

$ echo 0 > /sys/class/gpio/gpio25/value

これで消灯になりました。

あとは、上記の方法で「1」と「0」を切り替えれば、LEDが点灯したり消灯したりするわけです。

 
最後に、終了する時は使ったピンを「unexport」するのを忘れないようにしましょう!

$ echo 25 > /sys/class/gpio/unexport

これでOK!

再度、同じことをしたい場合は、もう一度最初の「export」から実行してみましょう。(最後に、元のユーザーに戻しておきましょう…)

(参考)
rootから元のユーザーに戻すには、「exit」と入力すればOKです。


「Node.js」で光らせてみよう!

それでは、先ほどと同じことを「Node.js」でやってみたいと思います。

ラズパイのターミナル上から、「led.js」というファイルを作成して、以下のようなコードを書いて保存します。(今回はrootにしなくてもOKです…)

led.js
1
2
3
4
5
6
7
8
9
10
var fs = require('fs');

fs.writeFileSync('/sys/class/gpio/export', 25);
fs.writeFileSync('/sys/class/gpio/gpio25/direction', 'out');
fs.writeFileSync('/sys/class/gpio/gpio25/value', 1);

setTimeout(function(){
fs.writeFileSync('/sys/class/gpio/gpio25/value', 0);
fs.writeFileSync('/sys/class/gpio/unexport', 25);
}, 2000);

あとは、このプログラムを実行すれば良いのですが、内容を少し解説しておきます。

 
まずは、ファイルを操作する必要があるので、Node.jsの「fs」モジュールを使えるようにしておきます。

var fs = require('fs');

 
あとは、最初に実行したように、25番ピンを「export」し、出力「out」にしてからLEDの「ON(1)」を実行します。

fs.writeFileSync('/sys/class/gpio/export', 25);
fs.writeFileSync('/sys/class/gpio/gpio25/direction', 'out');
fs.writeFileSync('/sys/class/gpio/gpio25/value', 1); 

 
少し、プログラミングらしいことをしているのは、以下のコードくらいでしょうか。

setTimeout(function(){
        fs.writeFileSync('/sys/class/gpio/gpio25/value', 0);
        fs.writeFileSync('/sys/class/gpio/unexport', 25);
}, 2000);

今回は、手っ取り早く「setTimeout」を使って、2秒後に中身が実行されるようにしてます。(2秒後にLEDを消灯して25番ピンをunexport)

 
このプログラムを実行してみます!

$ sudo node led.js

 
これで、2秒間LEDが点灯して消えます。

6

 
ただし、私の環境だと「sudo」が実行できなかったので、実行できるように設定しました。

まず、Node.jsのインストール先を調べます。

$ whereis node

/opt/node/bin/node

環境によって、パスは変わるので適宜読み替えてください…。

 
最後に、以下のコマンドを実行。

$ sudo ln -s /opt/node/bin/node /usr/bin/node

これで、sudoが実行できるようになり、LEDが光りました!


まとめ

「Node.js」に関しては、ラズパイのGPIOを簡単に操作できるライブラリが多く公開されているので、このあたりを使った方が効率は良いかもしれません。

また、Node.jsを使えば、ブラウザ上からGPIOを操作したりも実現できると思うので、このあたりに関しては、また次回に挑戦したいと思います。

(参考)
ラズベリーパイ活用記事まとめ


最新情報をチェック!

一緒によく読まれている記事

キーワード Keyword