Node.jsでRaspberryPiのGPIOを使ってみます。今回はデバイスドライバを使ってLEDのONとOFFを操作します。以下のような簡単な回路でLEDを操作します。
準備、前提は以下です。
以下の記事でブレッドボードでのLEDの接続とコマンドラインとC言語のプログラムでデバイスドライバを使ってLEDを操作しています。
Raspberry PiでC言語版Lチカを試す(その1)デバイスドライバ利用
以下の記事でNode.jsをインストールして動作確認をしています。
Raspberry PiでのNode.jsの導入(その1)インストールと動作確認
つまり、デバイスドライバにNode.jsからファイル操作で書き込んでブレッドボード上のLEDを操作するということです。今回はまずは単純なLEDのONとOFFを別々のファイルに書いてみました。以下です。
ONにするプログラム
var fs = require('fs'); fs.writeFileSync('/sys/class/gpio/export', 21); fs.writeFileSync('/sys/class/gpio/gpio21/direction', 'out'); fs.writeFileSync('/sys/class/gpio/gpio21/value', 1); var value = fs.readFileSync('/sys/class/gpio/gpio21/value','ascii'); console.log(value); fs.writeFileSync('/sys/class/gpio/unexport', 21);
Offにするプログラム
var fs = require('fs'); fs.writeFileSync('/sys/class/gpio/export', 21); fs.writeFileSync('/sys/class/gpio/gpio21/direction', 'out'); fs.writeFileSync('/sys/class/gpio/gpio21/value', 0); fs.writeFileSync('/sys/class/gpio/unexport', 21);
LEDをONにするプログラムがon.jsで、OFFにするプログラムがoff.jsとすると以下のように操作します。
$ sudo node on
$ sudo node off
ルート権限が必要なのでsudo で実行しています。この時にパスが通っていないと、command not foundになるのでパスの通っているユーザで、which node等でNode.jsの場所を確認してフルパスで実行してみて下さい。
あと、中途半端にGPIOが使用中になった場合は以下で解除して下さい。21は例です。お使いのGPIOのピン番号を指定して下さい。
$ echo 21 > /sys/class/gpio/unexport
処理としては、Raspberry PiでC言語版Lチカを試す(その1)デバイスドライバ利用 でコマンドラインやC言語で操作したことをNode.jsで操作しているということです。ここでは簡単に同期メソッドを使っています。ONの場合のみ値を読み込んで表示しています。
実際に操作してみるとONの場合に値を読み込んでいるということもあるかもしれないですが、反応が遅いかなという気もしました。処理速度が必要な場合はC言語で直接レジスタを操作する方法もあるのでここでは処理速度は気にしないこととします。
今回はここまでです。次回はブラウザからこの操作が出来るようなWebサーバ的なプログラムを作ってみます。