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コードから読み出してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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側及びホスト側で動かすプログラムの説明を行っていきます
最近のコメント