DS18B20
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