Настройка и использование шины 1-wire на Raspberry Pi 3B+ с сервером owserver.
Некоторое время назад я подключил около 20 1-wire датчиков (DS18B20) для контроля системы отопления к GPIO Raspberry Pi 3B+. Получение и обработку данных с шины настроил на локальном сервере Home Assistant. Но время идет, появляются новые идеи и желания.
Передо мной появилось две новые задачи:
- Произвести подключение второй физической шины 1-wire.
- Обеспечить передачу данных получаемых с датчиков по сети 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, то доступ к данным можно получить через соответствующие клиентские приложения.