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

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

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

Простой монитор на двух датчиках DS18B20

Для вывода в браузер текущей температуры используется web сервер Bottle, а для просмотра графиков установлен web сервер Lighttpd.

В проекте используются два цифровых датчика температуры DS18B20. Как подключить и проверить датчик, читайте в статье Как подключить DS18B20 и вывести показания на веб-страницу. Второй датчик подключается параллельно первому, т.е. вывод питания к выводу питания, Data к Data, GND к GND. Каждый датчик имеет идентификатор, поэтому скрипт может обращаться к датчику по его идентификатору.

В проекте использовался Raspberry Pi с 512 Mb памяти с системой Raspbian Stretch (образ от 2017-11-29-raspbian-stretch.img). Обновите систему командами
sudo apt update
sudo apt upgrade

Установите веб сервер Lighttpd командой
sudo apt install lighttpd

На другом компьютере локальной сети откройте браузер и в адресной строке введите IP адрес Raspberry Pi. Вы должны увидеть тестовую страницу веб сервера Lighttpd.

Веб сервер Lighttpd на выбор выводит один из двух графиков температур с помощью простейшего сайта из трех веб-страниц. Все файлы, в том числе текстовые файлы данных для построения графиков, находятся в каталоге веб сервера /var/www/html. Скрипт на Python'e temp_2.py регулярно с интервалом две минуты (120 c) пишет показания датчиков в файлы data_a.txt (наружный воздух) и data_k.txt (квартира). Для построения графиков использована библиотека dygraph-combined-dev.js [1]. Скрипт temp_2.py находится в папке examples/python домашнего каталога /home/pi. Запуск скрипта прописан в /etc/rc.local. Он запускается автоматически при загрузке системы и работает постоянно.
Второй скрипт bottle-test2.py похож на первый, он запускает веб сервер Bottle. Bottle по запросу выводит текущие показания датчиков в браузер. Я указал порт 8000, чтобы он не конфликтовал с сервером Lighttpd, который использует по умолчанию порт 80. Для удобства оба скрипта расположены в одной папке /home/pi/examples/python.

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

Чтобы можно было записать данные в каталог веб сервера, измените владельца и права доступа на каталог: 
sudo chown -R pi:pi /var/www/html
sudo chmod -R 777 /var/www/

Распакуйте командой unzip архив с файлами проекта. Содержимое папки html проекта (не саму папку!) скопируйте в каталог /vat/www/html. Удобно это делать в файловом менеджере Midnight Commander (аналог Total Commander в Windows). Установите его командой
sudo apt-get install mc

В домашнем каталоге /home/pi создайте папку examples, а внутри нее каталог python. Из скачанного архива скопируйте в папку python два скрипта temp_2.py и bottle-test2.py. Дайте им права на выполнение командами
sudo chmod +x /home/pi/examples/python/temp_2.py
sudo chmod +x /home/pi/examples/python/bottle-test2.py

Скрипт temp_2.py

#!/usr/bin/python
import glob
import time
from bottle import route, run, template
from datetime import datetime
from time import strftime

base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28-041654f0dcff')[0]
device_folder1 = glob.glob(base_dir + '28-031651a2b9ff')[0]

device_file = device_folder + '/w1_slave'
device_file1 = device_folder1 + '/w1_slave'

def read_temp_raw():
    f = open(device_file, 'r')
    lines = f.readlines()
    f.close()
    return lines

def read_temp_raw1():
    f = open(device_file1, 'r')
    lines = f.readlines()
    f.close()
    return lines

def read_temp():
    lines = read_temp_raw()
    while lines[0].strip()[-3:] != 'YES':
        time.sleep(0.2)
        lines = read_temp_raw()
    equals_pos = lines[1].find('t=')
    if equals_pos != -1:
        temp_string = lines[1][equals_pos+2:]
        temp_c = float(temp_string) / 1000.0
        return temp_c

def read_temp1():
    lines = read_temp_raw1()
    while lines[0].strip()[-3:] != 'YES':
        time.sleep(0.2)
        lines = read_temp_raw()
    equals_pos = lines[1].find('t=')
    if equals_pos != -1:
        temp_string = lines[1][equals_pos+2:]
        temp_c1 = float(temp_string) / 1000.0
        return temp_c1

while True:
#    print("temp C=%f\t" % read_temp())
    t1=read_temp()
    f = open('/var/www/html/data_a.txt', 'a')
    data_entry = "{0},{1}\n".format(strftime("%Y-%m-%d %H:%M:%S"),"%.3f" % t1)
    f.write(data_entry)
    f.close()

    t2=read_temp1()
    f = open('/var/www/html/data_k.txt', 'a')
    data_entry = "{0},{1}\n".format(strftime("%Y-%m-%d %H:%M:%S"),"%.3f" % t2)
    f.write(data_entry)
    f.close()

    time.sleep(120)

