Raspberry Pi Zeroで温度を計測する
Raspberry Pi Zeroで温度ロガーを作成しました
必要なもの
- ホスト … Windows 10 64bit
- ターゲット … Raspberry Pi Zero W
- 温度センサ … DS18B20
- 回路素子
- 4.7kohm … 1つ
- QIコネクタ (なくても可)
DS18B20
DS18B20は以下のような特徴を持った温度センサです。One-Wireインタフェースで少ないピンで複数センサを接続できる点と、防水加工されたものが購入でき、扱いやすそうだったため使用を決定
- データシート
- デジタルインタフェース (One-Wire)
- レンジ … -55度 – +125度
- 解像度 … 0.0625度
- サンプリング … 750ms
ハードウェア接続
DS18B20からはVCC, GND, DATAの3本線が出ています。それぞれRaspberry Pi Zeroのピンヘッダ 1 (3.3V power)
、6 (GND)
、7 (GPIO4 (GPCLK0))
に接続します。またVCCとDATAの間を4.7kΩで接続します (Pinoutリンク)
今回はQIコネクタとブレッドボードを用いて接続しましたが、直付けでも問題ないと思います
Raspberry Pi側の設定
ハードウェアの接続が完了したら、もう一度確認したのちに電源を投入します
One-Wireの有効化
まずはOne-Wireインタフェースを有効化するために/boot/config.txt
を編集します
% vi /boot/config.txt
+dtoverlay=w1-gpio
% sudo reboot
再起動後、モジュールを読み込みます
% sudo modprobe w1–gpio
% sudo modprobe w1-therm
上記実行後、/sys/bus/w1/devices
に2つのファイルが表示されていればOKです
% ls /sys/bus/w1/devices/
28-0301a279ee43 w1_bus_master1
28-0301a279ee43
のファイル名はそれぞれの環境で異なると思います。最初の28
はDS18B20の識別子なので共通で、後ろの0301a279ee43
はそれぞれのデバイス毎に割り当てられた固有IDです。これにより、複数のDS18B20をOne-Wireに接続した場合でも、個別のセンサを識別することが可能となります
28-*
以下にあるw1_slave
を表示することで、現在の計測温度を読み出すことができます
% cat /sys/bus/w1/devices/8-0301a279ee43/w1_slave
6f 01 55 05 7f a5 81 66 93 : crc=93 YES
6f 01 55 05 7f a5 81 66 93 t=22937
t=22937
の部分が計測温度で、摂氏22.937度という意味です。試しにセンサ部を手で握ってみると温度が上昇しました
Pythonからの読み出し
次にPythonコードから読み出してみます。
import os
# 必要な場合のみ。root権限が必要
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
with open(os.path.join(self.path, 'w1_slave'), 'r') as f:
lines = f.readlines()
assert len(lines) == 2
m = re.search('t=(\-{0,1}\d+)', lines[1])
assert m
print(f'temp {float(m.group(1)) / 1000} degree')
複数センサの接続
次に複数のセンサを接続してみます。上記データシートの図にあるように、デバイスを並列に接続することで同一のOne-Wire上に複数デバイスを認識させることができます。
接続した後に/sys/bus/w1/devices/
に複数の28-*
デバイスが認識されていればOKです
% ls /sys/bus/w1/devices/
28-0301a279ef6b 28-0301a279ee43 w1_bus_master1
(おまけ) 冷蔵庫の温度を計測
作成した温度ロガーで試しに家の冷蔵庫の温度を計測してみました (GE製)。2つのセンサを上段の奥と手前に配置して計測した結果が下記です
詳しく知らないんですが、意外にも温度の振れ幅が大きいんですね。奥は扉を開けていない深夜の時間帯で下は1℃から上は7.5℃あたりまで変動しています。
次回投稿では、実際にデータを記録するためにRaspberry Pi側及びホスト側で動かすプログラムの説明を行っていきます
最近のコメント