ゆっくり技術ノート!

いつかきっとできるだろうよ

Raspberry Pi で温度と湿度を知る

Raspberry Pi で温度と湿度を知る

はじめに

この記事はおうちハック Advent Calendar 2016の21日目の記事です。
前日:ajimitei labo.: HUIS でいらすとやリモコンを作ってみた
翌日:MQTTベースのおうち環境にMESHを追加する - Qiita

遅刻記事になってしまい本当にすいません。
RasPiの不調と、風邪をひいてしまったのと、能力不足で遅くなってしまいました。

環境と機器

  1. Raspberry Pi B 3 (Rasbian 2016-11-25)
  2. 温湿度計 HDC1000

手順

実際の試行錯誤はトラブルの項にまとめています

Step.1 Rasbianの初期設定を終わらせてからraspi-configでi2cを有効にします

sudo raspi-config
7 Advanced Options > I2C

Step.2 確認します

lsmod

Step.3 i2c-toolsをインストールする

sudo apt-get install i2c-tools

Step.4 HDC1000の接続を確認

sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Step.5 Wiring Piはデフォルトで入っているので再度入れる必要はないです

Step.6 HDC1000から温湿度を読む

gcc -Wall -o hdc1000_sample -lwiringPi hdc1000_sample.c
sudo ./hdc1000_sample

Raspberry Pi 2 Model B でI2C 温度+湿度センサーモジュール(HDC1000)を使う - Qiita
とうい記事の中のサンプルコードをほとんどそのまま使わせてもらいました
ありがとうございます

Step.7 継続的なログを見るためにcsvを作ります

これをcronで実行します

require "csv"
results = `sudo ./hdc1000_sample`
stamp  = Time.now.to_s + "," + results
File.open("/home/pi/outi_hack/tem_hyg.csv","a"){|f|f.puts(stamp)}

Step.8 ブライザで見るためにSinatraで表示させます

sudo apt-get install -y sinatra
sudo apt-get install -y sinatra-contrib

require "sinatra"
require "csv"
require 'sinatra/reloader' if development?
set :bind, '0.0.0.0'

get '/' do

    logs = CSV.read("tem_hyg.csv").reverse
    time = logs[0][0]
    tem = logs[0][1]
    hyg = logs[0][2]

    p "TEM: " + tem + " HYG: " + hyg + "   (#{time})"

end

できました!

f:id:Coro:20170129180030p:plain

トラブルと嵌ったところ

恥を忍んで公開します、笑ってやってください

配線を間違えてHDC1000を壊す

  • 暗がりでRasPiにジャンパー線を差し込んでいたら青と黒を見間違えて壊しました
  • 焦げ臭くなって基板上のセンサチップの半田が溶けて位置がずれた
  • RasPiが壊れなかったのは不幸中の幸い

i2c が有効にならない

  • 最初はRaspberry Pi B 1 Rev.2でRasbian(2016-11-25)を使っていたのですがraspi-configでもi2c や spi の項目ができこず/etc/modulesなどで手動で試みるも有効になりませんでした
  • 結局 Raspberry Pi B 3 を用意して再度やったら何の問題もなくraspi-config`から有効にできました
  • 今記事を書いてる時点で確認したら Raspberry Pi B 3 でもI2Cの項目が消えました f:id:Coro:20161228032233p:plain

RasPiが家の外に繋がらない

  • 家の中の他の PC には ping が通るのですがapt-getできなかったりwgetできなかったりしました
  • 原因がわからなかったので OS を再書き込みしました

sshができない

Sinatraが外から見えない

おわりに

  • i2cはArduinoで使ったことがあったので「温湿度表示とか簡単だろう」とたかをくくっていましたが、大変なことになってしまいました
  • 本当はESP-WROOM-02で温湿度やCO2を計測してマトリクスLEDなんかをつけることを妄想していたのでいつになるかわかりませんが、やりたい
  • 温度と湿度があっているのか調べるために家にあったアナログの温湿度を3つHDC1000の隣に置いていたのですが温度は3つのアナログ温度計もHDC1000も大体一致するのですが湿度に関してはすべて約15%の誤差があり湿度を正確に知るのは難しいことがわかりました f:id:Coro:20161228033953j:plain
  • ここまでお付き合いいただきありがとうございました

参考URL

  1. Raspberry Pi 2 Model B でI2C 温度+湿度センサーモジュール(HDC1000)を使う - Qiita
  2. 共有ライブラリへパスを通す | hajichan.net technical version
  3. Raspberry Pi 3でRaspbian Jessieをセットアップする方法 - karaage. [からあげ]
  4. RubyでWiringPiを使う | ぬわーーーーーーー!!!
  5. 「全裸で学ぶMVC事始め」をruby + Sinatraでやってみた - 飲む、寝る。
  6. Raspberry Pi の I2C を有効化する方法 (2015年版) – ymyzk’s blog

ありがとうございます