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

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

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

Монитор температуры и влажности на DHT11 / DHT22 и WebIOPi в Raspberry Pi

Предупреждение. Не используйте Raspbian Stretch, на ней WebIOPi вообще не запускается. Найдите в Сети предыдущую версию. Все описанное относится к версии Raspbian Jessie.
При использовании старых дистрибутивов при работе в терминале можно давать команду sudo apt-get update, но ни в коем случае не вводите команду sudo apt-get upgrade. Это может нарушить работу уже установленных программ.
Скачать 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 для обновления пакетов - это может нарушить работу системы.

За основу взят проект https://github.com/swkim01/webiopi-dht . Перевод оригинала в статье DHT11, DHT22 в Raspberry Pi и WebIOPi . Из проекта удалены схема со светодиодом, управление режимами работы. Оставлена только индикация температуры и влажности в браузере и добавлены графики температуры и влажности.

На моем Pi 3 установлен Raspbian - jessie версия от 2016-05-27.
Я скачал исходный код WebIOPi с http://sourceforge.net/. В терминале выполните следующие команды:

wget http://sourceforge.net/projects/webiopi/files/WebIOPi-0.7.1.tar.gz
tar xvzf WebIOPi-0.7.1.tar.gz

Установите модуль Adafruit Python DHT командами:

sudo apt-get install build-essential python-dev
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo python setup.py install

Соберите электрическую схему:

После сборки схемы вы можете проверить датчик командами:

cd Adafruit_Python_DHT
sudo python examples/AdafruitDHT.py 22 18

Если у вас датчик DHT11, то вместо 22 поставьте 11, 18 - номер контакта GPIO, т.е. GPIO18 (используется BCM нумерация).


Склонируйте  репозиторий на Pi.

cd
git clone https://github.com/swkim01/webiopi-dht.git

В домашнем каталоге создастся папка webiopi-dht.
Если вы используете Raspberry Pi1 Модель B, тогда пропатчите исходники следующим образом.

cd /home/pi/webiopi-dht
patch -p1 < /home/pi/webiopi-dht/webiopi-0.7.1-rpi1-py2.7-dht.diff

Если вы используете Raspberry Pi2 или Pi3, тогда пропатчите исходники таким образом:

cd /home/pi/webiopi-dht
patch -p1 < /home/pi/webiopi-dht/webiopi-0.7.1-rpi2-py2.7-dht.diff

Запустите установку WebIOPi командами:

cd /home/pi/WebIOPi-0.7.1/
sudo ./setup.sh

В конце инсталляции выдается запрос на установку Weaved. Я отказался от установки, нажав n.
Если вы используете версию raspbian jessie, вы должны скопировать файл webiopi.service командой:

cd /home/pi/webiopi-dht
sudo cp webiopi.service /lib/systemd/system

Для старта WebIOPi при включении системы обычно рекомендуют дать команду sudo update-rc.d webiopi defaults, но тогда на Raspberry Pi3 WebIOPi запускается ненадежно. Часто после этого приходится перезагружать систему. Для надежного запуска лучше прописать команду запуска WebIOPi в rc.local. Для этого запустите редактор nano командой

sudo nano /etc/rc.local

и в файл /etc/rc.local добавьте команду

sudo /etc/init.d/webiopi start

перед строкой exit 0.

Чтобы включить DHT в WebIOPi, отредактируйте файл /etc/webiopi/config.

sudo nano /etc/webiopi/config

...
[DEVICES]
...
dht0 = DHT22 pin:18

После перезагрузки WebIOPi вы можете видеть значения температуры/влажности на странице 'device-monitor' WebIOPi.

sudo /etc/init.d/webiopi restart

В браузере введите примерно следующее

192.168.1.29:8000/app/devices-monitor

т.е. IP адрес Raspberry Pi, номер порта (8000) и путь к devices-monitor

Программа запрашивает логин - webiopi и пароль - raspberry.
Фреймворк WebIOPi - программа привередливая, при малейшей ошибке в файле /etc/webiopi/config она не запускается, в браузере выдается страница с сообщением "Нет доступа, в соединении отказано". Исправьте ошибку в файле config и перезапустите сервис командой sudo /etc/init.d/webiopi restart
После этого фреймворк WebIOPi должен заработать.

ПО проекта состоит из трех HTML-файлов и файла скрипта Python. HTML-код содержит веб-контент для отслеживания и вывода на экран температуры и влажности, а также для построения графиков температуры и влажности. Код скрипта обеспечивает считывание значений температуры и влажности и запись их в файлы данных data_DHT.txt и data_humi.txt соответственно. Снятие показаний повторяется в соответствии с заданными вами интервалами времени.

Отредактируйте файл /etc/webiopi/config в соответствии с расположением HTML-файлов и файла скрипта Python.

