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

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

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

Скрипт на bash для записи показаний DHT22 в текстовые файлы

Программа на C считывает показания температуры и влажности с датчика DHT22. Скрипт на bash запускает с определенным интервалом скомпилированную C-программу. Показания температуры и влажности с метками даты и времени пишутся в текстовые файлы. Интервал считывания показаний задается при запуске скрипта. Потом на основании полученных данных можно построить графики температуры и влажности, используя библиотеку dygraph-combined-dev.js.

Схему подключения датчика можно посмотреть в статье Монитор температуры и влажности на DHT11 / DHT22 и WebIOPi в Raspberry Pi.

За основу взят скрипт из [1], с. 58-59. Программа на C из [1] не пошла - выдавала нули, поэтому использовал программу с ресурса https://forum.odroid.com/viewtopic.php?p=94697#, она использует библиотеку wiringPi. Установите wiringPi командами

sudo apt install git-core
git clone git://git.drogon.net/wiringPi
cd wiringPi/
./build

Проверьте версию
gpio -v
Посмотрите нумерацию контактов GPIO
gpio readall

Для компиляции требуется программа locking.c, взята с ресурса https://github.com/technion/lol_dht22.
Скомпилируйте dht22 командой
gcc -o dht22 dht22.c locking.c -lwiringPi -pthread
Можно не компилировать, а использовать готовую программу из каталога скачанного архива. Главное - задать правильный параметр при запуске. Находясь в каталоге с программой, проверьте ее работу командой

./dht22 1

Вы должны увидеть значения влажности и температуры. Параметр 1 - это контакт GPIO1 в нумерации wiringPi, к которому подключен DHT22. Физически это контакт 12 на разъеме GPIO Raspberry Pi 3.

Сам скрипт sensor1.sh состоит из двух функций - монитора датчика и записи лога в текстовые файлы. Добавлены вывод даты и времени и запись лога показаний в текстовые файлы dht22_temp.txt, dht22_humi.txt.

Файл sensor1.sh

#!/bin/bash
# Description : A simple bash script to monitor or log the temp sensors

SLEEP=$2
# Укажите полный путь к файлам LOG1 и LOG2
# Пример: LOG1="/home/pi/zgo/html/dht22_humi.txt"
LOG1="dht22_humi.txt"
LOG2="dht22_temp.txt"

function dht22_mon {
#  echo Polling DHT22 every $SLEEP seconds.
    for (( ; ; ))
    do
#      echo Temperature and humidity is:
      mdate="$(date +%Y-%m-%d\ %H:%M:%S)"
      echo -n $mdate,
      ./dht22 1 | awk '{print $2,$5}'
      sleep $SLEEP
    done
}

function dht22_log {
#  echo Logging DHT22 to file every $SLEEP seconds. >> $LOG
    for (( ; ; ))
    do
#      echo Temperature and humidity is: >> $LOG
      mdate="$(date +%Y-%m-%d\ %H:%M:%S)"
      echo -n $mdate, >> $LOG1
      ./dht22 1 | awk '{print $2}' >> $LOG1
      echo -n $mdate, >> $LOG2
      ./dht22 1 | awk '{print $5}' >> $LOG2
      sleep $SLEEP
    done
}

case $1 in

  dht22_mon)
    dht22_mon
  ;;

  dht22_log)
    dht22_log
  ;;

  *)
    echo ------------------------------------------------------------------
    echo
    echo  DHT22 tool syntax.
    echo  The tool has two modes, monitor and log.
    echo  Monitor will print to screen and log will log to a file.
    echo ------------------------------------------------------------------
    echo   -- Monitor Mode --
    echo
    echo  To poll the DHT22 every 5 seconds the syntax would be:
    echo  "./sensor.sh dht22_mon 5"
    echo ------------------------------------------------------------------
    echo   -- Log Mode --
    echo  Log mode accepts two variables the name of the sensor, polling time.
    echo
    echo  To log the DHT22 every 5 seconds the syntax would be:
    echo  "./sensor.sh dht22_log 5 &"
    echo ------------------------------------------------------------------
  ;;
