DS18B20

From Tinker Board Wiki
Jump to navigation Jump to search

DS18B20 one wire sensor

Preparation

Image version : Please use V2.0.3 image version or above

See 1-wire

W1_THERM Driver

2.1 Support Sensors

-- DS18S20  (10)
-- DS1822   (22)
-- DS18B20  (28)
-- DS1825   (3B)
-- DS28EA00 (42)
  • The number(10, 22, 28, 3B, 42) is defined in kernel/drivers/w1/w1_family.h

2.2 Build w1_therm driver, Add CONFIG_W1_SLAVE_THERM=y (kernel/arch/arm/configs/miniarm-rk3288_defconfig)

CONFIG_W1_SLAVE_THERM=y

Driver Source Code: kernel/drivers/w1/slaves/w1_therm.c
Result:
Generate /sys/bus/w1/devices/10-############ when w1-gpio pin is wiring to DS18S20 sensor
Generate /sys/bus/w1/devices/22-############ when w1-gpio pin is wiring to DS1822 sensor
Generate /sys/bus/w1/devices/28-############ when w1-gpio pin is wiring to DS18B20 sensor
Generate /sys/bus/w1/devices/3B-############ when w1-gpio pin is wiring to DS1825 sensor
Generate /sys/bus/w1/devices/42-############ when w1-gpio pin is wiring to DS28EA00 sensor

Testing DS18B20

Method 1

$ cat /sys/bus/w1/devices/28-############/w1_slave
8e 01 01 01 7f ff 0c 10 dc : crc=dc YES
8e 01 01 01 7f ff 0c 10 dc t=24875

Method 2

#-*- coding: utf-8
import glob
import time

base_dir = '/sys/bus/w1/devices/'
while True:
    try:
        device_folder = glob.glob(base_dir + '28*')[0]
        break
    except IndexError:
        time.sleep(0.5)
        continue
device_file = device_folder + '/w1_slave'

def TemperaturMessung():
    f = open(device_file, 'r')
    lines = f.readlines()
    f.close()
    return lines
    
TemperaturMessung()

def TemperaturAuswertung():
    lines = TemperaturMessung()
    while lines[0].strip()[-3:] != 'YES':
        time.sleep(0.2)
        lines = TemperaturMessung()
    equals_pos = lines[1].find('t=')
    if equals_pos != -1:
        temp_string = lines[1][equals_pos+2:]
        temp_c = float(temp_string) / 1000.0
        return temp_c

while True:
    print "Temperature:", TemperaturAuswertung(), "°C"
    time.sleep(1)

Result

Temperature: 24.312 °C
Temperature: 24.375 °C