Отредактируйте скрипты, заменив IP адрес и идентификаторы датчиков DS18B20 на свои значения. Почти всё готово для запуска проекта. Осталось только добавить строку в файл /etc/rc.local
/home/pi/examples/python/temp_2.py &
перед строкой exit 0.
Настройте правильное время. Запустите sudo raspi-config и пройдите Localisation OptionsChange Timezone. Выберите свою временнУю зону (часовой пояс). Я выбираю Asia ► Yakutsk. Перезагрузите Raspberry Pi. Теперь на другом компьютере локальной сети откройте браузер и в адресной строке введите IP адрес Raspberry Pi.
Если ваш браузер вместо открытия страницы начинает поиск по этому адресу и выводит кучу сообщений о невозможности найти такой текст, значит вам надо изменить настройки браузера. В настройках браузера отмените поиск по адресной строке. В Mozilla Firefox в разделе Поиск снимите галку "Использовать адресную строку для поиска и навигации". Теперь браузер должен открывать адрес, а не начинать поиск. 
Вы увидите следующее:

Щелкните по одной из нижних картинок. Через пару секунд построится график температуры.

Участок графика можно "растянуть" мышкой и он отобразится в подробном виде. Подведя курсор мыши к линии графика, можно увидеть время и показание датчика для этой точки в правом верхнем углу картинки.
Пока что на графики выводятся мои данные, но постепенно файлы данных будут заполняться вашими показаниями и вы сможете удалить мои данные. Как просматривать и удалять ненужные данные, читайте в конце статьи WebIOPi-0.7.1 и Raspberry Pi 3 - подключение датчика давления BMP180. Проверьте запись данных в файлы data_a.txt, data_k.txt. В mc перейдите в каталог /var/www/html, пометьте файл data_a.txt и нажмите F3 (просмотр файла). Перейдите в конец файла (Ctrl+End), должна быть добавлена запись показания датчика на данный момент времени. Через три минуты снова откройте файл, должна быть добавлена еще одна запись. Если это так, значит скрипт temp_2.py работает. Вы можете изменить интервал записи показаний в последней строчке скрипта, у меня указано 120 секунд.

Осталось запустить web сервер Bottle для вывода текущих значений температур датчиков. Bottle запускается из командной строки в фоновом режиме. Для того, чтобы после запуска веб сервера можно было продолжить работу в терминале, применена команда nohup:
nohup /home/pi/examples/python/bottle-test2.py &

Команда nohup выводит сообщение. Нажмите Ctrl+C, чтобы появилось приглашение командной строки. Теперь можно дать любую команду или просто закрыть терминал.
Как можно видеть, я подключаюсь к Raspberry Pi по SSH из Linux Mint.
Для просмотра текущей температуры датчиков на другом компьютере локальной сети откройте браузер и в адресной строке введите IP адрес Raspberry Pi и через двоеточие порт 8000. Вы увидите примерно следующее:

Показания не обновляются автоматически. Для обновления перезагрузите (обновите) веб-страницу.
На данный момент вы можете смотреть показания по локальной сети. Чтобы смотреть показания датчика по интернету, нужно сделать дополнительные настройки. Об этом читайте в статье Как получить доступ по интернету к датчикам в квартире. Если у вас роутер Xiaomi, то в статье описана его настройка именно для данного проекта. В настройках port forwarding  укажите порт 80 и порт 8000. Если планируете подключаться по SSH, то пробросьте еще порт 22.

Использованные ресурсы
1. http://lock.3dn.ru/news/raspberry_pi_dlja_domashnej_avtomatizacii_grafiki_parametrov/2015-09-18-136
2. Simon Monk Raspberry Pi Cookbook O’Reilly Media 2014 p. 319
3. Simon Monk Raspberry Pi Cookbook O’Reilly Media 2nd Edition 2016
    русский перевод Саймон Монк: Raspberry Pi. Сборник рецептов. Решение программных и аппаратных задач Диалектика, 2017
4. Монитор атмосферного давления и температуры на Raspberry Pi 3

Категория: Мои статьи | Добавил: zgo (02.02.2018)
Просмотров: 2046 | Комментарии: 7 | Теги: monitor, монитор, lighttpd, temperature, график, температура, датчик, Bottle, graph, DS18B20 | Рейтинг: 0.0/0
Всего комментариев: 2
2 MashaMiz  
0
хай всем
хочу познакомится с серьезным мужчиной сат знакомств http://officialls.ru/photo

1 taxi-vovrema.info  
0
цена такси из люберец в домодедово

http://taxi-vovrema.info/page/tsena-taksi-iz-lyuberets-v-domodedovo/
.

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


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

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

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

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



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



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