6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RaspberryPi3を使ってLINE BOTに部屋の温度を教えてもらう【node.js】

Last updated at Posted at 2018-05-20

要件

外出時、LINEで部屋の温度が知りたい
→ node.jsを使ってラズパイから部屋の温度を取得し、LINEBotで返信する

前提条件

  • LINE BOTが使えるようになっていること
  • ラズパイが初期設定済
  • ngrokが使えるようになっていること

上記は前回参照
Node.jsで LINE BOT作ってみる のメモ【1時間でできる!】

今回の作業概要

  1. ラズパイに最新版のnodeとnpmをインストールする
  2. 温湿度センサー DHT11をnode.jsで使えるようにする
  3. 温湿度を聞く(Botで返信)

所要時間 うまくいけば2時間

1.ラズパイに最新版のnodeとnpmをインストールする

最新バージョンの RASBIAN には nodejs が収容されているが,現行のものと比べてかなり古いバージョンなのでアンインストールし新しいバージョンをインストールします
参照記事
https://make.kosakalab.com/make/electronic-work/nodejs_raspi/

2.温湿度センサーをnode.jsを使って使えるようにする

センサー・DHT11の接続(ラズパイをシャットダウンし、電源を切ってから配線しましょう!)
How-to-Setup-the-DHT11-on-the-Raspberry-Pi-Four-pin-DHT11-Wiring-Diagram.png
参照 http://www.circuitbasics.com/how-to-set-up-the-dht11-humidity-sensor-on-the-raspberry-pi/

IMG_E7024.JPG

ラズパイの起動

ディレクトリ構成の確認

server.js     node_modules      package-lock.json package.json```


今回はnode.jsを利用するので
node-dht-sensorというライブラリをインストールしよう!

## bcm2835をraspbianにインストールする
bcm2835というライブラリが必要(依存ライブラリ)
http://www.airspayce.com/mikem/bcm2835/

ディレクトリ構成はこうなる予定
```/mylinebot
server.js     dht.js   plugins    node_modules      package-lock.json package.json

ディレクトリ作成
$ mkdir plugins
$ cd plugins

下記のコマンドを実行

//www.airspayce.com/mikem/bcm2835/bcm2835-1.55.tar.gz
$ tar zxvf bcm2835-1.55.tar.gz 
$ cd bcm2835-1.55/
$ ./configure
$ make
$ sudo make check
$ sudo make install

sudo make checkを実行した際に画面に「# PASS: 1」と表示されれば、bcmのインストールは正常に完了

うまくいかない時は
参照記事
https://github.com/bpmurray/node-red-contrib-dht-sensor/issues/13
https://www.niandc.co.jp/sol/tech/date20160513_545.php

本命・node-dht-sensorのインストール

$ sudo npm install —save-dev node-dht-sensor --dht_verbose=true --unsafe-perm

node-gypを使って、ダウンロードしたnode-dht-sensorをビルド

$ cd ~/workspace/mylinebot/node_modules/node-dht-sensor
$ sudo node-gyp configure
$ sudo node-gyp build

「node-gyp configure」・「node-gyp build」を実行した際に「gyp info ok」と表示されれば正常に完了

プログラムを作成

dht.jsを作成
$ touch dht.js

まずはconsole.logで確認するプログラム

dht.js
var sensor = require('node-dht-sensor');

sensor.read(11, 4, function(err, temperature, humidity) {
    if (!err) {
        console.log('temp: ' + temperature.toFixed(1) + '°C, ' +
        'humidity: ' + humidity.toFixed(1) + '%'
        );
    }
});

nodeで起動し確認
$ node dht.js
temp: 21.0°C, humidity: 41.0%

取得できた!(゚∀゚)

3.温湿度を聞く(LINE Botで返信)

dht.jsの編集

dht.js
const sensorLib = require('node-dht-sensor');

const sensor = {
    sensors: [ {
        name: "DHT11",
        type: 11,
        pin: 4
    } ],
    read: function() {
        const readout = sensorLib.read(this.sensors[0].type, this.sensors[0].pin);
        return '室内の温度は'+readout.temperature.toFixed(1)+'℃、'+'湿度は'+readout.humidity.toFixed(1)+'%です。';
    }
}

exports.getData = function() {
    try {
        return sensor.read();
    } catch (error) {
        return 不明です;
    }   
}

server.jsの編集

以下を追加

server.js
const dht = require(./dht);


if(event.message.text === 'いまなんど') {
    mes = dht.getData();
} else {
    mes = event.message.text;
}

サーバーを起動しngrokでトンネリング。WebHook URLを編集→この辺は前回参照
「いまなんど」と聞いたら返事が来ますよ!ヽ(・∀・)ノ

おつかれさまでした!ヽ(・∀・)ノ

参照させていただいた記事
https://qiita.com/kohbis/items/feeb91727e1bcbd4f092

次回はPush API!
LINE BOTでラズパイから温度を通知【Push API】【Node.js】

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?