Настройка и использование шины 1-wire на Raspberry Pi 3B+ с сервером owserver.

Некоторое время назад я подключил около 20 1-wire датчиков (DS18B20) для контроля системы отопления к GPIO Raspberry Pi 3B+. Получение и обработку данных с шины настроил на локальном сервере Home Assistant. Но время идет, появляются новые идеи и желания.

Передо мной появилось две новые задачи:

  1. Произвести подключение второй физической шины 1-wire.
  2. Обеспечить передачу данных получаемых с датчиков по сети TCP/IP.

Подключение двух физических шин 1-wire к GPIO Raspberry Pi 3B+

В интернете достаточно много информации о том как подключить 1-wire датчик (DS18B20) к GPIO Raspberry Pi 3B+. Но как использовать 2 GPIO не очень очевидно.

Настройки производились на устройстве с OS: Raspbian 9.9 stretch, Kernel: armv7l Linux 4.19.50-v7+

Добавим необходимые выводы в конфигурацию

sudo vi /boot/config.txt 

В конце файла добавляю (для подключения использую GPIO4 и GPIO21)

# 1-wire
dtoverlay=w1-gpio
dtparam=gpiopin=21
    dtoverlay=w1-gpio
dtparam=gpiopin=4

При подключении шины к Raspberry Pi необходимо наличие сопротивления между проводом питания с сигнала, обычно 4.7 кОм (у меня стабильно работает с 1,5 кОм при длине шины около 20 метров).

Перегружаем устройство и проверяем

ls -l /sys/bus/w1/devices/
итого 0
lrwxrwxrwx 1 root root 0 июн 22 12:04 28-020b91775c4a -> ../../../devices/w1_bus_master1/28-020b91775c4a
lrwxrwxrwx 1 root root 0 июн 22 12:04 28-02109177739c -> ../../../devices/w1_bus_master2/28-02109177739c

Попробуем считать показания

cat /sys/bus/w1/devices/28-020b91775c4a/w1_slave

При успешном запросе получим вывод

a3 01 55 05 7f ff 81 66 66 : crc=66 YES
a3 01 55 05 7f ff 81 66 66 t=26187

Передаем данные с датчиков по сети TCP/IP

Для обеспечения решения этой задачи используем owserver - сервер 1-wire.

Установим необходимые пакеты

sudo apt install owfs ow-shell

Произведем изменение стандартного конфигурационного файла

sudo vi /etc/owfs.conf

Закоментируем тестовое устройство

#server: FAKE = DS18S20,DS2405

В конце файла добавим

server: w1
server: port = 192.168.0.2:4304

Здесь 192.168.0.2 - ip адрес Raspberry Pi (указывайте свой)

Перезапускаем сервис

sudo systemctl restart owserver.service 

Проверим работу

owdir -s 192.168.0.2:4304

При успешном запросе получим вывод

/28.4A5C77910B02
/28.9C7377911002
/bus.2
/bus.1
/bus.0
/uncached
/settings
/system
/statistics
/structure
/simultaneous
/alarm

Пробуем считать показания

owread -s 192.168.0.2:4304 /28.4A5C77910B02/temperature
27.3125

Если в конфигурационном файле /etc/owfs.conf оставить настройки портов http и ftp, то доступ к данным можно получить через соответствующие клиентские приложения.

Опубликовано: