Contents
結果
一分ごとに日時と室温をcsvにpushして、matplotlibでグラフ化する

環境
- RaspberryPi 3B+ (Raspbian)
- 温度センサモジュール(LM75B)
- 配線はブレッドボード
- 制御はPython3
以前アナログ温度センサーを買ったのですが、ラズパイではアナログ入力は対応しておらず、今回i2c対応の温度センサーを調達しました。
i2c有効化
設定を開いて、Interfacing optionのI2Cを有効化
raspi-config
i2c-toolsをインストール
sudo apt-get install -y i2c-tools
配線
温度センサ(LM75B)とピンヘッダをはんだ付けして、ブレッドボードにぶっ刺す。

接続は
VCC – PIN1(3.3V)
SDA – PIN3(SDA)
SCL – PIN5(SCL)
GND – PIN9(GND)
大体こんなかんじ。繋がればよし。

認識されたか確認する
i2cdetect -y 1
48に認識されたデバイスがあるはず。これが温度センサーです。認識されてなかったら設定やはんだの接触をチェックしてみてください。
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
プログラム
temp_input.py
1分ごとにtemp_data.csvに日時と温度を書き込みます。sleep60秒なので厳密には1分ごとではない(60秒+ループ一周の実行時間)です。Ctrl+zで終了できます。
import csv
import datetime as dt
import smbus
import time
while True:
now = dt.datetime.now()
now_date = "{0:%Y-%m-%d}".format(now)
now_time = "{0:%H:%M}".format(now)
# 取得
i2c = smbus.SMBus(1)
block = i2c.read_i2c_block_data(0x48, 0x00, 2)
# 入力をもとに温度計算
val = (block[0] << 8) | block[1]
if(val >= 0x7fff):
val = val - 0xffff
now_temp = ((val >> 5) * 0.125)
# CSV書き込み
f = open("./temp_data.csv", "a")
temp_write = csv.writer(f, lineterminator = "\n")
temp_write.writerow([now_date, now_time, now_temp])
f.close()
time.sleep(60)
temp_plot.py
実行するたびにtemp_data.csvからデータを取得し、最大で過去120分の温度推移をプロットしてくれます。
# -*- coding: utf-8 -*-
import csv
import matplotlib.pyplot as plt
f = open("temp_data.csv", "r")
temp_data = csv.reader(f)
temp_x = list(range(-119, 1, 1))
temp_y = []
for row in temp_data:
temp_y.append(float(row[2]))
temp_y = temp_y[-120:]
temp_x = temp_x[-len(temp_y):]
plt.title("Room temperature")
plt.xlabel("ago(minutes)")
plt.ylabel("temperature(C)")
plt.plot(temp_x, temp_y)
plt.show()
temp_data.csv
溜まっていく温度データ
2019-03-27,19:42,27.25
2019-03-27,19:43,27.125
2019-03-27,19:44,27.25
2019-03-27,19:45,27.125
2019-03-27,19:46,27.0
2019-03-27,19:47,27.0
2019-03-27,19:48,27.0
2019-03-27,19:49,27.0
2019-03-27,19:50,26.875
The present writer kazz.