Raspberry Pi + DS18B20で温度測定

更新日2017-06-18 (日) 09:03:08

友人からDS18B20が乗っている小さなPWBをもらった。Raspberry Piに接続してみた。電子工作は何十年ぶりだろう。ケーブルももらったが、オスとメスのタイプ。接続するのはオスをメスに変更する必要があった。自宅の押し入れから、メスとして利用出来そうなコネクタを探し、コネクタを変更。ついていたプラスチックのカバーが利用できるかと思い、装着しようとしたが、入らず。そういえば収縮チューブがあったと思い、また押入を捜索。ようやく見つけて工作開始。
歳をとったので目が見えない。TO-92のケースの印刷文字が見えないのに愕然とした。

温度センサー1.jpg

工作内容

  • PWBにはプルアップがついていなかったので、DS18B20の2-3ピンの間に10Kの抵抗を半田付。
  • DS18B20の3番ピン(VDD)をRaspberry Piの2番PIN(5V)に接続
  • DS18B20の1番ピン(GND)をRaspberry Piの4番PIN(GND)に接続
  • DS18B20の2番ピン(DQ)をRaspberry Piの7番PIN(GPIO 4)に接続
  ---------
  |        |
  |DS18B20 |
  |        |
  ---------
   |  |  |
   |  |  |
   1  2  3

   G  D  V
   N  Q  D
   D     D

モジュールをロード

DS18B20を認識させるために1-wire用のモジュールをロードするため以下を記述

  • /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

i2c-dev
mt7650u_sta

# 以下を追加
w1-gpio
w1-therm

1-wireを有効にするための設定

以下のファイルを編集して最後に追加

  • /boot/config.txt
dtoverlay=w1-gpio-pullup,gpiopin=4
  • gpiopin:GPIO 4を指定

その後再起動

$ sudo reboot

確認

  • モジュールのロードの確認
$ lsmod | grep w1
w1_therm                3584  0
w1_gpio                 3657  0
wire                   25219  2 w1_gpio,w1_therm
  • 以下のファイルにデータが入る。28-041470da67ffは変わるので28-XXXXXXXを探す
$ cat /sys/bus/w1/devices/28-041470da67ff/w1_slave
d9 01 55 00 7f ff 0c 10 2e : crc=2e YES
d9 01 55 00 7f ff 0c 10 2e t=29562

Webに表示

phpのインストール

$ sudo apt-get install php5-fpm
  • phpで温度を取得しrsyncでWebサーバにファイルを転送
  • 繰り返しはcronで指定.
  • 参考のページからphpプログラムを得て、一部改造
  • t.php
#! /usr/bin/php
<?php
$deviceId = '28-041470da67ff';
$today = date("Ymd");
$time = date("H:i");
$sensor_path = '/sys/bus/w1/devices/'.$deviceId.'/w1_slave';
$csv_dir = '/home/pi/temperature/';
$csv_file = 'index.html';
$t = null;
//温度取得
exec("cat ".$sensor_path, $w1_slave);
if(isset($w1_slave[1])){
$tmp = explode('t=', $w1_slave[1]);
if(isset($tmp[1])) $t = $tmp[1] / 1000;
}
//CSV書き込み
if(!file_exists($csv_dir)){
mkdir($csv_dir);
}
if( $handle = fopen( $csv_dir.$csv_file , 'a' ) ){
fputs( $handle, $today."-".$time." ".$t." <br /> \n" );
fclose($handle);
}
$cmd = '/usr/bin/rsync -avz -e ssh /home/pi/temperature/index.html okada@192.168.10.46:/var/www/html/ondo/';
exec($cmd);
return;
?>

rsyncでパスワードなしでファイル転送できるように設定

クライアント側(SSHする側:192.168.10.123)の設定

  • 公開鍵の作成(192.168.10.123で作業)
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/pi/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/pi/.ssh/id_rsa.
Your public key has been saved in /home/pi/.ssh/id_rsa.pub.
The key fingerprint is:
e8:4d:2d:68:***********************49:b1:de pi@raspberrypi
The key's randomart image is:
+---[RSA 2048]----+
|    .. ooo       |
|     .. oo       |
|    + o B        |
|   . B O =       |
|    . * S E      |
|     o + .       |
|      . .        |
|                 |
|                 |
+-----------------+
pi@raspberrypi:~/.ssh $ ls -a
.  ..  id_rsa  id_rsa.pub

SSH先のサーバへ公開鍵をコピー

  • Webサーバ(192.168.10.46)で作業
  • id_rsa.pubをraspberrypiからWebサーバ(/tmp)に転送
  • /tmp/id_rsa.pubを~okada/.ssh/authorized_keysに追加(今回は初めてなのでコピー)

$ cd /tmp $ rsync -avz -e ssh pi@192.168.10.123:~pi/.ssh/id_rsa.pub . $ cd ~/.ssh $ cp /tmp/id_rsa.pub authorized_keys

  • 確認

192.168.10.123からサーバへ接続

$ ssh okada@192.168.10.46

パスワードなしでログオン

Webサーバに転送

/var/www/htmlにondoというフォルダを作成し、ユーザokadaで書き込み許可を与える

/var/www/html/ondoのindex.htmlが時間ごとに書き換わる。

  • crontab
*/20 * * * * /home/pi/temperature/t.php

VNCの起動

pi@raspberrypi:~/.vnc $ tightvncserver :1 -geometry 1280x800 -depth 24

You will require a password to access your desktops.

Password:
Verify:
Would you like to enter a view-only password (y/n)? n

New 'X' desktop is raspberrypi:1

Starting applications specified in /home/pi/.vnc/xstartup
Log file is /home/pi/.vnc/raspberrypi:1.log

アクセス

192.168.10.123:5901

 

参考


添付ファイル: file温度センサー1.jpg 68件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-06-18 (日) 09:03:08 (492d)