...
[SCRIPTS]
myproject = /home/pi/webiopi-dht/examples/python/script.py
...
[HTTP]
...
doc-root = /home/pi/webiopi-dht/examples/html
...

В Python'e важны отступы в начале строки. Строго соблюдайте величину отступов в начале каждой строки кода.
Показания датчиков записываются в файлы данных каждую минуту (60 сек) - строка webiopi.sleep(60).

Файл script.py:

import webiopi
import datetime
import time

from time import strftime


def loop():
    dht = webiopi.deviceInstance("dht0")
    celsius = dht.getCelsius() # get current temperature
    humi = dht.getHumidityPercent()
    f = open('/home/pi/webiopi-dht/examples/html/data_DHT.txt', 'a')
    data_entry = "{0},{1}\n".format(strftime("%Y-%m-%d %H:%M:%S"),"%.1f" % celsius)
    f.write(data_entry)
    f.close()
    f = open('/home/pi/webiopi-dht/examples/html/data_humi.txt', 'a')
    data_entry = "{0},{1}\n".format(strftime("%Y-%m-%d %H:%M:%S"),"%.1f" % humi)
    f.write(data_entry)
    f.close()
    webiopi.sleep(60)

Файл index.html

Файл temp.html

Файл humi.html

Файлы данных data_DHT.txt и data_humi.txt

Для построения графиков используется готовая библиотека dygraph. Библиотеку  dygraph-combined-dev.js можно скачать с сайта dygraphs.com или взять из каталога файлов вместе с другими файлами проекта.

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

Разархивируйте скачанный архив и скопируйте папки html  и python в каталог /home/pi/webiopi-dht/examples. Это надо сделать как пользователь pi, т.е. не использовать команду sudo. Иначе при работе  могут возникнуть проблемы с правами доступа. У меня, например, каталоги html и python имеют права 755, их владелец pi и группа pi. Сами файлы в папках имеют права 644, владелец и группа pi. Можете для гарантии дать права 777.

Перезагрузите WebIOPi и откройте веб-браузер на другом компьютере в вашей локальной сети.
sudo /etc/init.d/webiopi restart
В браузере введите примерно так:
192.168.1.29:8000
Возможна такая ошибка — ваш браузер вместо открытия страницы начинает поиск по этому адресу и выводит кучу сообщений о невозможности найти такой текст. Значит вам надо изменить настройки браузера. В настройках браузера отмените поиск по адресной строке. В Mozilla Firefox в разделе Поиск снимите галку "Использовать адресную строку для поиска и навигации". Теперь браузер должен открывать адрес, а не начинать поиск.
Ждите! Показания датчика считываются с периодичностью в 7 секунд (строка setInterval(updateUI, 7000);) в файле index.html, интервал указан в миллисекундах.

Щелкните по ссылке График температуры. Через пару секунд на экране появится график температуры.

Аналогично по щелчку График влажности должен построиться график влажности.

Очистите файлы данных data_DHT.txt, data_humi.txt от информации, оставив только первые строчки в начале файлов. Теперь в них будет писаться ваша информация.

И напоследок. По техусловиям на датчики DHT11/22 показания могут считываться не чаще, чем один раз в две секунды. В этом проекте показания для браузера считываются через 7 секунд, а для записи в файлы данных через 60 секунд. Старайтесь не делать длительности этих интервалов кратными друг другу. Например, если первый интервал 5 секунд, а второй -60 секунд, то через 12 считываний по первому интервалу моменты обращений к датчику могут совпасть, что приведет к сбою в показаниях. Это проявляется в записях данных по влажности. В файле data_humi.txt появляется запись влажности около 3000%. На графике это проявляется в виде пика, на фоне которого обычная влажность смотрится почти прямой линией. Это легко исправить. Просто найдите и удалите эту запись из файла и график снова вернется к нормальному виду. При указанных значениях сбоев в течение месяца не наблюдалось.
Графики масштабируемы, можно левой кнопкой мыши выделить нужный период и он предстанет в более подробном виде. Подведя курсор мыши к линии графика, можно увидеть показания датчика в этой точке. 

Если вам мало одного датчика температуры, то можно подключить еще несколько датчиков DS18B20 по шине 1-wire. Для шины 1-wire в Raspberry Pi2 / Pi3 используется вход GPIO4 (BCM нумерация). Это контакт 7 на 40-контактном разъеме GPIO. Я подключил один датчик для измерения температуры наружного воздуха, второй прилепил к батарее отопления.  Для батареи отопления надо использовать датчик в металлическом корпусе и обеспечить хороший тепловой контакт. Способ крепления датчика см. в статье Монитор атмосферного давления и температуры на Raspberry Pi 3.



Схема подключения датчиков DS18B20

Инициализируйте датчики командами

sudo modprobe w1-gpio
sudo modprobe w1-therm
sudo nano /boot/config.txt

