Вывод показаний DHT22 на LCD1602 Arduino Uno

maksilo
Offline
Зарегистрирован: 19.02.2017

Добрый вечер всем!

Помогите новичку разобраться со скетчем, по отдельности разобрался как выводить данные на LCD 1602 и получать показания датчика.

Но вот вывести показания с DHT22 на дисплей 1602 не выходит.
Перебрал в инете несколько вариантов скетчей так ни
один и не заработал.

arDubino
Offline
Зарегистрирован: 12.01.2017

а тупо примеры из ИДЕ посмотреть не судьба??

пример для для дисплея берете открываете.

потом пример для датчика и сдружаете их. :)

Клапауций 823
Клапауций 823 аватар
Offline
Зарегистрирован: 13.01.2017

arDubino пишет:

а тупо примеры из ИДЕ посмотреть не судьба??

пример для для дисплея берете открываете.

потом пример для датчика и сдружаете их. :)

я запретил.

bwn
Offline
Зарегистрирован: 25.08.2014

maksilo пишет:
Перебрал в инете несколько вариантов скетчей так ни один и не заработал.

Нехрен их перебирать. Надо смотреть и понимать. Сперва на примерах LCD понять, как вывести переменную. Потом в примере DHT найти переменную в которой хранится температура. Дальше объяснять?

Клапауций 823
Клапауций 823 аватар
Offline
Зарегистрирован: 13.01.2017

bwn пишет:

Дальше объяснять?

я запретил.

maksilo
Offline
Зарегистрирован: 19.02.2017

arDubino пишет:

а тупо примеры из ИДЕ посмотреть не судьба??

пример для для дисплея берете открываете.

потом пример для датчика и сдружаете их. :)

Я так и пытался делать )

Забыл добавить, экранчик подключен через I2C.

Вот скетч на котором я остановился, библиотеки установлены.

// include the library code:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#define DHTPIN 7
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

LiquidCrystal_I2C lcd(0x27,16,2);// set the LCD address to 0x27 for a 20 chars and 4 line display
void setup() {
    dht.begin();
    lcd.init();
    lcd.backlight();
 }
void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  lcd.setCursor(0, 0);
  lcd.print("Temp:");
  lcd.setCursor(6, 0);
    lcd.print(t);
  lcd.setCursor(12, 0);
  lcd.print("C");
  lcd.setCursor(0, 2);
  lcd.print("Hum:");
  lcd.setCursor(6, 2);
  lcd.print(h);
  lcd.setCursor(12, 2);
  lcd.print("%");
}

При компиляции пишет ошибку:

compilation terminated. 

exit status 1 

Ошибка компиляции для платы Arduino/Genuino Uno
maksilo
Offline
Зарегистрирован: 19.02.2017

bwn пишет:

maksilo пишет:
Перебрал в инете несколько вариантов скетчей так ни один и не заработал.

Нехрен их перебирать. Надо смотреть и понимать. Сперва на примерах LCD понять, как вывести переменную. Потом в примере DHT найти переменную в которой хранится температура. Дальше объяснять?

Перебирать я начал уже после того, как пытался сам разобраться из примеров, не получилось решил найти готовый рабочий вариант чтобы понять свои ошибки вот и всё...

Тут ко всем новичкам так относятся? Если да, то я разочарован данным форумом и его представителями...

bwn
Offline
Зарегистрирован: 25.08.2014

maksilo пишет:

Тут ко всем новичкам так относятся? Если да, то я разочарован данным форумом и его представителями...

Которые не желают соблюдать правила форума, да. К соблюдению правил относится: прилагать к вопросу свое творение в читаемом виде.

maksilo
Offline
Зарегистрирован: 19.02.2017

bwn пишет:

maksilo пишет:

Тут ко всем новичкам так относятся? Если да, то я разочарован данным форумом и его представителями...

Которые не желают соблюдать правила форума, да. К соблюдению правил относится: прилагать к вопросу свое творение в читаемом виде.

Ок, так лучше?

Вот скетч на котором я остановился, библиотеки установлены.

// include the library code:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#define DHTPIN 7
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

LiquidCrystal_I2C lcd(0x27,16,2);// set the LCD address to 0x27 for a 20 chars and 4 line display
void setup() {
    dht.begin();
    lcd.init();
    lcd.backlight();
 }
void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  lcd.setCursor(0, 0);
  lcd.print("Temp:");
  lcd.setCursor(6, 0);
    lcd.print(t);
  lcd.setCursor(12, 0);
  lcd.print("C");
  lcd.setCursor(0, 2);
  lcd.print("Hum:");
  lcd.setCursor(6, 2);
  lcd.print(h);
  lcd.setCursor(12, 2);
  lcd.print("%");
}

При компиляции пишет ошибку:

