*温度センサー(DS18B20)と湿温度センサー(DHT11)をRaspberry Pi2に接続 [#h3fe496e]

RIGHT:更新日 &lastmod();

GPIO4にDHT11のI/O、GPIO17にDS18B20のI/O(Pin2)接続

カタログ
&ref("./SKU-20-011-986_manual_aki.pdf");


&ref("./温湿度計.jpg");


Raspberry Piの

''/boot/config.txt''

以下を最後尾に追加

 # Edit by ISM
 dtoverlay=w1-gpio-pullup,gpiopin=4
 dtoverlay=w1-gpio-pullup,gpiopin=17


''/etc/modules''

以下を最後尾に追加

 w1-gpio
 w1-therm

その後再起動


**DS18B20部 [#ccbdee01]

-Raspberry Piで以下のt2.phpをcronで30分ごと実行する。

 */30 * * * * /home/pi/temperature/t2.php

-23:45にtmp.htmlファイルを削除

 45 23 * * * /bin/rm /home/pi/temperature/tmp.html

-Webサーバで、23:40に当日日付ファイル(ex. 20170620.html)にindex.htmlをリネーム

 35 23 * * * /usr/bin/php /home/okada/script/move_ondo.php  > /dev/null 2>&1



''t2.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/';
 $tmp_file = 'tmp.html';
 $html_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.$tmp_file , 'a' ) ){
 fputs( $handle, $today."-".$time." ".$t." <br /> \n" );
 fclose($handle);
 }
 
 $cmd = '/usr/bin/tac '.$csv_dir.$tmp_file.' > '.$csv_dir.$html_file;
 exec($cmd);
 
 $cmd = '/usr/bin/rsync -avz -e ssh /home/pi/temperature/index.html okada@192.168.10.46:/var/www/html/ondo/';
 exec($cmd);
 return;
 ?>

''move_ondo.php''

 #! /usr/bin/php
 <?php
 $today = date("Ymd").'.html';
 $cmd = '/bin/mv /var/www/html/ondo/index.html /var/www/html/ondo/'. $today;
 exec($cmd);
 return;
 ?>


**DHT11部 [#ua2bdad9]

dht11-1.cはdht11を改造してデータを取り出せるまで繰り返し、取り出したデータを標準出力する。



 /*
  *  dht11-1.c:
  *      Simple test program to test the wiringPi functions
  *      DHT11 test
 */
 
 #include <wiringPi.h> 
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdint.h>
 #define MAXTIMINGS      85
 #define DHTPIN          7
 #define OFFSET          2.5
 #define OFFSET1         2
 #define OFFSET2         0.5
 #define OFFSET3         20
 
 
 int dht11_dat[5] = { 0, 0, 0, 0, 0 };
 int flag;
 
 void read_dht11_dat()
 {
         uint8_t laststate       = HIGH;
         uint8_t counter         = 0;
         uint8_t j               = 0, i;
         float   f; /* fahrenheit */ 
 
         dht11_dat[0] = dht11_dat[1] = dht11_dat[2] = dht11_dat[3] = dht11_dat[4] = 0;
 
         /* pull pin down for 18 milliseconds */
         pinMode( DHTPIN, OUTPUT );
         digitalWrite( DHTPIN, LOW );
         delay( 18 );
         /* then pull it up for 40 microseconds */
         digitalWrite( DHTPIN, HIGH );
         delayMicroseconds( 40 );
         /* prepare to read the pin */
         pinMode( DHTPIN, INPUT );
 
         /* detect change and read data */
         for ( i = 0; i < MAXTIMINGS; i++ )
         {
                 counter = 0;
                 while ( digitalRead( DHTPIN ) == laststate )
                 {
                         counter++;
                         delayMicroseconds( 1 );
                         if ( counter == 255 )
                         {
                                 break;
                         }
                 }
                 laststate = digitalRead( DHTPIN );
 
                 if ( counter == 255 )
                         break;
 
                 /* ignore first 3 transitions */
                 if ( (i >= 4) && (i % 2 == 0) )
                 {
                         /* shove each bit into the storage bytes */
                         dht11_dat[j / 8] <<= 1;
                         if ( counter > 16 )
                                 dht11_dat[j / 8] |= 1;
                         j++;
                 }
         }
 
         /*
          * check we read 40 bits (8bit x 5 ) + verify checksum in the last byte
          * print it out if data is good
          */
         if ( (j >= 40) &&
             (dht11_dat[4] == ( (dht11_dat[0] + dht11_dat[1] + dht11_dat[2] + dht11_dat[3]) & 0xFF) ) )
         {
                 f = (dht11_dat[2] + OFFSET) * 9. / 5. + 32;
                 printf( "Humidity = %d.%d %% Temperature = %d.%d *C (%.1f *F) <br /> \n",
                         dht11_dat[0]+OFFSET3, dht11_dat[1], dht11_dat[2]+OFFSET1, dht11_dat[3]+OFFSET2, f );
                 flag = 1;
         }else  {
//               printf( "Data not good, skip\n" );
                 flag = 0;
         }
 }
 
 int main( void )
 {
 //      printf( "Raspberry Pi wiringPi DHT11 Temperature test program\n" );
 
         if ( wiringPiSetup() == -1 )
                 exit( 1 );
 
         while ( 1 )
         {
                 read_dht11_dat();
                 delay( 1000 ); /* wait 1sec to refresh */
                 if (flag  == 1) break;
         }
 
         return(0);
 }

-コンパイル

 $ gcc -o dht11-1 dht11-1.c -L/usr/local/lib -lwiringPi


ft.phpはdht11-1実行し、結果をファイルに書き込み、そのファイルを逆に並べかる。
そのファイルをrsyncでサーバの送る。


''ft.php''

 #! /usr/bin/php
 <?php 
 
 $today = date("Ymd");
 $time = date("H:i");
 
 $outfile = '/home/pi/Thermo/ft_temp';
 
 $cmd = '/home/pi/Thermo/wiringPi/dht11-1  >> '.$outfile;
 exec($cmd);
 
 
 if( $handle = fopen( $outfile , 'a' ) ){
 fputs( $handle, $today."-".$time."  \n" );
 fclose($handle);
 }
 
 $cmd = '/usr/bin/tac /home/pi/Thermo/ft_temp > /home/pi/Thermo/index.html';
 exec($cmd);
 
 $cmd = '/usr/bin/rsync -avz -e ssh /home/pi/Thermo/index.html okada@192.168.10.46:/var/www/html/ondo/hum/';
 exec($cmd);
 return;
 ?>


***実行 [#f2a661eb]

-Raspberry Piのcronで30分おきに実行

 */30 * * * * /home/pi/Thermo/ft.php

-Raspberry Piのcronで23:50にdht11-1で実行したファイル削除。

 50 23 * * * /bin/rm /home/pi/Thermo/ft_temp


-Webサーバでcronで23:50にmove_hum.phpを実行。1日分のindex.htmlをその日のファイル名に変更~
(ex. 2017/06/22 → 20170622.html)


 40 23 * * * /usr/bin/php /home/okada/script/move_hum.php  > /dev/null 2>&1

''move_hum.php''

 #! /usr/bin/php
 <?php
 $today = date("Ymd").'.html';
 $cmd = '/bin/mv /var/www/html/ondo/hum/index.html /var/www/html/ondo/hum/'. $today;
 exec($cmd);
 return;
 ?>

***実験ページ [#f24e2dfc]

-温湿度計(DHT11)
--http://mz80.ism21.net/ondo/hum/

-温度計(DS18B20)
--http://mz80.ism21.net/ondo/

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS