伝説のSpice特別企画 いまさらIOT
rspberryにプログラムをインストールする
ラズベリーパイにapache2をインストールします。
このプログラムはraspberry-piをポート80hでWebサーバーにするためのプログラムです。 今回は基本的には不要ですが、raspberry-piの生存等を確認するためにインストールしておきます。 以下のコマンドを実行してApache2をインストールします。
sudo apt-get install apache2 -y
バージョン確認
apache2 -v
インストールが完了したらApache2の動作確認をします。 作業用PCでブラウザを立ち上げてURLの欄にラズパイのIPアドレスを入力します。 サーバーを置いた基板のホスト名称が 'raspberrypi.local' なので
http://raspberrypi.local/index.html を入力します。 以下の画面が表示されればインストール成功です。
このサーバーの詳細の設定ファイルは
/etc/apache2/apache2.conf
デフォルトhtmlファイルの置き場所は
/var/www/html/index.html
nodeをインストール
nodeをインストールします。 これはサーバーで動作するJavaScriptです。
世界一簡単なRaspberryPiにnode.jsを入れる方法
上記でnodeを管理するnpmというパッケージも一緒に入れましたが、その説明です
【npmとは?】 Node Package Managerの略で、Node.jsのモジュールを管理するツールです。
Expressをインストールします。
express-generator をインストールします。 これは今回にマッチした良い説明がありませんでしたので下記手順を書きます。
sudo npm install -g express-generator
作業ディレクトリを作成する
node express-generator が入りましたので作業するディレクトリを作成します。 ここでは xbeeIOT にします。 皆さんはなんでもいいですよ。 まず今のディレクトリの場所
pi@raspberrypi:~ $
これはSDカードのrootから/home/piの位置です。piが自分の作業位置ですので ~ $ になっています。 確認するには pwd とコマンドを入れてください。
pi@raspberrypi:~ $ pwd
/home/pi
そこで、この下に新しい xbeeIOT ディレクトリを作ります。
mkdir xbeeIOT
cd xbeeIOT
ディレクトリに入ると プロンプトにパスが表示されます
pi@raspberrypi:~/xbeeIOT $
express-generatorでプロジェクトを作成する
プロジェクトの名前は robo にします。 皆さんは何でもいいですよ。
express -e robo
下記が表示されます
warning: option `--ejs' has been renamed to `--view=ejs'
create : robo/
create : robo/public/
create : robo/public/javascripts/
create : robo/public/images/
create : robo/public/stylesheets/
create : robo/public/stylesheets/style.css
create : robo/routes/
create : robo/routes/index.js
create : robo/routes/users.js
create : robo/views/
create : robo/views/error.ejs
create : robo/views/index.ejs
create : robo/app.js
create : robo/package.json
create : robo/bin/
create : robo/bin/www
change directory:
$ cd robo
install dependencies:
$ npm install
run the app:
$ DEBUG=robo:* npm start
上記が表示されます。 この後の手順はこのメッセージ後半に表示されています。
下記の手順をします。
cd robo
npm install
サーバープログラムを実行するには 表示されている DEBUG=robo:* npm start を使います。
pi@raspberrypi:~/xbeeIOT/robo $ DEBUG=robo:* npm start
> robo@0.0.0 start /home/pi/xbeeIOT/robo
> node ./bin/www
robo:server Listening on port 3000 +0ms
この様なメッセージが表示されましたら、PCのブラウザからアクセスします。
アドレスは http://raspberrypi.local:3000/ です。 ’raspberrypi.local’の部分は皆さんが決めた名前です。 ブラウザに下記が表示されて コンソールに下記のようなメッセージが追加表示されます。 これはアクセスされたことを意味しています。
GET / 304 295.687 ms - -
GET /stylesheets/style.css 200 94.932 ms - 111
これでNodeを使用したWebサーバの原型が出来ました。
シリアルポートのパッケージを用意する
nodeでシリアルポートを使用するためにserialport のパッケージをインストールします。 ローカルプロジェクトにインストールします。
npm install serialport --save
/xbeeIOT/robo/node_modules/の下に @serialport のフォルダが出来ます。
GPIOを使用するのでインタフェースパッケージを用意する
rpi-gpioをインストール
Node.jsでraspberry piのハードウェアを叩く7つの方法
1. GPIOを叩くを参照してrpi-gpioをインストール
IO操作のパッケージをインストール npm i
rpi-gpio -s だけ
同期排他処理のパッケージを用意する
通信関連でいくつかの非同期スレッドからのリクエストは順列待ちにする必要があります。 そのときに使用する セマフォコントロールのようなパッケージです。
Promise で排他制御を行う
この中の記事にちょっとせつめいがあります。 インストール方法は
npm install async-lock --save
これで使用できるようになります。