compilation terminated. 

exit status 1 

Ошибка компиляции для платы Arduino/Genuino Uno
nik182
Онлайн
Зарегистрирован: 04.05.2015

Приведите весь вывод диагностики компиляции. В какой строке ошибка?

maksilo
Offline
Зарегистрирован: 19.02.2017
E:\Book's\Arduino\Projects\i2c\dht22_I2C_lcd\dht22_I2C_lcd.ino:4:17: fatal error: DHT.h: No such file or directory
 
 #include "DHT.h"
 
                 ^
 
compilation terminated.
exit status 1
Ошибка компиляции для платы Arduino/Genuino Uno.
 
Попробовал скачал и подключил библиотеку DHT.h отсюда
Но проблема осталась.
bwn
Offline
Зарегистрирован: 25.08.2014

maksilo, думаю проблема в кириллице, которая в пути к библиотекам. В IDE 1.6.4 Ваш скетч компилируется нормально.

Sketch uses 6 986 bytes (48%) of program storage space. Maximum is 14 336 bytes.
Global variables use 471 bytes (45%) of dynamic memory, leaving 553 bytes for local variables. Maximum is 1 024 bytes.
Еще проверьте папку с DHT на вложенность, бывает архиватор делает папку в папке.

maksilo
Offline
Зарегистрирован: 19.02.2017

bwn пишет:

maksilo, думаю проблема в кириллице, которая в пути к библиотекам. В IDE 1.6.4 Ваш скетч компилируется нормально.

Sketch uses 6 986 bytes (48%) of program storage space. Maximum is 14 336 bytes.
Global variables use 471 bytes (45%) of dynamic memory, leaving 553 bytes for local variables. Maximum is 1 024 bytes.
Еще проверьте папку с DHT на вложенность, бывает архиватор делает папку в папке.

Я тоже так подумал и убрал все русские названия в пути но не помогло.

Какая то ерунда с библиотеками как я понял..

После установки библиотек связанных с DHT (http://prntscr.com/ean5nr) пишет другую ошибку:

C:\Users\maksiLo\Documents\Arduino\libraries\DHT_sensor_library\DHT_U.h:25:29: fatal error: Adafruit_Sensor.h: No such file or directory
 
 #include <Adafruit_Sensor.h>
 
                           ^
compilation terminated.
 
exit status 1
Ошибка компиляции для платы Arduino/Genuino Uno.
bwn
Offline
Зарегистрирован: 25.08.2014

Поместите папку с библиотекой DHT в основную папку библиотек "libraries", перезапустите IDE, посмотрите в примерах, появились с DHT или нет.

arDubino
Offline
Зарегистрирован: 12.01.2017

ком порт не указал или не тот вот и все. плату не видит

хотя не если на третьей стороке то наверно не так подключил библиотеку .

bwn
Offline
Зарегистрирован: 25.08.2014

arDubino пишет:

ком порт не указал или не тот вот и все. плату не видит

Ну а компиляция то здесь при чем? Я вообще без платы его скетч проверял.

maksilo
Offline
Зарегистрирован: 19.02.2017

arDubino пишет:

ком порт не указал или не тот вот и все. плату не видит

хотя не если на третьей стороке то наверно не так подключил библиотеку .

Плата пока отключена, я просто пытаюсь скомпилировать без ошибок кнопка "Проверить"

Библиотеки с примерами вроде все видит - http://prntscr.com/ean68c

Такой вопрос, библиотеки у меня все в zip архивах лежат, их ведь не нужно распаковывать?

maksilo
Offline
Зарегистрирован: 19.02.2017

bwn пишет:

maksilo, думаю проблема в кириллице, которая в пути к библиотекам. В IDE 1.6.4 Ваш скетч компилируется нормально.

Sketch uses 6 986 bytes (48%) of program storage space. Maximum is 14 336 bytes.
Global variables use 471 bytes (45%) of dynamic memory, leaving 553 bytes for local variables. Maximum is 1 024 bytes.
Еще проверьте папку с DHT на вложенность, бывает архиватор делает папку в папке.

Можете скинуть используемые вами бибилиотеки для этого скетча.

Или ссылки где их стоит скачивать?

bwn
Offline
Зарегистрирован: 25.08.2014

maksilo, поищите разные библиотеки DHT, их несколько и у всех разные методы считывания, либо подбирать библиотеку, либо переписать все относящиеся к DHT по образу и подобию как в прилагаемых примерах.

bwn
Offline
Зарегистрирован: 25.08.2014

maksilo пишет:

Можете скинуть используемые вами бибилиотеки для этого скетча.

Или ссылки где их стоит скачивать?

Почту давайте, скину ту что  к вашему скетчу подходит. Качал давно, ссылку вряд ли найду.
Насчет архивов - сейчас вроде видит и в них, но я все равно по привычке распаковываю.

bwn
Offline
Зарегистрирован: 25.08.2014

maksilo пишет:

Библиотеки с примерами вроде все видит - http://prntscr.com/ean68c

Что то их так много у Вас, выкиньте все лишние, одну оставьте.

nik182
Онлайн
Зарегистрирован: 04.05.2015

maksilo пишет:

Такой вопрос, библиотеки у меня все в zip архивах лежат, их ведь не нужно распаковывать?

Рапаковывать обязательно. Больше того, каждая библиотека должнабыть распакована в отдельную папку в директории c:\Users\..\Documents\Arduino\libraries\

После перезапуска среды библиотека должна быть видна в меню IDE скетч->подключить библиотеку  

maksilo
Offline
Зарегистрирован: 19.02.2017
maksilo
Offline
Зарегистрирован: 19.02.2017

bwn пишет:

maksilo пишет:

Можете скинуть используемые вами бибилиотеки для этого скетча.

Или ссылки где их стоит скачивать?

Почту давайте, скину ту что  к вашему скетчу подходит. Качал давно, ссылку вряд ли найду.
Насчет архивов - сейчас вроде видит и в них, но я все равно по привычке распаковываю.

xnemez@mail.ru

maksilo
Offline
Зарегистрирован: 19.02.2017

Решил переустановить все библиотеки, тока не понял как это сделать..

В менеджере библиотек нельзя удалить...

Захожу удаляю бибилотеку по пути:

C:\Program Files (x86)\Arduino\libraries 

А она остаётся в примерах... ерунда какая то...

Или он подгружает библиотеки из места установки архива?

bwn
Offline
Зарегистрирован: 25.08.2014

IDE перезапускаете?

maksilo
Offline
Зарегистрирован: 19.02.2017

bwn пишет:

IDE перезапускаете?

Да

maksilo
Offline
Зарегистрирован: 19.02.2017

Ах вот оно что, оказывается пользовательские библиотеки хранятся по пути:

C:\Users\user\Documents\Arduino\libraries

maksilo
Offline
Зарегистрирован: 19.02.2017

В итоге заработал такой скетч, всем спасибо за помощь!

#include <Wire.h>        // Добавляем необходимые библиотеки
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#define DHTPIN 2     // пин для сигнала поступающего с датчика

//выбор используемого датчика
//#define DHTTYPE DHT11   // DHT 11 
#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

//инициализация датчика
DHT dht(DHTPIN, DHTTYPE);

byte degree[8] =      // кодируем символ градуса
{
  B00111,
  B00101,
  B00111,
  B00000,
  B00000,
  B00000,
  B00000,
};    
 
LiquidCrystal_I2C lcd(0x27,16,2);   // Задаем адрес и размерность дисплея

void setup() {
  lcd.begin();                       // Инициализация lcd             
  lcd.backlight();                  // Включаем подсветку
  lcd.createChar(1, degree);        // Создаем символ под номером 1
  
   Serial.begin(9600);  
  dht.begin();
}

void loop() {
  // Wait a few seconds between measurements.
  delay(2000);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit
  float f = dht.readTemperature(true);
  
  // Выводим показания влажности и температуры
  lcd.setCursor(0, 0);            // Устанавливаем курсор в начало 1 строки
  lcd.print("Hum  =     % ");     // Выводим текст
  lcd.setCursor(7, 0);            // Устанавливаем курсор на 7 символ
  lcd.print(h, 1);                // Выводим на экран значение влажности
  lcd.setCursor(0, 1);            // Устанавливаем курсор в начало 2 строки
  lcd.print("Temp =     \1C ");   // Выводим текст, \1 - значок градуса
  lcd.setCursor(7, 1);            // Устанавливаем курсор на 7 символ 
  lcd.print(t,1);                 // Выводим значение температуры
}
maksilo
Offline
Зарегистрирован: 19.02.2017

Остался тока 1 вопрос, почему то при подключении питания датчика DHT22 не от Arduino Uno, а от платы питания MB102, показания датчика перестают поступать, даже при использования стандартного скетча для датчика DHT22 который выложил ниже.

Хотя с напряжением всё ок проверял мультиметром, и та же история с дисплеем.

#include <stDHT.h>
DHT sens (DHT22);

void setup() {
Serial.begin(57600);
pinMode(2, INPUT);
digitalWrite(2, HIGH);

}

void loop() {
int t = sens.readTemperature(2);
int h = sens.readHumidity(2);
delay(1000);

Serial.print("Hum: ");
Serial.print(h);
Serial.print("% ");
Serial.print("Temp: ");
Serial.print(t);
Serial.println(" C ");
}
ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

Земли соедините вместе

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

#include "DHT.h"