• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESP 8266 + dht11 + LSD

Bposter

New member
Всем привет, у меня
NodeMCU V3 ESP8266 (CH340) Интересует вопрос можно к нему подключить датчик температуры dht11 + LSD 16X2, есть в esp аналоговые пины?
 

Сергей_Ф

Moderator
Команда форума
@Bposter есть один аналоговый пин (неужели сложно посмотреть в документации?), но его лучше не использовать, если точность +-2 градуса не устраивает.
А зачем Вам аналоговый пин для DH11? Он по "цифре" работает.
Если нужна только температура, проще использовать цифровой датчик температуры DS18B20.

А вот lsd лучше не употреблять ни в каком виде.
 
Последнее редактирование:

Bposter

New member
@Bposter есть один аналоговый пин (неужели сложно посмотреть в документации?), но его лучше не использовать, если точность +-2 градуса не устраивает.
А зачем Вам аналоговый пин для DH11? Он по "цифре" работает.
Если нужна только температура, проще использовать цифровой датчик температуры DS18B20.

А вот lsd лучше не употреблять ни в каком виде.
ARDUINO UNO свое спалил думал перенести все на ESP, но похоже предется новую плату брать
 

Сергей_Ф

Moderator
Команда форума
ARDUINO UNO свое спалил думал перенести все на ESP, но похоже предется новую плату брать
Зачем, если есть esp? Что мешает сделать на нём? 99% что даже скетч переписывать не надо будет, только пины поменять.
 

Сергей_Ф

Moderator
Команда форума
@Bposter у вас дисплей с интерфейсом I2C, это цифровой интерфейс и на ардино эти пины использууются как цифровые. Куда подключать - вопрос личных предпочтений, например так - см. Wiring NodeMCU ESP8266 12E with i2C 16×2 LCD Screen | 14Core.com
В скетче, только поправьте пины на нужные.
Хотя, судя по вопросам, это будет не простой задачей.
 

Bposter

New member
@Bposter у вас дисплей с интерфейсом I2C, это цифровой интерфейс и на ардино эти пины использууются как цифровые. Куда подключать - вопрос личных предпочтений, например так - см. Wiring NodeMCU ESP8266 12E with i2C 16×2 LCD Screen | 14Core.com
В скетче, только поправьте пины на нужные.
Хотя, судя по вопросам, это будет не простой задачей.
Не простая? Да возможно но то что это все делается на ESP уже радует, про пины спаришиваю так как в скетче они даже не указываются, но думаю в библиотеке их переопределить можно?


Код:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <dht11.h>
#define DHT11PIN 8

dht11 sensor;
//LCD  SCL->A5  SDA->A4
LiquidCrystal_I2C lcd(0x27, 16, 2);

unsigned long currentTime;
unsigned long loopTime;

int ledPin = 13;  // инициализируем пин для сигнала реле

int inputPin = 12;  // инициализируем пин для получения сигнала от пироэлектрического датчика движения

int pirState = LOW;  // начинаем работу программы, предполагая, что движения нет

int val = 0;  // переменная для чтения состояния пина

//создаем свои символы
byte U[8] =
{
  B10001,
  B10001,
  B10001,
  B01111,
  B00001,
  B00001,
  B11110,
  B00000,
};

byte P[8] =
{
  B11111,
  B10001,
  B10001,
  B10001,
  B10001,
  B10001,
  B10001,
  B00000,
};

byte EL_lit[8] =
{
  B00111,
  B01001,
  B10001,
  B10001,
  B10001,
  B10001,
  B10001,
  B00000,
};

byte ZH_lit[8] =
{
  B10001,
  B10101,
  B10101,
  B01110,
  B10101,
  B10101,
  B10001,
  B00000,
};

byte MZ_lit[8] =
{
  B10000,
  B10000,
  B10000,
  B11110,
  B10001,
  B10001,
  B11110,
  B00000,
};

