Пятница, 22.11.2024
Завод горного оборудования
Меню сайта
Google_Translate
Категории раздела
Мои статьи [125]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Рейтинг@Mail.ru

Яндекс.Метрика
Главная » Статьи » Мои статьи

Монитор атмосферного давления и температуры на Raspberry Pi 3

Атмосферное давление и температуру в квартире измеряет датчик BMP180, датчик DS18B20 измеряет температуру наружного воздуха, еще один датчик DS18B20 (в металлическом корпусе) измеряет температуру батареи отопления. У меня нет возможности разместить датчик в метеобудке, поэтому датчик закреплен на стене дома на расстоянии около 5 см от нее. Защищен от проникновения дождя, снега и ветра, но нагревается солнцем в солнечную погоду. Из-за чего показывает температуру приблизительно на 10 градусов больше. Ночью и в пасмурную погоду, я считаю, показания правильные. Если у вас угловая квартира, то закрепите датчик на стороне дома, которая большую часть дня находится в тени. Лучше всего разместить его на теневой стороне дома. Тогда показания будут близки к реальной температуре воздуха. Датчик к батарее отопления крепится с помощью металлической мочалки в виде сетки. Она применяется для чистки металлической посуды. Тепловой контакт достаточно надежный.

На момент написания статьи на Raspberry Pi 3 использовалась Raspbian версии Linux raspberrypi 4.9.24-v7+ #993 SMP Wed Apr 26 18:01:23 BST 2017 armv7l GNU/Linux. Как уже писал в анонсе к статье, в интернете есть сообщения о том, что разработчик WebIOPi перешел на другую работу и забросил проект. Ранее в проекте для построения графиков параметров использовались скрипты с использованием WebIOPi. В Raspbian, начиная, кажется, с версии ядра 4.9 (kernel 4.9) скрипты на Python'е, использующие библиотеку webiopi, перестали работать. Прекратилась запись показаний датчиков в текстовые файлы. На замену пришлось скомбинировать свой скрипт, используя разные источники. Он не использует библиотеку webiopi, поэтому может работать независимо от WebIOPi. WebIOPi в данном проекте используется только для вывода текущих показаний датчиков (devices monitor) и как web-сервер.

Предупреждение. Не используйте Raspbian Stretch, на ней WebIOPi вообще не запускается. Найдите в Сети предыдущую версию. Все описанное относится к версии Raspbian Jessie.

Скачать Raspbian Jessie версия от 2016-05-27 архив ZIP 1.4 Gb

Raspbian Jessie и Stretch сейчас уже старые дистрибутивы, но вы их можете скачать по ссылке downloads.raspberrypi.org/raspbian/images/. Историю версий можно посмотреть по ссылке https://en.wikipedia.org/wiki/Raspberry_Pi_OS. При использовании старых дистрибутивов можно давать команду sudo apt update для обновления списка пакетов, но не давайте команду sudo apt upgrade для обновления пакетов - это может нарушить работу системы.

Схема соединений
подключение BMP180 и DS18B20 к Raspberry Pi 3

Датчики DS18B20 могут питаться напряжением 3,0 - 5,5 Вольт. Подключите датчики к шине 5 Вольт, это повысит надежность измерений высоких и низких температур. Сопротивление резистора 4,7 - 10 кОм. Соедините датчики проводами достаточного сечения. Чем меньше сопротивление линии, тем надежнее работа датчиков. Контакт 7 разъема GPIO (GPIO 4 по нумерации BCM) предназначен для подключения шины 1-Wire.
Если BMP180 имеет 4 контакта, то контакт VIN подключите к шине +3.3V. Если 5 контактов, то контакт 3V3 подключите к шине +3.3V, контакт VIN оставьте свободным. Защитите BMP180 от попадания прямых солнечных лучей.

Как подключить BMP180, можно посмотреть в статье WebIOPi-0.7.1 и Raspberry Pi 3 - подключение датчика давления BMP180.
После сборки схемы сделайте доступными интерфейсы для работы датчиков. В терминале вводим команду sudo raspi-config и затем идем Interfacing Options. По очереди выбираем I2C, 1-Wire и SSH. На вопросы Would you like the ... interface to be enabled? выбираем ответ Да (Yes).

