Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

要件

外出時、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

ラズパイの起動

ディレクトリ構成の確認
/mylinebot
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

下記のコマンドを実行
$ wget http://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のインストール

https://github.com/momenso/node-dht-sensor

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

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

$ sudo npm install node-gyp -g
$ 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】

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした