Подключение датчиков DS18B20 к Raspberry по 1-wire через GPIO

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

Ответить
ksv
Сообщения: 102
Зарегистрирован: Вт июл 17, 2018 10:19 am
Благодарил (а): 23 раза
Поблагодарили: 4 раза

Подключение датчиков DS18B20 к Raspberry по 1-wire через GPIO

Сообщение ksv » Вт июл 17, 2018 11:04 am

Добрый день всем. Я новичок в МД, ещё мало что понимаю, сильно не пинайте.
Пытаюсь подключить датчики температуры к малинке, есть проблема мне совсем непонятная.
Опишу всё, что сделал.

Установил готовый образ с МД отсюда https://connect.smartliving.ru/tasks/20.html (Версия для Raspberry 3 Model B).
Включил интерфейс 1-wire через sudo raspi-config.
Датчики (их у меня 3 шт) подключил к GPIO4 с подтяжкой к 5В.
В /sys/bus/w1/devices все три датчика появились.
В маркете дополнений МД установил пакет для 1-wire.
Установил пакет owfs, отредактировал owfs.conf, сейчас его содержимое такое (ни разу не уверен, что правильное):

! server: server = localhost:4304
server: FAKE = DS18S20,DS2405

server: w1
server: port 8234

mountpoint = /mnt/1wire
allow_other

http: port = 2121

ftp: port = 2120

server: port = localhost:4304

По порту 2121 owserver отображает список датчиков, там два фейковых DS18S20 и DS2405 как и указано в конфиге (нахрена они нужны, кстати?) и три моих, данные с них также отображаются верно:
Снимок1.PNG
Отредактироал /var/www/html/config.php, раскомментил строку Define('ONEWIRE_SERVER', 'tcp://localhost:8234');
Перезапустил малинку.

Теперь проблема.
В панели управления МД в устройствах 1-wire произвожу сканирование, и страница выдаёт ошибку:

Fatal error: Uncaught Error: Call to undefined function bccomp() in /var/www/html/modules/onewire/ownet.php:516 Stack trace: #0 /var/www/html/modules/onewire/onewire.class.php(576): OWNet->get('/28.FF407565150...', 2, false) #1 /var/www/html/modules/onewire/onewire.class.php(362): onewire->updateDevice('3') #2 /var/www/html/modules/onewire/onewire.class.php(155): onewire->scanDevices() #3 /var/www/html/modules/onewire/onewire.class.php(116): onewire->admin(Array) #4 /var/www/html/lib/jTemplate.class.php(711) : eval()'d code(8): onewire->run() #5 /var/www/html/lib/jTemplate.class.php(711): eval() #6 /var/www/html/lib/jTemplate.class.php(195): jTemplate->parseModules('<!DOCTYPE html>...', Array, './templates/') #7 /var/www/html/lib/jTemplate.class.php(109): jTemplate->parse('<!DOCTYPE html>...', Array, './templates/') #8 /var/www/html/lib/parser.class.php(93): jTemplate->__construct('./templates/pan...', Array, Object(panel)) #9 /var/www/html/lib/parser.class.php(63): parser->jtemplate_parse('./templates/pan...', Array) #10 in /var/www/html/modules/onewire/ownet.php on line 516

После повторного входа на страницу устройств вижу там три датчика, но не три моих, а один мой и два фейковых:
Снимок.PNG
При этом автообновление данных с датчиков не работает, хотя настроил 5 сек, висят какие-то данные разово полученные при сканировании и всё.

Отключаю два моих датчика, в owserver они пропадают, всё соответствует, а в МД как и прежде - один мой и два фейковых, и скаинрование выдаёт ошибку. Отключаю всё свои датчики, в owserver остались только фейковые, а при сканировании в МД по-прежнему один мой и два фейковых, но ошибку уже не выдаёт.

Датчики проверенные, на Ардуине работали без проблем. Также проверен GPIO4, 1-wire рабочий, читал данные с этих трех датчиков без участия МД (да и сейчас в /sys/bus/w1/devices они все три есть и данные с них верные). Датчики на столе, то есть никаких длинных линий.

Всё, дальше я не понимаю куда копать, подскажите, пожалуйста.
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Подключение датчиков DS18B20 к Raspberry по 1-wire через GPIO

Сообщение sergejey » Вт июл 17, 2018 12:02 pm

Не находит функцию bccomp -- это часть пакета bcmath, который видимо в базовый образ не добавлен. Поищите как установить недостающий пакет через ssh-консоль.
Возможно что-то вроде sudo apt-get install php-bcmath
За это сообщение автора sergejey поблагодарил:
ksv (Ср июл 18, 2018 4:59 pm)
Рейтинг: 1.16%

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
ksv
Сообщения: 102
Зарегистрирован: Вт июл 17, 2018 10:19 am
Благодарил (а): 23 раза
Поблагодарили: 4 раза

Re: Подключение датчиков DS18B20 к Raspberry по 1-wire через GPIO

Сообщение ksv » Вт июл 17, 2018 2:40 pm

Ура! Всё заработало! Вот прям сразу! Поставил именно этой командой недостающий пакет! Все датчики увиделись, обновление идёт, в интефейс выводится! Отлично, спасибо! Значит, всё я верно сделал, но до этой тонкости я никак не смог бы додуматься, это уж точно. Ещё раз спасибо!
ksv
Сообщения: 102
Зарегистрирован: Вт июл 17, 2018 10:19 am
Благодарил (а): 23 раза
Поблагодарили: 4 раза

Re: Подключение датчиков DS18B20 к Raspberry по 1-wire через GPIO

Сообщение ksv » Ср июл 18, 2018 4:59 pm

Ещё один вопрос по этим датчикам.
Не могу увеличить частоту обновления данных выше, чем примерно 20 сек. MajoDoMo тут ни при чём, в настройках 1w-устройства установил частоту обновления 5 сек. Но owserver не выдаёт данных чаще, чем раз в 20 сек примерно. И ещё странно, что в свойствах каждого датчика в owserver отображаются все варианты точности значений температуры, от 9 до 12 бит. Насколько я понимаю, получить все значения можно только путём последовательного перепрограммирования соответствующего регистра датчика. Неужели owserver так и делает? Посмотрел осциллографом на шине - действительно, цикл обмена 17-18 сек. А нельзя ли его как-то ускорить?
viktor6
Сообщения: 273
Зарегистрирован: Вс авг 20, 2017 1:46 am
Благодарил (а): 142 раза
Поблагодарили: 13 раз

Re: Подключение датчиков DS18B20 к Raspberry по 1-wire через GPIO

Сообщение viktor6 » Пн сен 24, 2018 3:20 pm

А как сделать вывод температуры из датчика DS18B20 и как прикрутить графики?
Raspberry Pi3, с образа от Сергея 3.34
Ответить