Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
izmerjaem_temperaturu_i_vlazhnost_s_pomoschju_dht11_dht22 [2014/10/13 18:23]
ansealk [Google Docs]
izmerjaem_temperaturu_i_vlazhnost_s_pomoschju_dht11_dht22 [2014/10/13 18:24] (текущий)
Строка 1: Строка 1:
 +====== Измеряем температуру и влажность с помощью DHT11/DHT22 ======
  
 +**Задача:​** измерить температуру и влажность с помощью Raspberry Pi и датчиков DHT11 или DHT22.
 +**Инструментарий.** Нам понадобится:​
 +  * Raspberry Pi
 +  * Уже установленный Raspbian
 +  * Датчик DHT11 или DHT22. Также можно использовать DHT21 (AM2301).
 +
 +===== Что выбрать - DHT11 или DHT22? =====
 +Разница между ними в точности измерения и диапазоне температур и влажности. Также замечу,​ что потребление тока у DHT21 заменто выше. Использовать его имеет смысл в жестких условиях(например на улице). Например на улице.
 +
 +{{:​raspberrypi:​dht-11-12-300x130.jpg?​nolink|}}
 +
 +^              ^ DHT11        ^ DHT22                           ^ DHT21                            ^                          ​
 +^Влажность ​    | 20-90% +-5%  | 0-100% +-5%                     | 0-100% +-3%                      |
 +^Температура ​  | 0-60 °С +-2% | -40-125 °С +-0.5% ​              | -40-80 °С °С +-0.5% ​             |
 +^Формат данных | Целые ​       | Плавающий,​ 1 знак после запятой ​                                  ||
 +^Вес, г        | 1            | 2.2                             | 11                               |
 +^Потребляемый ток, мА | 0.1   | 0.1                             | 1.36                             |
 +
 +//​Обратите внимание://​ Расположение ножек у датчиков не аналогичное - на DHT11 сигнал идет по крайнему левому контакту,​ а на DHT22 - по среденму.
 +
 +===== Подключение =====
 +
 +{{:​raspberrypi:​dht11:​connect-to-raspberry.jpg?​nolink|}}
 +
 +Тут все просто:​ подключаем **+(красный,​ VCC )** от датчика к +5V на Raspberry Pi, **-(черный,​GND)** к земле, и **S(желтый,​ DATA OUT)** к одному из GPIO выводов(например,​ к 4). Все.
 +
 +===== Устанавливаем необходимое программное обеспечение =====
 +
 +==== Установка библиотек ====
 +Оба датчика используют свой протокол вместо стандартизированного 1wire, поэтому программное обеспечение для снятия показаний датчика тоже будет отличаться. Установим библиотеку на С для работы с GPIO www.open.com.au/​mikem/​bcm2835/​index.html. ​
 +<code bash>
 +wget http://​www.open.com.au/​mikem/​bcm2835/​bcm2835-1.15.tar.gz # или wget http://​www.ansealk.ru/​files/​bcm2835-1.15.tar.gz
 +tar xzf bcm2835-1.15.tar.gz
 +cd bcm2835-1.15/​
 +./​configure ​
 +make 
 +make install ​
 +</​code>​
 +
 +==== Сборка и использование из консоли ====
 +
 +  - Загружаем исходиный код программы на С++  по [[http://​homes-smart.ru/​upload/​raspberry/​dht.c|этой]] или [[http://​www.ansealk.ru/​files/​dht.c|этой]] ссылке.
 +  - Cобираем ее командой <code bash>gcc dht.c -lbcm2835 -lrt -o DHT</​code>​ В результате сборки в текущем каталоге появится исполняемый файл DHT
 +  - Чтобы получить данные с датчика выполним <code bash>​sudo ./DHT <​имя_датчика>​ <​порт_GPIO></​code> ​ ,​например <code bash>​sudo ./DHT 11 4</​code>​ значит,​ что используется датчик DHT11 на GPIO номер 4.
 +
 +===== Что можно сделать с полученными данными =====
 +Да что угодно)
 +
 +==== Zabbix ====
 +Например,​ настроить zabbix-agent на считывание этих датчиков раз в некоторое количество времени. Для этого добавим в /​etc/​zabbix/​zabbix-agentd.conf в конец файла следующие строки:​
 +<file bash>
 +UserParameter=probe.Humidity,​echo $((`sudo /​opt/​probes/​DHT 11 4|grep "​^Data"​|awk -F ':'​ '​{print $2}'​|awk -F ' ' '​{print $1}'​`))
 +UserParameter=probe.Temperature,​echo $((`sudo /​opt/​probes/​DHT 11 4|grep "​^Data"​|awk -F ':'​ '​{print $2}'​|awk -F ' ' '​{print $3}'​`))
 +</​file>​
 +
 +==== Google Docs ====
 +А можно и сохранять данные в таблицу Google docs)
 +  - Подготовим Google docs. Создадим новую таблицу и дадим ей имя. Дадим имена колонкам первой datetime, второй temperature,​ третей humidity. Из адресной строки скопируем id нашей таблицы,​ по нему будет производиться обращение к таблице.
 +  - Устанавливаем php: <code bash>​sudo apt-get php5 php5-curl unzip </​code>​
 +  - Создаем папку для нашего проекта:​ <code bash>​mkdir /​home/​pi/​dht </​code>​
 +  - Загружаем и распаковываем Zend Framework:<​code bash>
 +mkdir /​home/​pi/​dht/​library
 +cd /​home/​pi/​dht/​library ​
 +wget http://​packages.zendframework.com/​releases/​ZendFramework-1.12.0/​ZendFramework-1.12.0-minimal.zip
 +unzip ZendFramework-1.12.0-minimal.zip
 +ln -s ZendFramework-1.12.0-minimal/​library/​Zend Zend </​code>​
 +  - Создаем файл <file php DHTtoGoogleDocs.php>​
 +<?php
 +
 +ini_set("​include_path",​get_include_path().':/​home/​pi/​dht/​library'​);​
 +
 +require_once '​Zend/​Loader.php';​
 +Zend_Loader::​loadClass('​Zend_Gdata_Spreadsheets'​);​
 +Zend_Loader::​loadClass('​Zend_Gdata_ClientLogin'​);​
 +
 +define('​GDATA_USER','​googleusername'​);​
 +define('​GDATA_PASSWORD','​google user password'​);​
 +define('​GDATA_SPREADSHEET_KEY','​spreadsheetkey from url');
 +define('​GDATA_WORKSHEET_ID','​od6'​);​
 +
 +try {
 +
 +  $t = new Temperature_DHT();​
 +  // get data from sensor
 +  $data = $t->​getData(11,​4);​
 +
 +  $service = Zend_Gdata_Spreadsheets::​AUTH_SERVICE_NAME;​
 +  $client = Zend_Gdata_ClientLogin::​getHttpClient(GDATA_USER,​ GDATA_PASSWORD,​ $service);
 +  $service = new Zend_Gdata_Spreadsheets($client);​
 +
 +  // add row to spreadsheet
 +  $row = array(
 +          '​datetime'​=>​date("​Y-m-d H:​i:​s"​),​
 +          '​temperature'​=>​$data[0],​
 +          '​humidity'​=>​$data[1],​
 +  );
 +  $service->​insertRow($row,​ GDATA_SPREADSHEET_KEY,​ GDATA_WORKSHEET_ID);​
 +
 +} catch (Exception $e) {
 +  die( $e->​getMessage() );
 +}
 +
 +
 +
 +class Temperature_DHT
 +
 +{
 +       ​private $_maxFailCount=5;​
 +
 +       ​public function getData($type,​ $pin)
 +       {
 +
 +               ​$count = 0;
 +
 +               while ($count<​=$this->​_maxFailCount)
 +               {
 +                       ​$count++;​
 +                       ​$filename = '/​opt/​probes/​DHT';​
 +
 +                       $out = exec   ​("​sudo $filename $type $pin"​);​
 +                       ​if(preg_match("'​^Temp = ([0-9\.]+) \*C, Hum = ([0-9\.]+) %'",​ $out,​$result))
 +                       {
 +
 +
 +                               ​return array($result[1],​$result[2]);​
 +                       }
 +
 +               }
 +
 +       }
 +}</​file>​
 +  - Запускаем <code bash>php DHTtoGoogleDocs.php</​code>​ Не забываем добавить этот вызов в cron
izmerjaem_temperaturu_i_vlazhnost_s_pomoschju_dht11_dht22.txt · Последние изменения: 2014/10/13 18:24 (внешнее изменение)
GNU Free Documentation License 1.3
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0 Яндекс.Метрика