大島です。

温湿センサー(DHT11)とRaspberry Pi(node.js)、そしてBluemix(node-red)を使ってIoT体験していきたいと思います。
今回は前回の記事でセットアップを行ったRaspberry Piと温湿センサー(DHT11)を結合して実際の温度と湿度の情報をRaspberry Pi上に表示させたいと思います。

Raspberry PiとDHT11のセットアップ

Raspberry PiとDHT11の結合

Raspberry PiとDHT11を結合するためはプレットボードが1つとジャンパーワイヤー(オス・メス)が3本
そして10kΩが1つ必要です。
実際の結線図は以下のとおりです。
nodejs_結線図

DHT11のピンとRaspberry Piのピンの対応表は下記のとおりです。

DHT11 Raspberry Pi
PIN1 PIN1(3.3VDC)
PIN2 PIN7(GPIO7)
PIN3 使いません
PIN4 PIN9(GROUND)

IMG_0021

Raspberry Pi上でDHT11を操作するための準備

DHT11から温度情報と湿度情報を取得するためにRaspberry Pi上でプログラムを用意する必要があります。利用できるプログラムとしては大きく2つありPythonかnode.jsになります。
今回はnode.jsを利用したいとお思います。

node.jsのアップデート

Raspberry Pi標準でインストールされているnode.jsはv0.10.X系ですがnode.jsでDHT11を利用するためのモジュールがv0.10.X系では対応していません。そのため、最新のv5.X系へバージョンアップを行います。
以下のコマンドを実行してください。
(15分~20分程度)

pi@raspberrypi:~
$ curl -sL https://deb.nodesource.com/setup_5.x | sudo -E bash -
pi@raspberrypi:~
$ sudo apt-get install -y nodejs

アップデートが完了しましたら、以下のコマンドを実行してnode.js/npmのバージョンを確認しましょう。

pi@raspberrypi:~
$ node -v
v5.11.0
pi@raspberrypi:~
$ npm -v
3.8.6

BCM2835のインストール

node.jsでプログラムを作成する際に
node-dht-sensorモジュールを利用します。
node-dht-sensorは内部でBCM2835というモジュールを利用しているため事前にインストールが必要となります。

まずはBCM2835をダウンロードするための作業用ディレクトリを作成します。

pi@raspberrypi:~
$ sudo mkdir -pm 755 /work/download
pi@raspberrypi:~
$ ls -ld /work/download
drwxr-xr-x 2 root root 4096 Apr 29 05:21 /work/download

次に、BCM2835の最新版をRaspberry Piにダウンロードします。
最新版のBCMについては下記URLにアクセスいただきhttp://www.airspayce.com/mikem/bcm2835/「~ can be downloaded from」の後ろに続くURLをコピーして下さい。コピーしたURLを基に下記のコマンドを実行します。

pi@raspberrypi:~
$ cd /work/download
pi@raspberrypi:/work/download
$ sudo wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.50.tar.gz
pi@raspberrypi:/work/download
$ sudo tar xvfz ./bcm2835-1.50.tar.gz
pi@raspberrypi:/work/download
$ ls -l
total 252
drwxr-xr-x 5 pi   users   4096 Feb 28 03:28 bcm2835-1.50
-rw-r--r-- 1 root root  252178 Feb 28 03:28 bcm2835-1.50.tar.gz