Перезагрузите микрокомпьютер - sudo reboot.
Установите библиотеку для работы с BMP180 командами

wget http://osoyoo.com/driver/Adafruit_Python_BMP.zip
unzip Adafruit_Python_BMP.zip

cd Adafruit_Python_BMP
sudo python setup.py install

Проверьте работу датчика:
cd examples
sudo python simpletest.py

Скрипт должен вывести температуру, давление и высоту над уровнем моря.

Удобно подключаться к Raspberry Pi по ssh. Тогда можно будет отключить монитор, клавиатуру, мышь и подключаться по локальной сети, используя Wi-Fi. Как настроить ssh, описано в статье Как подключиться к Raspberry Pi из Windows по SSH. Я подключаюсь по ssh с компьютера Linux Mint.
Теперь займитесь датчиками DS18B20. Подключите модули командами

sudo modprobe w1-gpio
sudo modprobe w1-therm

Добавьте строку dtoverlay=w1-gpio в файл /boot/config.txt командой sudo nano /boot/config.txt, если ее там нет:

Перезагрузите - sudo reboot.
Проверьте датчики. Дайте команды

ls /sys/bus/w1/devices
Вы должны увидеть каталоги с именами идентификаторов датчиков. Перейдите в каталог датчика:
cd /sys/bus/w1/devices/<ID_датчика>
Распечатайте файл w1_slave
cat w1_slave
В конце второй строки вы должны увидеть что-то наподобие t=28750. Если это так, значит датчик DS18B20 работает.

Установите фреймворк WebIOPi. Скачайте WebIOPi-0.7.1, например, с ресурса sourceforge.net/projects/webiopi/files/WebIOPi-0.7.1.tar.gz/download.
Далее подразумевается, что скачанный архив находится в домашнем каталоге /home/pi.
Распакуйте архив командой
tar xvzf WebIOPi-0.7.1.tar.gz
Перейдите в каталог WebIOPi-0.7.1
cd WebIOPi-0.7.1
Для Raspbian с ядром 4.9 (kernel 4.9) или новее скачайте патч:
wget https://github.com/doublebind/raspi/blob/master/webiopi-pi2bplus.patch
Пропатчите исходники командой
patch -p1 -i webiopi-pi2bplus.patch
Запустите установку WebIOPi-0.7.1 командой
sudo ./setup.sh

Переустановка WebIOPi-0.7.1

Если потом по каким-либо причинам потребуется переустановить WebIOPi-0.7.1, то сделать это можно следующим образом.
Остановите сервис командой
sudo /etc/init.d/webiopi stop
Удалите каталог:
sudo rm -r -f WebIOPi-0.7.1
Снова распакуйте архив
tar xvzf WebIOPi-0.7.1.tar.gz
Пропатчите исходники нужным патчем и запустите установку командой:
sudo ./setup.sh
Проверьте или настройте заново файл /etc/webiopi/config.

После установки WebIOPi-0.7.1 надо отредактировать конфигуратор WebIOPi командой sudo nano /etc/webiopi/config. В секции [DEVICES] раскомментируйте или пропишите подключенные датчики. Естественно, идентификаторы датчиков вбейте свои.

В секции [HTTP] укажите место расположения проекта. Я расположил его в домашнем каталоге в папке examples. Можно разместить за пределами домашнего каталога, но тогда, скорей всего, при редактировании файлов и запуске программ придется использовать права суперпользователя, т.е. перед командой указывать sudo. Секцию [SCRIPTS] оставьте без изменений, т.е. закомментированной.

После редактирования перезапустите WebIOPi командой sudo /etc/init.d/webiopi restart.
Обычно автозапуск WebIOPi делают командой sudo update-rc.d webiopi defaults, но я не рекомендую вам делать так. В Raspberry Pi 3 часто приходилось делать рестарт WebIOPi и даже перезагружать систему. Лучше запуск WebIOPi прописать в /etc/rc.local. Тогда фреймворк надежно запускается после полной загрузки операционной системы.

Пропишите запуск WebIOPi, как показано на скриншоте, командой sudo nano /etc/rc.local и перезагрузите систему. В браузере на компьютере локальной сети введите IP адрес Raspberry Pi, порт 8000 и путь к devices-monitor, например 192.168.1.41:8000/app/devices-monitor. IP адрес можно посмотреть командой hostname -I. После ввода логина - webiopi и пароля - raspberry вы должны увидеть примерно следующее: 

