How to make

Raspberry Pi に Node.js をインストールする(nvm利用)

Raspberry Pi のGPIOに色々なデバイスを接続しIoTを試しています。Node.jsを使えばRaspberry PiでIoTを容易に実現できます。しかし,GPIOを使った入出力制御にはroot権限が必要でNode.js動作環境のセットアップに工夫が必要です。このページは,その工夫の備忘書きです。

  1. 概要
    1. 最新バージョンの RASBIAN JESSIE には node v0.10.29 が収容されていますが,現行のものと比べてかなり古いバージョンなのでアンインストールしv5.4.0をインストールします。
    2. nvm(node version manager)を使うとnodeのインストールとバージョンコントロールを極めて簡単に行うことができます。
    3. しかし,nvmの一般的方法でインストールしたnodeは複数ユーザで使う考慮がされてません。
    4. sudo node としてroot権限でnodeを動かそうとしても node: command not found となります。
    5. 上の不都合を回避するための環境設定が必要です。
  2. 前提
    1. RASBIAN JESSIEがインストールされ正しく動いていること。
    2. インターネットに接続していること。
    3. gitコマンドが有効になっていること。
    4. shell(bash)の操作に,ある程度習熟していること。
  3. 作業
    1. コンソールの表示を英語モードにします。
      日本語モードのままでもOKなのですが,条件によっては日本語フォントが表示できず操作への反応メッセージがトーフ(■)で表示され場合があるのでこれを回避するためです。

      $ export LANG=C
    2. gitコマンドの動作を確認します
      $ git --version
      git version 2.1.4

      バージョン番号が帰ってくればgitコマンドは動作します。

    3. node v0.10.29をアンインストールします
      $ sudo apt-get autoremove nodejs
    4. nvmをインストールするディレクトリ(/usr/local/nvm)を作成しアトリビュートを変更します
      $ sudo mkdir /usr/local/nvm
      $ sudo chmod 777 /usr/local/nvm
    5. nvm.gitリポジトリのクローンを作成します
      $ git clone https://github.com/creationix/nvm.git /usr/local/nvm
    6. nvmを使えるようにします
      $ source /usr/local/nvm/nvm.sh
    7. nodeをインストールします
      nvmでインストールできるnodeのバージョン一覧を表示
      $ nvm ls-remote
      
      v5.4.0をインストール
      $ nvm install v5.4.0
    8. node, npm のバージョン表示して動作することを確認します
      $ node -v
      v5.4.0
      
      $ npm -v
      3.3.12
    9. ログイン時に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へのパスが設定されます。

    10. sudo node が動くようにします
      $ sudo visudo
      nanoエディタが起動しsudoの動作定義ファイルが開きます。
      
      次の行をコメントアウトします。
      #Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin 
      
      次の行を追加します。
      Defaults    env_keep += "PATH"

      sudoの動作環境に現在のユーザのコマンド・パスを引き渡す設定です。

  4. NodeでGPIOを動かす
    1. johnny-five他のパッケージをインストールします
      johnny-fiveパッケージのインストール
      $ npm install johnny-five
      raspi-ioパッケージのインストール
      $ npm install raspi-io
    2. 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 で実行しないと動作しません。

  5. Node.jsのバージョン管理
    1. Node.jsの開発スピードは非常に早く頻繁にバージョンアップされます。
      nvmは使用するNode.jsのバージョンコントロールを強力にかつ簡単に行なえます。
    2. Node.jsのバージョンリストを表示する。
      $ nvm ls-remote

      リストが表示されます。青文字のバージョンは現在自分がaliasに設定している(node で起動する)バージョンです。
      末尾が奇数のバージョンは開発版,偶数のものが安定版です。

    3. 最新版をインストールする
      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)
      
    4. インストールされている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がインストールされているのがわかります

    5. defaultをv6.2.2にする
      $ nvm alias default v6.2.2
    6. 旧バージョンを使う
      ソースコードが新バージョンに対応せず旧バージョンのNode.jsで実行したいときは

      $ nvm use v5.4.0

      として,一時的にnodeのaliasをv5.4.0に変更します。

    7. 旧バージョンのアンインストール
      $ nvm uninstall v5.4.0

Node.js 関連記事

Node.jsでIoT-WeatherStation (I2C 気圧・温度センサーで計測)

Copyright © kosakalab All Rights Reserved.
Powered by WordPress & BizVektor Theme by Vektor,Inc. technology.