続いて、bcmのインストールを行っていきます。
下記のコマンドを実行して下さい。(sudo make checkを実行した際に画面に「# PASS:  1」と表示されれば、bcmのインストールプレビューは正常です)

pi@raspberrypi:/work/download
$ cd bcm2835-1.50
pi@raspberrypi:/work/download/bcm2835-1.50
$ ./configure
pi@raspberrypi:/work/download/bcm2835-1.50
$ make
pi@raspberrypi:/work/download/bcm2835-1.50
$ sudo make check
pi@raspberrypi:/work/download/bcm2835-1.50
$ sudo make install

以上でインストールは終了ですがBCM2835のドキュメントを確認すると「device tree support」を有効化しろと記載がありますので実施したいと思います。

まず、下記のコマンドを実行して下さい。

pi@raspberrypi:/work/download/bcm2835-1.50
$ sudo raspi-config

続いて管理画面にて「Advanced Options」にマークを合わせEnterを押下。
enable1

「A5 Device Tree」にカーソルを合わせEnterを押下。
enable2

「Would you like the kernel to use Device Tree?」と聞かれるので
「Yes」を選択し、Enterを押下
enable3

「Device Tree is enabled」と表示されれば完了です。

enable4

最後に再起動を行い終了です。
お疲れ様でした。

sudo reboot

DHT11センサー情報を取得するプログラムの作成

node.jsを使ってDHT11から温湿情報を取得しRaspberry Pi上に表示するプログラムを作成していきたいと思います。

作業用ディレクトリの作成

node.jsのモジュールやプログラムを配置するディレクトリを初めに作成したいと思います。
下記は参考になりますので、不要であればスキップして下さい

pi@raspberrypi:~
$ sudo mkdir -m 755 /work/dhtapp
pi@raspberrypi:~
$ ls -ld /work/dhtapp
drwxr-xr-x 2 root root 4096 Apr 29 05:49 /work/dhtapp
pi@raspberrypi:~
$ cd /work/dhtapp

node-dht-sensorのインストール

それでは準備も整いましたのでnode-dht-sensorモジュールをインストールしていきます。
下記のコマンドを実行して下さい。(WARNについては、ここでは無視しても問題ありません)

pi@raspberrypi:/work/dhtapp
$ sudo npm install node-dht-sensor
npm WARN lifecycle node-dht-sensor@0.0.11~preinstall: cannot run in wd %s %s (wd=%s) node-dht-sensor@0.0.11 ./preinst /work/dhtapp/node_modules/.staging/node-dht-sensor-d6f41da0
/work/dhtapp
mqw node-dht-sensor@0.0.11
mqq nan@2.3.2

npm WARN enoent ENOENT: no such file or directory, open '/work/dhtapp/package.json'
npm WARN dhtapp No description
npm WARN dhtapp No repository field.
npm WARN dhtapp No README data
npm WARN dhtapp No license field.

node-dht-sensorのダウンロードは完了しましたが実はこのままでは利用することが出来ません。
node-gypを使ってダウンロードしたnode-dht-sensorを利用できるようにビルドします。
下記のコマンドを実行していきます。
(「node-gyp configure」・「node-gyp build」を実行した際に「gyp info ok」と表示されれば正常に完了しております)

pi@raspberrypi:/work/dhtapp
$ sudo npm install node-gyp -g
pi@raspberrypi:/work/dhtapp
$ cd /work/dhtapp/node_modules/node-dht-sensor
pi@raspberrypi:/work/dhtapp/node_modules/node-dht-sensor
$ node-gyp configure
pi@raspberrypi:/work/dhtapp/node_modules/node-dht-sensor
$ node-gyp build

以上で、node-dht-sensorのインストールが完了です。
お疲れ様でした。

DHT11から温湿情報を取得するnode.jsプログラムを作成する

それでは最後にDHT11センサーから温湿情報を取得するプログラムを作成していきたいと思います
下記のソースコードを記載したプログラムを作成して下さい。

[dhtapp01.js]

var sensorLib = require('node-dht-sensor');

var sensor = {
initialize: function() {
return sensorLib.initialize(11, 4);
},
read: function() {
var readout = sensorLib.read();
console.log('tem: '+readout.temperature.toFixed(2)+'C, hum: '+readout.humidity.toFixed(2)+'%');
setTimeout(function() {
sensor.read();
}, 1500);
}
};

if (sensor.initialize()) {
sensor.read();
} else {
console.warn('Failed to initialize sensor');
}

それでは実行してみます。

pi@raspberrypi:/work/dhtapp
$ ls -l
total 12
drwxr-xr-x 2 root root 4096 Apr 29 06:00 build
-rw-r--r-- 1 root root  512 Apr 29 06:19 dhtapp01.js
drwxr-xr-x 4 root root 4096 Apr 29 05:56 node_modules
pi@raspberrypi:/work/dhtapp
$ sudo chmod 755 dhtapp01.js
pi@raspberrypi:/work/dhtapp
$ sudo node dhtapp01.js
tem: 24.00C, hum: 36.00%
tem: 24.00C, hum: 36.00%
tem: 24.00C, hum: 36.00%
tem: 25.00C, hum: 36.00%
tem: 26.00C, hum: 35.00%
tem: 26.00C, hum: 35.00%
tem: 26.00C, hum: 36.00%

如何でしたか、「tem」と「hum」の横に温度と湿度情報が表示されましたか?。

以上で「DHT11+Raspberry Pi+BluemixでIoTを体験 センサー編」終了となります。
お疲れ様でした。次回はラストとなり、温度と湿度情報をBluemix(node-red)へ送信して表示させるまでを行いたいと思います。