Raspberry Pi のGPIOに色々なデバイスを接続しIoTを試しています。Node.jsを使えばRaspberry PiでIoTを容易に実現できます。しかし,GPIOを使った入出力制御にはroot権限が必要でNode.js動作環境のセットアップに工夫が必要です。このページは,その工夫の備忘書きです。
-
概要
- 最新バージョンの RASBIAN には nodejs が収容されていますが,現行のものと比べてかなり古いバージョンなのでアンインストールし新しいバージョン(例ではv5.4.0)をインストールします。
- nvm(node version manager)を使うとnodeのインストールとバージョンコントロールを極めて簡単に行うことができます。
- しかし,nvmの一般的方法でインストールしたnodeは複数ユーザで使う考慮がされてません。
- sudo node としてroot権限でnodeを動かそうとしても node: command not found となります。
- 上の不都合を回避するための環境設定が必要です。
-
前提
- RASBIAN (jessie以降のバージョン) がインストールされ正しく動いていること。
- インターネットに接続していること。
- gitコマンドが有効になっていること。
- shell(bash)の操作に,ある程度習熟していること。
-
作業
- コンソールの表示を英語モードにします。
日本語モードのままでもOKなのですが,条件によっては日本語フォントが表示できず操作への反応メッセージがトーフ(■)で表示され場合があるのでこれを回避するためです。$ export LANG=C
- gitコマンドの動作を確認します
$ git --version git version 2.1.4
バージョン番号が帰ってくればgitコマンドは動作します。
- node v0.10.29をアンインストールします
$ sudo apt-get autoremove nodejs
- nvmをインストールするディレクトリ(/usr/local/nvm)を作成しアトリビュートを変更します
$ sudo mkdir /usr/local/nvm $ sudo chmod 777 /usr/local/nvm
- nvm.gitリポジトリのクローンを作成します
$ git clone https://github.com/creationix/nvm.git /usr/local/nvm
- nvmを使えるようにします
$ source /usr/local/nvm/nvm.sh
- nodeをインストールします
nvmでインストールできるnodeのバージョン一覧を表示 $ nvm ls-remote v5.4.0をインストール $ nvm install v5.4.0
- node, npm のバージョン表示して動作することを確認します
$ node -v v5.4.0 $ npm -v 3.3.12
- ログイン時にnvm,nodeの起動設定を行うようにします
/etc/profile.d/ディレクトリ配下に次の内容のnvm.shを作成します。$ sudo vi /etc/profile.d/nvm.sh または $ sudo nano /etc/profile.d/nvm.sh 次の行を記述して保存 source /usr/local/nvm/nvm.sh
node-v5.4.0 が node コマンドで起動するようにdefaultエイリアスを設定します。
$ nvm alias default v5.4.0
以上の設定でログイン時にnvm.shが実行され node コマンドへの v5.4.0の割り付けとnvm, npmへのパスが設定されます。
- sudo node が動くようにします
$ sudo visudo nanoエディタが起動しsudoの動作定義ファイルが開きます。 次の行をコメントアウトします。 #Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin 次の行を追加します。 Defaults env_keep += "PATH"
sudoの動作環境に現在のユーザのコマンド・パスを引き渡す設定です。
- コンソールの表示を英語モードにします。
-
NodeでGPIOを動かす
- johnny-five他のパッケージをインストールします
johnny-fiveパッケージのインストール $ npm install johnny-five
raspi-ioパッケージのインストール $ npm install raspi-io
- GPIOの7番ピンに接続したLEDを1秒(1000mS)間隔で点滅させます。
次のコードを記述したソース・ファイルgpio-led7.jsを作成します。var raspi = require('raspi-io'); var five = require('johnny-five'); var board = new five.Board({ io: new raspi(); }); board.on('ready', function() { var led = new five.led('P1-7'); led.blink(1000); });
実行します
$ sudo node gipo-led7.js 1453297162821 Device(s) RaspberryPi-IO 1453297162907 Connected RaspberryPi-IO 1453297162937 Repl Initialized >> $ node gpio-led7.js wiringPiSetup: Must be root. (Did you forget sudo?) Aborted
GPIOを操作するプログラムは sudo で実行しないと動作しません。
- johnny-five他のパッケージをインストールします
-
Node.jsのバージョン管理
- Node.jsの開発スピードは非常に早く頻繁にバージョンアップされます。
nvmは使用するNode.jsのバージョンコントロールを強力にかつ簡単に行なえます。 - Node.jsのバージョンリストを表示する。
$ nvm ls-remote
リストが表示されます。青文字のバージョンは現在自分がaliasに設定している(node で起動する)バージョンです。
- 最新版をインストールする
2016.06.18時点での最新安定版v6.2.2をインストールします。$ nvm install v6.2.2 Downloading https://nodejs.org/dist/v6.2.2/node-v6.2.2-linux-... ######################################################### 100.0% Now using node v6.2.2 (npm v3.9.5)
- インストールされているNode.jsのリストを表示する
$nvm ls v5.4.0 -> v6.2.2 default -> v5.4.0 node -> stable (-> v6.2.2) (default) stable -> 6.2 (-> v6.2.2) (default) iojs -> N/A (default)
v5.4.0とv6.2.2がインストールされているのがわかります
- defaultをv6.2.2にする
$ nvm alias default v6.2.2
- 旧バージョンを使う
ソースコードが新バージョンに対応せず旧バージョンのNode.jsで実行したいときは$ nvm use v5.4.0
として,一時的にnodeのaliasをv5.4.0に変更します。
- 旧バージョンのアンインストール
$ nvm uninstall v5.4.0
- Node.jsの開発スピードは非常に早く頻繁にバージョンアップされます。
Node.js 関連記事
Node.jsでIoT-WeatherStation (I2C 気圧・温度センサーで計測)
備忘:「n」を用いたnode.js のインストール
upload 2016.09.22