完全に個人的な備忘録

完全に個人的な備忘録。学習コストが高くなってきたので、メモしておかないと…片っ端から忘却の彼方なのです。

Raspberry Pi で温度センサ(DS18B20+)を読んでみた

デジタル温度センサ(1-wire) DS18B20+ をRaspberry Piに接続してみた。DS18B20+ は以下で購入した。

デジタル温度センサ(1wire)DS18B20+: センサ一般 秋月電子通商 電子部品 ネット通販

とりあえず、ブレッドボードでテスト。

f:id:tarancho:20140202190117j:plain

写真はgpio4にDQを接続しているが、実は最初はgpio17に接続していた。

pi@raspberrypi ~ $ ls /sys/bus/
amba         cpu           hid  iscsi_flashnode  platform  sdio  usb
clocksource  event_source  i2c  mmc              scsi      spi   workqueue

1-wireモジュールをロードした。

sudo modprobe wire
sudo modprobe w1-gpio
sudo modprobe w1-therm

また、起動時に読み込ませる為に /etc/modules に

# 1-wire
w1-gpio
w1-therm

を追記した。

再度、/sys/bus を確認。

pi@raspberrypi ~ $ ls /sys/bus/
amba         cpu           hid  iscsi_flashnode  platform  sdio  usb  workqueue
clocksource  event_source  i2c  mmc              scsi      spi   w1

w1というディレクトリが存在している事が確認できた。

接続デバイス数を確認。

$ cat /sys/bus/w1/devices/w1_bus_master1/w1_master_slave_count
0

デバイスを認識していないようだ。

1-wire hard coded to GPIO4 · Issue #368 · raspberrypi/linux · GitHub

上記の内容から推測するに、1-wireDQはgpio4に固定されているっぽい。

gpio4に接続しなおし。

$ cat /sys/bus/w1/devices/w1_bus_master1/w1_master_slave_count
1

今度は認識された。再度、devices 直下を確認。

$ ls /sys/bus/w1/devices
28-000003dab4d7  w1_bus_master1

28-000003dab4d7 というidのデバイスが認識されているようだ。
デバイスのレジスタを確認。

$ cat /sys/bus/w1/devices/28-000003dab4d7/w1_slave
1d 01 4b 46 7f ff 03 10 c5 : crc=c5 YES
1d 01 4b 46 7f ff 03 10 c5 t=17812

上記の内容は以下のデータシートのメモリマップに詳しく記載している。

http://akizukidenshi.com/download/ds/maxim/DS18B20.pdf

以下に抜粋する。

f:id:tarancho:20140202191004p:plain

上記から温度を表現しているのは、先頭2バイトである事が解る。先頭がLSBなので温度の値としては、0x011d となる。
温度のレジスタフォーマットから、最下位ビットが2^{-4}なので、

0x011d * 2^-4 = 285 * 0.0625 = 17.812

となる。t=17812は温度を1000倍している値なので、同じ値が算出された事から、計算は正しいと推測する。

f:id:tarancho:20140202191402p:plain

今度はセンサーを二つ接続してみた。デバイス用のディレクトリが増えている事が確認できる。

pi@raspberrypi ~ $ ls /sys/bus/w1/devices/
28-000003da98f0  28-000003dab4d7  w1_bus_master1

デバイス数も2になっている。

pi@raspberrypi ~ $ cat /sys/bus/w1/devices/w1_bus_master1/w1_master_slave_count
2

メモリの値を確認。

pi@raspberrypi ~ $ cat /sys/bus/w1/devices/28-000003da98f0/w1_slave
21 01 4b 46 7f ff 0f 10 4b : crc=4b YES
21 01 4b 46 7f ff 0f 10 4b t=18062

pi@raspberrypi ~ $ cat /sys/bus/w1/devices/28-000003dab4d7/w1_slave
17 01 4b 46 7f ff 09 10 8e : crc=8e YES
17 01 4b 46 7f ff 09 10 8e t=17437

微妙に値が違うようだけど、まー、こんなもんでしょう。

ところで、この1-WireのTO-92タイプのセンサーが、TRSフォンミニプラグにピッタリ嵌ります。
f:id:tarancho:20140410234725j:plain
これって凄い発見じゃなかろうか…
1-Wireの利点も活かせるような気がするんだけど…