Возможна такая ошибка — ваш браузер вместо открытия страницы начинает поиск по этому адресу и выводит кучу сообщений о невозможности найти такой текст. Значит вам надо изменить настройки браузера. В настройках браузера отмените поиск по адресной строке. В Mozilla Firefox в разделе Поиск снимите галку "Использовать адресную строку для поиска и навигации". Теперь браузер должен открывать адрес, а не начинать поиск.
У меня для справки добавлено несколько строк. Вы можете сделать тоже самое, отредактировав index.html командой sudo nano /usr/share/webiopi/htdocs/app/devices-monitor/index.html

Вставьте пояснительные строки после заголовка <h1 ...> до тега <div ...>.
Символы <------> — это символы табуляции так отображаются в редакторе mcedit. Не обращайте на них внимания. В других редакторах табуляция отображается пробелами.
Кроме просмотра текущих показаний проект выводит на монитор графики атмосферного давления и температуры. Скрипт на Python'е с определенным интервалом (60 секунд) записывает показания датчиков в текстовые файлы данных. Интервал можете изменить по своему усмотрению в последней строчке скрипта. Библиотека dygraph-combined-dev.js на основании этих данных строит графики давления и температуры.
Скрипт temp_press.py не использует библиотеку webiopi, работает независимо. Запуск его также прописал в /etc/rc.local. Скрипт можно разместить в любом месте, но для удобства расположил его в папке /home/pi/examples/python. Главное - прописать в rc.local правильный путь для его запуска, например, так:

nohup /home/pi/examples/python/temp_press.py &

Первая часть скрипта (DS18B20) взята из книги Simon Monk [2], часть для BMP180 из скрипта Tony DiCola (simpletest.py), запись данных и графики параметров - ресурс electromost.com [3],[4]. Не забудьте в скрипте заменить идентификатор датчика на свой (подчеркнут). Я прописал датчик, который измеряет температуру наружного воздуха.
Строка pressure = pressure*0.75/100 - перевод Па в мм рт. столба.
Чтобы посмотреть графики, нужно в браузере ввести, например, 192.168.1.28:8000. После ввода логина и пароля загрузится файл /home/pi/examples/html/index.html:

Щелкнув мышкой по одной из картинок, вы загрузите из этой папки либо temp.html, либо press.html и, соответственно, будет построен график температуры или давления.

В интернете полно сервисов по мониторингу датчиков, но они могут быть временами недоступны или вообще прекратить работу. Например, тот же Weaved, который предлагается при установке WebIOPi. Гораздо надежнее предусмотреть мониторинг в собственном проекте, тогда вы ни от чего не будете зависеть.

Файлы данных даны для примера, удалите их и создайте свои, добавив в них по одной строчке Date,Temperature или Date,Pressure. Со временем в файлах накапливается много данных, построение графиков замедляется, браузер может даже выдать ошибку, поэтому устаревшие данные нужно удалять. Удобно это делать в редакторе mcedit - встроенном редакторе Midnight Commander (mc). Установите менеджер mc командой sudo apt install mc, перейдите в папку с данными и дайте команду, например, mcedit data_press.txt. Чтобы посмотреть последнюю строчку данных (для проверки работы скрипта), нажмите Ctrl+End. Если курсор находится в середине файла, то нажмите Ctrl+Home для перехода к началу файла. Поставьте курсор на первую строку данных, нажмите F3 и стрелку вниз. Строка будет выделена. Для ускорения процесса нажимайте Page Down. Дойдя до нужной даты, нажмите F8 (Удалить помеченный блок). Редактор выдаст сообщение о том, что блок слишком велик и восстановить его  не удастся. Нажмите Продолжить. Блок будет удален. Для сохранения файла нажмите F2 и затем еще раз Сохранить. Редактор может выдать предупреждение - файл используется внешней программой, записать поверх? Нажмите Да. Для выхода из редактора нажмите два раза Esc.

