sudo apt-get install i2c-tools python-smbus |
i2c-bcm2708 i2c-dev |
device_tree=bcm2708-rpi-b.dtb #device_tree_param=i2c1=on #device_tree_param=spi=on |
dtparam=i2c_arm=on dtparam=i2s=on dtparam=spi=on |
$ sudo usermod -a -G i2c karappi |
$ i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- |
$ sudo gem install i2c $ sudo gem install i2c-devices |
#!/usr/bin/env ruby #!/usr/bin/ruby -Ku #******************************************* # 温度センサーADT7410から温度を計測する # 2017.04.16 # http://blog.takady.net/blog/2015/12/18/raspberry-pi-with-adt7410/ # を参考にさせていただきました。 #******************************************* require 'i2c/device/adt7410' require 'i2c/driver/i2c-dev' require 'date' ########################### #温度をi2c経由で読み込む ########################### arr = Array.new log_file = "/home/karappi/public_html/ondo/ondo.log" device = I2CDevice::ADT7410.new(driver: I2CDevice::Driver::I2CDev.new('/dev/i2c-1'), address: 0x48) time=DateTime.now ondo = device.calculate_temperature.round 2 ########################### #ondo.logに追加書き込むする ########################### file=File.open(log_file,'a') file.print time.year,"/",time.mon,"/",time.day," ", time.hour,":",time.min,",",ondo,"\n" file.close |
-*- coding: utf-8 -*- import smbus import datetime # 日付のモジュールインポート from time import sleep log_file='ondo.log' def read_adt7410(): word_data = bus.read_word_data(address_adt7410, register_adt7410) data = (word_data & 0xff00)>>8 | (word_data & 0xff)<<8 data = data>>3 # 13ビットデータ if data & 0x1000 == 0: # 温度が正または0の場合 temperature =data * 0.0625 else: # 温度が負の場合、絶対値を取っ手からマイナスをかける temperature = ((~data & 0x1fff)+1) * -0.0625 return temperature bus =smbus.SMBus(1) address_adt7410 = 0x48 register_adt7410 = 0x00 inputValue = read_adt7410() #print(inputValue) #温度の表示 d=datetime.datetime.today().strftime('%Y/%m/%d %H:%M') file=open(log_file,'a') string_list= str(d)+','+str(inputValue)+'\n' #print string_list file.write(string_list) file.close() |
#!/bin/bash #/usr/bin/ruby $HOME/raspi_jikken/adt/adtr01.rb #/usr/bin/ruby /home/karappi/public_html/ondo/ondo.rb /usr/bin/python /home/karappi/public_html/ondo/ondo.py /usr/bin/tail -72 /home/karappi/public_html/ondo/ondo.log > /home/karappi/public_html/ondo/day.log /usr/bin/gnuplot < /home/karappi/public_html/ondo/day.bat # /usr/bin/tail -720 /home/karappi/public_html/ondo/ondo.log > /home/karappi/public_html/ondo/week.log /usr/bin/gnuplot < /home/karappi/public_html/ondo/week.bat |
set output
'/home/karappi/public_html/ondo/day.png' set terminal png set datafile separator ',' set xdata time set timefmt '%Y/%m/%d %H:%M' set format x '%H:%M' set xlabel 'time' set ylabel 'degree C' set title 'temperature at Sawatari Spa in GUNMA JAPAN' plot "/home/karappi/public_html/ondo/day.log" using 1:2 w lp |
set output
'/home/karappi/public_html/ondo/week.png' set terminal png set datafile separator ',' set xdata time set timefmt '%Y/%m/%d %H:%M' #set format x '%H:%M' set format x '%m/%d' set xlabel 'time' set ylabel 'degree C' set title 'temperature at Sawatari Spa in GUNMA JAPAN' plot "/home/karappi/public_html/ondo/week.log" using 1:2 w lp |
#!/usr/bin/env ruby6 #!/usr/bin/ruby -Ku #********************************************** # day.logから最高温度と最低温度のログmaxmin.logを作る # 1日1回、23:50分にcrontabで実行する。 # 入力はday.logファイル、出力はmaxmin.logファイル # day.logは1日の気温が3列目に20分毎に最高72個入っている # すべて同日のデータは23:45分〜0:00の間にclontabで処理する # 書式例(2917年3月16日に最低気温5.20 最高気温12.3の場合 # 2017/03/16 5.20 12.3 # 上のレコードが最大366行分記録される。367日目以降は # 先頭行を削除して最後尾に追加 #********************************************** require 'date' i_file="/home/karappi/public_html/ondo/day.log" o_file="/home/karappi/public_html/ondo/maxmin.log" hiduke = Array.new #日付の文字列用 old_hiduke = Array.new #日付の文字列用 rec_arr = Array.new #レコード操作用 t_max = -99.99 #最高温度の初期値 ありえない程低くしておく t_min = 99.99 #最低温度の初期値 ありえない程高くしておく old_hiduke = "2017/3/31" #日付の初期値 #もし途中で日付が変わったら古い日付のデータは捨てる。 ################################################## # day.logファイルを開いて # 最大72行分を配列に取り込む ################################################## #まずは配列にとりこむ i=0 File.open(i_file,'r'){|file1| file1.each{|line| str=line strAry=str.split(",") #strAry.each do |youso| # print youso,"\n" #end hiduke=strAry[0] #1列目が日付 hiduke=hiduke[0,hiduke.index(" ")] if old_hiduke != hiduke then t_max = -99.99 #最高温度の初期値 ありえない程低くしておく t_min = 99.99 #最低温度の初期値 ありえない程高くしておく old_hiduke = hiduke end temp= strAry[1].to_f #2列目が温度 #print temp,"\n" if t_max < temp then t_max = temp end if t_min > temp then t_min = temp end hiduke=strAry[0] #1列目が日付 hiduke=hiduke[0,hiduke.index(" ")] i=i+1 } } #print hiduke," ", t_min.to_s," ",t_max.to_s,"\n" #まずは出力ファイルを配列にとりこむ i=0 File.open(o_file,'r'){|file1| file1.each{|line| #print line rec_arr[i]=line i=i+1 } } #366行未満なら最後に日付と最低気温、最高気温を追加 #366行あったら最初の1行カットして最後に日付と最低気温と最高気温を追加 if i < 366 then file=File.open(o_file,'a') file.print hiduke," ", t_min.to_s," ",t_max.to_s,"\n" file.close else file=File.open(o_file,'w') for i in 1...366 # ドットが3つのときは366を含まない範囲 file.puts rec_arr[i] end file.print hiduke," ", t_min.to_s," ",t_max.to_s,"\n" file.close end |
#!/bin/bash /usr/bin/ruby /home/karappi/public_html/ondo/maxmin.rb /usr/bin/gnuplot < /home/karappi/public_html/ondo/maxmin.bat |
set output
'/home/karappi/public_html/ondo/maxmin.png' set terminal png set datafile separator ' ' set xdata time set timefmt '%Y/%m/%d' set format x '%m/%d' set xlabel 'month/day' set ylabel 'degree C' set title 'max & min temperature' p '/home/karappi/public_html/ondo/maxmin.log' u 1:3 w lp,'/home/karappi/public_html/ondo/maxmin.log' u 1:2 w lp |
#温度計測 00 * * * * /home/karappi/public_html/ondo/ondo.sh 20 * * * * /home/karappi/public_html/ondo/ondo.sh 40 * * * * /home/karappi/public_html/ondo/ondo.sh 50 23 * * * /home/karappi/public_html/ondo/maxmin.sh |