esac
 
# END

Скачать файлы

Распакуйте скачанный архив в отдельную директорию в домашнем каталоге. Перейдите в этот каталог и запустите скрипт командой
./sensor1.sh dht22_mon 5
Если скрипт не запускается, дайте скрипту права на выполнение командой chmod +x sensor1.sh.
После запуска скрипта вы должны увидеть примерно следующее:

Первое число - влажность в процентах, второе - температура в градусах Цельсия. Проверьте запись лога командой
nohup ./sensor1.sh dht22_log 5 &
Скрипт запустится в фоновом режиме. Для остановки скрипта введите kill [идентификатор_процесса].
Для записи ваших показаний надо удалить из текстовых файлов dht22_temp.txt, dht22_humi.txt старые данные. Это удобно делать в редакторе mcedit - встроенном редакторе Midnight Commander (mc). Установите менеджер mc командой sudo apt install mc, перейдите в папку с данными и дайте команду, например, mcedit dht22_temp.txt. Чтобы посмотреть последнюю строчку данных (для проверки работы скрипта), нажмите Ctrl+End. Если файл большой и курсор находится в середине файла, то нажмите Ctrl+Home для перехода к началу файла. Поставьте курсор на первую строку данных, нажмите F3 и стрелку вниз. Строка будет выделена. Для ускорения процесса нажимайте Page Down. Дойдя до нужной даты, нажмите F8 (Удалить помеченный блок). Редактор выдаст сообщение о том, что блок слишком велик и восстановить его  не удастся. Нажмите Продолжить. Блок будет удален. Для сохранения файла нажмите F2 и затем еще раз Сохранить. Редактор может выдать предупреждение - файл используется внешней программой, записать поверх? Нажмите Да. Для выхода из редактора нажмите два раза Esc.

Для построения графика можно использовать готовую библиотеку dygraph-combined-dev.js [7].
Для проверки скрипта использовал Raspberry Pi с уже установленным веб-сервером Apache. Для построения графика воспользовался материалами с ресурса [7]. Файлы скопируйте в папку /var/www/html.
Измените права на папку командами
sudo chown -R pi:pi /var/www/html
sudo chmod -R 755 /var/www/html

Файлы temp.html и dht22_temp.txt

На компьютере локальной сети в адресной строке браузера введите IP адрес Raspberry Pi и имя файла - temp.html или humi.html. Например, так:
192.168.1.28/temp.html

Если у вас есть доступ к Raspberry Pi через Samba, вы можете сразу открыть, например, temp.html или humi.html

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

Использованные источники и ресурсы.
1. Brendan Horan, Practical Raspberry Pi, Apress 2013 p.54-60
2. https://forum.odroid.com/viewtopic.php?p=94697#
3. http://wiringpi.com/download-and-install/
4. http://htmlbook.ru/html/div
5. https://losst.ru/komanda-echo-v-linux
6. http://wiki.ayac.ru/skripty/bash-dobavlenie-daty-v-vyvod-komandy
7. http://electromost.com/news/raspberry_pi_dlja_domashnej_avtomatizacii_grafiki_parametrov/2015-09-18-136
8. http://www.opennet.ru/docs/RUS/linux_base/node44.html
9. https://ru.wikipedia.org/wiki/Nohup

Категория: Мои статьи | Добавил: zgo (27.07.2017)
Просмотров: 1731 | Комментарии: 13 | Теги: temperature, bash, DHT22, показания, readings, график, data, влажность, текстовый, температура | Рейтинг: 0.0/0
Всего комментариев: 131 2 »
13 Herbertvab  
0
789

12 Herbertvab  
0
789

11 Herbertvab  
0
789

10 Herbertvab  
0
789

9 Herbertvab  
0
789

8 Herbertvab  
0
789

7 Herbertvab  
0
789

6 Herbertvab  
0
789

5 Herbertvab  
0
789

4 Herbertvab  
0
789

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


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

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

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

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



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



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