Иногда в файлы данных может записаться сбойное значение - очень большое или очень маленькое, это исказит вид графика. Как удалить сбой, описано в конце статьи WebIOPi-0.7.1 и Raspberry Pi 3 - подключение датчика давления BMP180.
Если можно выделить диапазон значений, выход за пределы которого можно рассматривать как сбой, тогда можно использовать условный оператор.
Например, такой:

if (humidity <= 100.0) :
        f = open('/home/pi/examples/html/data_humi.txt', 'a')
        data_entry = "{0},{1}\n".format(strftime("%Y-%m-%d %H:%M:%S"),"%.3f" % humidity)
        f.write(data_entry)
        f.close()
else:
        f = open('/home/pi/examples/html/dht_err.txt', 'a')
        data_entry = "{0},{1}\n".format(strftime("%Y-%m-%d %H:%M:%S"),"%.3f" % humidity)
        f.write(data_entry)
        f.close()

Если значение влажности меньше или равно 100 процентам, то оно записывается в файл данных data_humi.txt. Если значение больше 100, то оно записывается в файл ошибок dht_err.txt. В файл данных data_humi.txt будут записаны только корректные значения и график не будет искажаться.
Можно использовать укороченный оператор, отбросив вторую половину, начинающуюся со слова else. Тогда ошибочные значения влажности будут игнорироваться. 

Скачать файлы проекта

И последний, максимальный вариант проекта. Он, кроме текущих значений, выводит графики 4 параметров: температуры наружного воздуха, атмосферного давления, температуры и влажности в квартире.

Скрипт на Python'е пишет показания датчиков в 4 текстовых файла: data_18B20.txt, data_DHT.txt, data_humi.txt и data_press.txt. Как подключить и проверить датчик DHT22, читайте в статье Монитор температуры и влажности на DHT11 / DHT22 и WebIOPi в Raspberry Pi . Проект работает уже нескольких месяцев. Используйте корпус с вентилятором для охлаждения Raspberry Pi 3.

Скачать файлы макси проекта

На данный момент у вас есть доступ к монитору по локальной сети. Для доступа из интернета надо присвоить Raspberry Pi статический адрес, настроить в роутере проброс порта (port forwarding) и зарегистрировать домен на каком-нибудь бесплатном динамическом DNS сервисе. Как это сделать на примере роутера DIR-300, описано здесь. Подробно описано в статье Как получить доступ по интернету к датчикам в квартире.

Статья обновлена 18.02.2022 г.

Использованные ресурсы
1. https://iarduino.ru/lib/datasheet%20bmp180.pdf
2. Simon Monk Raspberry Pi Cookbook O’Reilly Media release 2014 p. 319
3. http://lock.3dn.ru/news/raspberry_pi_dlja_domashnej_avtomatizacii_shina_1_wire/2015-09-12-134
4. http://lock.3dn.ru/news/raspberry_pi_dlja_domashnej_avtomatizacii_grafiki_parametrov/2015-09-18-136
5. https://cdn-learn.adafruit.com/downloads/pdf/adafruits-raspberry-pi-lesson-11-ds18b20-temperature-sensing.pdf
6. https://www.raspberrypi.org/documentation/configuration/raspi-config.md

Категория: Мои статьи | Добавил: zgo (17.06.2017)
Просмотров: 5370 | Комментарии: 189 | Теги: temperature, graph, Raspberry, монитор, график, DS18B20, monitor, давление, BMP180, pressure | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Поиск
Друзья сайта
  • Создать сайт
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Все проекты компании
  • Сайт завода zgo.ucoz.ru
  • Забайкальский край
    Дарасун
    Яндекс.Погода


    Хостинг Ucoz опять навязал видеорекламу, но обещает - "мы настроили систему так, чтобы в сутки на уникального посетителя приходилось не более двух показов."
    Совет, как не смотреть видеорекламу.

    Или используйте Uran - браузер от Ucoz без рекламы Скачать

    или подключите к браузеру блокировщик рекламы, например, Adblock Plus или uBlock Origin

    Универсальный декодер кириллицы



    Защита, контроль, управление.



    DONATE (поддержи автора)
    Все статьи авторские, при использовании прошу ссылаться на сайт
    Copyright Дарасунский завод горного оборудования © 2004 - 2024
    Бесплатный конструктор сайтов - uCoz