и добавьте строку в конец файла, если ее там нет 
dtoverlay=w1-gpio
перезагрузите систему
sudo reboot

Проверьте каталоги датчиков командой
ls -l /sys/bus/w1/devices
в выводе команды должны отобразиться два каталога наподобие 28-0416508db4ff, 28-041654f0dcff

Осталось прописать датчики в файле config фреймворка WebIOPi в секции DEVICES командой
nano /etc/webiopi/config
вставьте строки temp0, temp1
temp0 = DS18B20 slave:28-0416508db4ff
temp1 = DS18B20 slave:28-041654f0dcff

идентификаторы датчиков укажите, естественно, свои. Снова перезапустите WebIOPi командой
sudo /etc/init.d/webiopi restart

Для мониторинга использовал devices-monitor фреймворка WebIOPi. В браузере в адресной строке введите, например:
192.168.1.28:8000/app/devices-monitor

Показания обновляются каждые 5 секунд.
Если вы будете использовать devices-monitor, то становится излишним вывод на экран показаний температуры и влажности в файле index.html. Можно удалить этот блок кода и оставить только ссылки на построение графиков. Это уменьшит вероятность конфликтов при считывании показаний датчиков. Вместо обычной ссылки можно использовать картинку, при щелчке по которой на экран будет выводиться график.

Закиньте в ту же папку, что и index.html подходящие картинки размером примерно 200 на 200 пикселей. Отредактируйте файл index.html, например, так:

Если график строится очень долго, значит файл данных слишком большой. Удалите часть устаревших данных, можно также увеличить интервал считывания показаний датчиков.
Для удобства пользования devices-monitor можно добавить несколько строк справки в файл index.html, расположенный по пути /usr/share/webiopi/htdocs/app/devices-monitor. Перейдите в этот каталог и дайте команду sudo mcedit index.html или sudo nano index.html. Вставьте строки после <h1>Devices Monitor</h1> до строки <div id="content">, каждую строку закончите тегом <br>.

После редактирования файла не забудьте перезапустить WebIOPi командой sudo /etc/init.d/webiopi restart.

P.S. Не обновляйте без острой нужды пакеты и систему. Ранее у меня подобный монитор исправно работал на WebIOPi, но в один прекрасный день после обновления системы и пакетов  монитор сломался. Devices Monitor выводил показания датчиков, а графики параметров перестали строиться. Скрипты на Python'е для записи показаний в файлы данных отказались работать. По слухам в интернете, разработчик WebIOPi сменил работу и забросил проект. В Raspbian, начиная, кажется, с версии ядра 4.9 (kernel 4.9) скрипты на Python'е, использующие библиотеку webiopi, не работают и показания датчиков не записываются в текстовые файлы. Если после обновления системы WebIOPi запускается, а запись показаний в файлы не идет, то попробуйте другой вариант - скрипт без webiopi:

script2.py
script без webiopi

Для удобства скопируйте script2.py в ту же папку, что и script.py. В файле /etc/webiopi/config в секции [SCRIPTS] закомментируйте все строки. Запуск script2.py пропишите в rc.local после запуска WebIOPi перед командой exit 0:

sudo /etc/init.d/webiopi start
nohup /home/pi/webiopi-dht/examples/python/script2.py &
exit 0

Дайте скрипту права на выполнение командой
chmod +x /home/pi/webiopi-dht/examples/python/script2.py
и перезагрузите - sudo reboot.
За основу взят скрипт Tony DiCola (simpletest.py) Adafruit Industries 2014, фрагмент записи данных - ресурс electromost.com.

Использованные ресурсы.
https://github.com/swkim01/webiopi-dht
lock.3dn.ru/news/raspberry_pi_dlja_domashnej_avtomatizacii_grafiki_parametrov/2015-09-18-136
https://masterkit.ru/zip/ds18b20-rus.pdf
http://lock.3dn.ru/news/raspberry_pi_dlja_domashnej_avtomatizacii_shina_1_wire/2015-09-12-134
 

Категория: Мои статьи | Добавил: zgo (30.09.2016)
Просмотров: 5337 | Комментарии: 1 | Теги: мониторинг, monitoring, Raspberry, DHT22, влажность, DHT11, температура, WebIOPi, humidity, temperature | Рейтинг: 0.0/0
Всего комментариев: 1
1 Николай  
0
Здравствуйте! У меня необычный вопрос не могу найти ответ.
На компьютере веб страничка запускается нормально, но когда я захожу со смартфона веб страница зависает.
С уважением Николай.

Имя *:
Email *:
Код *:
Поиск
Друзья сайта
  • Создать сайт
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Все проекты компании
  • Сайт завода zgo.ucoz.ru
  • Забайкальский край
    Дарасун
    Яндекс.Погода


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

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

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

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



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



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