void setup()
{
  pinMode(ledPin, OUTPUT);  // объявляем светодиод в качестве  OUTPUT
  pinMode(inputPin, INPUT);  // объявляем датчик в качестве INPUT

  currentTime = millis();       // считываем время, прошедшее с момента запуска программы
  loopTime = currentTime;
 
  pinMode(13, OUTPUT);
  digitalWrite(13, 1);

lcd.init();                            // Инициализация lcd            
lcd.backlight();                       // Включаем подсветку
lcd.createChar(1,P);
lcd.createChar(2,U);
lcd.createChar(3, EL_lit);
lcd.createChar(4, ZH_lit);
lcd.createChar(5, MZ_lit);
}

void loop()
{
  /////////////////////////////////////////////////////////////////////////////
  currentTime = millis();                 // считываем время, прошедшее с момента запуска программы
if(currentTime >= (loopTime + 2000)){  // сравниваем текущий таймер с переменной loopTime + 1 секунда
int chk = sensor.read(DHT11PIN);
//lcd.autoscroll();
lcd.setCursor(0, 0);
lcd.print("B\3A\4HOCT\5      %");
lcd.setCursor(12, 0);
lcd.print(sensor.humidity);
lcd.setCursor(0, 1);
lcd.print("TEM\1EPAT\2PA    C");
lcd.setCursor(12, 1);
lcd.print(sensor.temperature);   
 
  loopTime = currentTime;           // в loopTime записываем новое значение
}
//////////////////////////////////////////////////////////////////////
val = digitalRead(inputPin);  // считываем значение с датчика

if (val == HIGH) {  // проверяем, соответствует ли считанное значение HIGH
digitalWrite(ledPin, HIGH);  // включаем светодиод
if (pirState == LOW) {
pirState = HIGH;
}

} else {
digitalWrite(ledPin, LOW); // выключаем светодиод
if (pirState == HIGH){
pirState = LOW;
}
////////////////////////////////////////////////////////////////////
}
}
 

Сергей_Ф

Moderator
Команда форума
@Bposter если подключать как по ссылке, то переопределить, похоже, не надо ничего для дисплея. Только для dh10 надо переопределить, и выбрать пин с подтяжки к + или нейтральный, иначе esp не запустится.
 

Bposter

New member
@Bposter если подключать как по ссылке, то переопределить, похоже, не надо ничего для дисплея. Только для dh10 надо переопределить, и выбрать пин с подтяжки к + или нейтральный, иначе esp не запустится.
LCD запустился как надо, пишет как и нужно температура, влажность. А вот DHT11 не хочет работать хоть и запитался нормально, определил его вывод DAT на [HASHTAG]#define[/HASHTAG] DHT11PIN 12 это по даташиту D6, не реагирует.

DHT11 у меня как шилд идет там уже есть пару сопротивлений.
 

Bposter

New member
@Bposter пробуйте подключать D5 ( в скетче 14), D4 ( в скетче 2) должно работать
D4 ( в скетче 2) даже не хочет загружать скетч пишет
Код:
error: espcomm_upload_mem failed
error: espcomm_upload_mem failed
D5 ( в скетче 14) вроде работает, в Serial.println(sensor.temperature); вывел инфу и крутит ноль, ноль, похоже датчик тоже сгорел (

Я спаял схему типа трансформатор->диодный мост->стабилизатор на транзисторе, так вот когда датчик подключал к + стабилизатора нечайно задел + моста а там больше 10 вольт, поэтому думаю что DHT11 тоже сгорел
 
Последнее редактирование:

Сергей_Ф

Moderator
Команда форума
прицепил на коленки к 14 пину ([HASHTAG]#define[/HASHTAG] DHTTYPE DHT11 ) - всё работает. Так что точно Ваш погорел.

upload_2016-10-16_22-6-8.png
 

Bposter

New member
прицепил на коленки к 14 пину ([HASHTAG]#define[/HASHTAG] DHTTYPE DHT11 ) - всё работает. Так что точно Ваш погорел.
Жаль конечно Arduino, в будующем куплю еще одну UNO и попробую саму микросхему заменить на старую, может хоть она еще жива осталась, еще раз спасиб за помощь
 
Сверху Снизу