сайт для палких паяльників

Подключение цифрового датчика температуры DS18B20 к Raspberry Pi выполняется по следующей схеме:

DS18B20S

DS18B20 – это цифровой датчик температуры, который работает по однопроводному интерфейсу 1-Wire. Он измеряет температуру в пределах -10 .. + 85 градусов по шкале Цельсия. Как видно из схемы для его использования нам потребуется сам датчик DS18B20 и резистор 4,7 кОм. Вы можете подключить несколько датчиков как указано на следующей схеме:

DS18B20Scircuit2

Если использовать провода, длиннее трех метров, могут возникнуть проблемы со считыванием. В этом случае рекомендуется использовать экранированные провода.

После подключения датчика выполняем следующие команды:

sudo modprobe w1-gpio && sudo modprobe w1_therm
ls -l /sys/bus/w1/devices/

Должны увидеть что-то похожее на следующее:

total 0
total 0
lrwxrwxrwx 1 root root 0 Nov 29 10:49 28-000000d7970b -> ../../../devices/w1_bus_master1/28-000000d7970b
lrwxrwxrwx 1 root root 0 Nov 29 10:49 w1_bus_master1 -> ../../../devices/w1_bus_master1

Если подобного результата нет, а датчик подключен правильно, редактируем файл /boot/config.txt:


sudo nano /boot/config.txt

добавляем строку

dtoverlay=w1-gpio

сохраняем файл и перезагружаем Raspberry командой reboot.

Каждый датчик имеет уникальный номер. Находим ID датчика. В моем случае 28-000000d7970b.

Далее выполняем команду (Вы должны заменить значение 28-000000d7970b на ID своего датчика):

cat /sys/bus/w1/devices/28-000000d7970b/w1_slave

Видим информацию, которую выдает датчик:

7c 01 4b 46 7f ff 04 10 09 : crc=09 YES
7c 01 4b 46 7f ff 04 10 09 t=23750

Среди этой информации есть следующий фрагмент: t = 23750. Это температура по шкале Цельсия, умноженная на 1000. То есть, температура 23750/1000 = 23,750 oC. Не надо обманываться относительно трех знаков после запятой. Абсолютная точность датчика всего 0,5 oC.

Программно получить значение температуры можно следующим образом:

Bash:

cat /sys/bus/w1/devices/28-000000d7970b/w1_slave | sed -n 's/^.*\(t=[^ ]*\).*/\1/p' | sed 's/t=//' | awk '{x=$1}END{print(x/1000)}'

Python:

tfile=open("/sys/bus/w1/devices/28-000000d7970b/w1_slave")
ttext=tfile.read()
tfile.close()
temp=ttext.split("\n")[1].split(" ")[9]
temperature=float(temp[2:])/1000
print temperature

Успехов.

DS18B20 DS18B20

Смотри также:
Translate
Архіви

© 2011-2017 Андрій Корягін, Кременчук - Київ, Україна