Предыдущая версия справа и слева
Предыдущая версия
Следующая версия
|
Предыдущая версия
|
temp_mon [2014/02/06 15:04] metallic |
temp_mon [2023/09/20 15:05] (текущий) metallic [Подключение датчиков и дисплея] |
* [[http://amperka.ru/product/temperature-sensor-ds18b20|Температурные датчики DS18B20]] (кол-во на одной шине ограничено 128 штуками, если не ошибаюсь) | * [[http://amperka.ru/product/temperature-sensor-ds18b20|Температурные датчики DS18B20]] (кол-во на одной шине ограничено 128 штуками, если не ошибаюсь) |
* [[http://amperka.ru/collection/display/product/text-lcd-20x4|Текстовый экран 20×4]] (опционально) | * [[http://amperka.ru/collection/display/product/text-lcd-20x4|Текстовый экран 20×4]] (опционально) |
| * [[http://amperka.ru/collection/power-sources/product/usb-power-plug|Импульсный блок питания с USB-разъёмом (5 В, 1000 мА)]] |
* Резистор 4.7кОм | * Резистор 4.7кОм |
* Развернутая система мониторинга [[https://www.zabbix.com|Zabbix]] | * Развернутая система мониторинга [[https://www.zabbix.com|Zabbix]] |
| |
===== Подготовка Raspberry Pi ===== | ===== Подготовка Raspberry Pi ===== |
Для начала нужно установить ОС на флеш-карту, как это сделать подробно описано [[http://forum.cxem.net/index.php?showtopic=114312&#entry1326610|тут]]. После того, как система установлена и загружается нужно ее подготовить для работы. Во-первых, настраивает локальную сеть, дату, время, часовой пояс и т.д. Во-вторых в файл /etc/modules добавляем модули необходимые для работы температурных датчиков и дисплея: | Для начала нужно установить ОС на флеш-карту, для этого используется [[https://downloads.raspberrypi.org/imager/imager_latest.exe|Raspberry Pi Imager]]. |
| После того, как система установлена и загружается нужно ее подготовить для работы. Во-первых, настраивает локальную сеть, дату, время, часовой пояс и т.д. |
| |
i2c-dev | Во-вторых, нужно включить нужные интерфейсы, раньше это делалось добавлением модулей в файл /etc/modules, теперь это можно сделать утилитой raspi-config(встроена в систему) Interfacing Options -> 1-Wire и Interfacing Options -> I2C |
w1-gpio | По сути дела эта утилита просто добавляет нужные параметры в файл /boot/config.txt нужные параметры, например для 1-wire она добавит в конец dtoverlay=w1-gpio, т.е. это можно сделать и вручную. |
w1-therm | |
| |
| |
===== Подключение датчиков и дисплея ===== | ===== Подключение датчиков и дисплея ===== |
Для подключения температурных датчиков нам понадобится трехжильный кабель(или более), отлично подойдет четырехжильная витая пара. У датчика три пина: земля, пин по которому передаются данные и плюс питания: | Для подключения температурных датчиков нам понадобится трехжильный кабель(или более), отлично подойдет четырехжильная витая пара. У датчика три пина: земля, пин по которому передаются данные и плюс питания: |
10375 / 1000 = 10.375 С | 10375 / 1000 = 10.375 С |
| |
| Также с датчиками можно работать с помощью библиотеки w1thermsensor для python, устанавливаем: |
| |
| pip3 install w1thermsensor |
| |
| Пример кода: |
| |
| from w1thermsensor import W1ThermSensor |
| |
| # Все сенсоры |
| for sensor in W1ThermSensor.get_available_sensors(): |
| print(f"Сенсон ID {sensor.id} температура {sensor.get_temperature():.2f}") |
| |
| # Определенный сенсор |
| sensor = W1ThermSensor(sensor_id="0000046022cb") |
| print(f"Температура {sensor.get_temperature():.2f}") |
| |
Если все работает, переходим к подлючению дисплея. Схема подключения пинов дисплея к пинам GPIO показаны ниже(4х битный режим): | Если все работает, переходим к подлючению дисплея. Схема подключения пинов дисплея к пинам GPIO показаны ниже(4х битный режим): |
| |
В результате чего на дисплее появятся показания с трех датчиков(в моем случае). | В результате чего на дисплее появятся показания с трех датчиков(в моем случае). |
| |
<note>По поводу кирилицы: нельзя просто так взять и написать на русском языке, из-за кодировок дисплей выведет полную ерунду. Чтобы выводить русские символы нужно писать их в hex-формате, т.е. например \xFF. Таблицу самих же символов и их коды можно поглядеть в официальной [[http://files.amperka.ru/datasheets/MT-16S2H.pdf|документации]] к дисплею на странице 8 или на рисунке ниже. Если вы хотите смешивать латиницу и кирилицу(как сделал я), то после кода кирилического символа нужно добавить две кавычки "" и дальше любое кол-во латинских букв или цифр</note> | <note>По поводу кирилицы: нельзя просто так взять и написать на русском языке, из-за кодировок дисплей выведет полную ерунду. Чтобы выводить русские символы нужно писать их в hex-формате, т.е. например \xFF. Таблицу самих же символов и их коды можно поглядеть в официальной [[http://files.amperka.ru/datasheets/MT-16S2H.pdf|документации]] к дисплею на странице 8 или на рисунке ниже. Если вы хотите смешивать латиницу и кирилицу(как сделал я), то после кода кирилического символа нужно добавить две кавычки "" и дальше любое кол-во латинских букв или цифр |
| |
{{ :hex_codes_display.png?direct&300 |}} | {{ :hex_codes_display.png?direct&300 |}} |
| </note> |
| |
| |
| |
Если все отработало корректно, то осталось добавить скомпилированную програму для автовыполнения в скрипт /opt/scripts/gen_temp.sh (в конец): | Если все отработало корректно, то осталось добавить скомпилированную програму для автовыполнения в скрипт /opt/scripts/gen_temp.sh (в конец): |
| |
| |
| ===== Zabbix-агент ===== |
| |
| К этому моменту у нас уже показания с датчиков снимаются, на дисплей выводятся, осталось настроить zabbix. Подходящих бинарников для Raspberry Pi нет, поэтому придется собрать из исходников. Качаем [[http://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/2.2.1/zabbix-2.2.1.tar.gz/download|сорцы]], распаковываем, компилируем и устанавливаем: |
| |
| # ./configure --prefix=/usr/local/zabbix_agent --enable-agent |
| # make install |
| # useradd zabbix |
| # mkdir /var/run/zabbix |
| # mkdir /var/log/zabbix |
| # chown zabbix /var/run/zabbix |
| # chown zabbix /var/log/zabbix |
| |
| Если все прошло успешно, редактируем конфигурационный файл /usr/local/zabbix_agent/etc/zabbix_agentd.conf и приводим его к такому виду: |
| |
| PidFile=/var/run/zabbix/zabbix_agentd.pid |
| LogFile=/var/log/zabbix/zabbix_agentd.log |
| LogFileSize=5 |
| DebugLevel=0 |
| Server=address.of.zabbix.server |
| |
| ListenIP=X.X.X.X |
| Hostname=rfarm-raspberrypi |
| |
| ServerActive=address.of.zabbix.server |
| HostnameItem=system.hostname |
| |
| Timeout=10 |
| |
| UserParameter=custom.temp.rfarm.sensor1,/bin/cat /mnt/tmpfs/0000046022cb |
| UserParameter=custom.temp.rfarm.sensor2,/bin/cat /mnt/tmpfs/0000045ef9b4 |
| UserParameter=custom.temp.outside.sensor1,/bin/cat /mnt/tmpfs/0000045f1c62 |
| |
| Тут главное указать адрес вашего zabbix-сервера в параметрах Server и ServerActive, IP-адрес на котором агент будет ждать подключения ListenIP и задать имя агента Hostname. И самое главное - задать параметры пользователя UserParameter с помощью которых агент будет считывать показания. |
| |
| Теперь протестируем наши параметры, что они корректно считываются: |
| |
| # /usr/local/zabbix_agent/sbin/zabbix_agentd -t custom.temp.rfarm.sensor1 |
| custom.temp.rfarm.sensor1 [t|17.812] |
| |
| # /usr/local/zabbix_agent/sbin/zabbix_agentd -t custom.temp.rfarm.sensor2 |
| custom.temp.rfarm.sensor2 [t|11.812] |
| |
| # /usr/local/zabbix_agent/sbin/zabbix_agentd -t custom.temp.outside.sensor1 |
| custom.temp.outside.sensor1 [t|-5.125] |
| |
| Все нормально, осталось добавить агента в автозагрузку, проще всего добавить в /etc/rc.local такую строку: |
| |
| /usr/local/zabbix_agent/sbin/zabbix_agentd -c /usr/local/zabbix_agent/etc/zabbix_agentd.conf |
| |
| |
| ===== Zabbix-сервер ===== |
| |
| Ну и осталось создать хост и прописать для него итемы и графики в веб-интерфейсе. |
| |
| Создаем хост(наш raspberry pi): |
| {{ :create_host1.png?direct&300 |}} |
| |
| |
| По желанию добавляем ему шаблон "zabbix-агент", чтобы отслеживать состояние хоста: |
| {{ :create_host2.png?direct&300 |}} |
| |
| |
| На каждый датчик создаем свой item(элемент, который будет коллекционировать данные), для каждого датчика у нас заранее на стороне zabbix-агента прописаны наши собственные параметры, ниже пример создания итема: |
| {{ :create_item1.png?direct&300 |}} |
| |
| |
| В итоге у меня получилось три итема, по одному на каждый датчик: |
| {{ :items.png?direct&300 |}} |
| |
| |
| И в конце создаем любое кол-во графиков, какое нужно, хоть по отельному на каждый итем, хоть один для всех сразу. На примере ниже создается один график, на котором будут рисоваться показания всех датчиков: |
| {{ :graph.png?direct&300 |}} |
| |
| |
| На этом все. |
| |
| |
| ===== Заключение ===== |
| |
| В итоге получили прибор, который в режиме реального времени выводит информацию по температуре с датчиков на дисплей, а также коллекционируется статистика по температуре и строятся графики с помощью zabbix. Ниже можно поглядеть как это выглядит в жизне. |
| |
| {{:temp_mon1.jpg?direct&300|}} {{:temp_mon2.jpg?direct&300|}} {{:temp_mon3.jpg?direct&300|}} {{:temp_mon4.png?direct&300|}} |
| |
| |
| ===== Список использованной литературы ===== |
| |
| - [[http://files.amperka.ru/datasheets/MT-16S2H.pdf|Даташит на дисплей]] |
| - [[http://shabpoint.blogspot.ru/2013/09/lcd-raspberry-pi.html|Подключение LCD дисплея к Raspberry Pi]] |
| - [[http://wiki.amperka.ru/схемы-подключения:подключение-текстового-экрана|Подключение текстового экрана к Arduino]] |
| - [[http://wiringpi.com/download-and-install/|GPIO Interface library for the Raspberry Pi]] |
| - [[http://www.raspberrypi-spy.co.uk/2013/03/raspberry-pi-1-wire-digital-thermometer-sensor/|Raspberry Pi 1- Wire Digital Thermometer Sensor]] |
| - [[http://habrahabr.ru/post/204478/|Мониторинг температуры гермозоны с помощью 1-wire датчиков и Zabbix 2]] |
| - [[https://www.zabbix.com/wiki/howto/install/ubuntu/ubuntuinstall|Installing Zabbix on Ubuntu from source files]] |
| - [[http://forum.cxem.net/index.php?showtopic=114312&#entry1361054|Faq Raspberry Pi - Миникомпьютер С Linux За 25$/35$]] |