Raspberry Pi で温度センサ(DS18B20+)を読んでみた
デジタル温度センサ(1-wire) DS18B20+ をRaspberry Piに接続してみた。DS18B20+ は以下で購入した。
デジタル温度センサ(1wire)DS18B20+: センサ一般 秋月電子通商 電子部品 ネット通販
とりあえず、ブレッドボードでテスト。
写真は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-wireのDQは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
以下に抜粋する。
上記から温度を表現しているのは、先頭2バイトである事が解る。先頭がLSBなので温度の値としては、0x011d となる。
温度のレジスタフォーマットから、最下位ビットがなので、
0x011d * 2^-4 = 285 * 0.0625 = 17.812
となる。t=17812は温度を1000倍している値なので、同じ値が算出された事から、計算は正しいと推測する。
今度はセンサーを二つ接続してみた。デバイス用のディレクトリが増えている事が確認できる。
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フォンミニプラグにピッタリ嵌ります。
これって凄い発見じゃなかろうか…
1-Wireの利点も活かせるような気がするんだけど…