• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь DHT22 + ESP-12f на 4й ноге всегда 1

Peter1001

New member
Собственно такая проблема.
Подключил DHT22, написал скетч.
Залил. Но он не работает.
Стал смотреть, а на 4й ноге
Код:
digitalRead(pin)
типа всегда 1.
В чём может быть проблема?

vivaldi_2017-07-31_21-18-00[1].png

Питаю датчик от 3.3. источник питания тот же что и у esp
проверяю таким кодом
Код:
void loop() {
    /*Dht22 reader = Dht22(4);
    auto dhtData = reader.ReadDht();
    Serial.println("{ \"temperature\":" + String(dhtData.Temperature) + ", \"humidity\":" + String(dhtData.Humidity) + ", \"checkSumm\":" + String(dhtData.CheckSumm) + " }");*/
    pinMode(4, OUTPUT);
    digitalWrite(4, LOW);
    delay(20);
    pinMode(4, INPUT_PULLUP);
    delayMicroseconds(10);
    for(int i=0; i<250; i++){
       Serial.println(digitalRead(4));
    }
     Serial.println("======================");
    delay(10000); // интервал между запросами 10 сек
}
пробовал 4, 19 и 20 пин... 19 и 20 всегда 0

Код:
#include "Dht22.h"

#define   SetPinOut(pin) pinMode(pin, OUTPUT)
#define   SetPinIn(pin)  pinMode(pin,INPUT_PULLUP)
#define   Pull0(pin)     digitalWrite(pin,LOW)
#define   Pull1(pin)     digitalWrite(pin,HIGH)
#define   Read(pin)      digitalRead(pin)
#define   TimeLimit      150
#define   Dealy          50


Dht22::Dht22(unsigned char pin)
{
    _pin = pin;
    _dataLenght = 5;
}

Dht22::~Dht22()
{
}

Dht22Result Dht22::ReadDht()
{
    auto source = ReadSource();
    return Dht22Result(source.Temperature / 10.0f, source.Humidity / 10.0f, source.CheckSumm);
}

void Dht22::Init() {
    SetPinOut(_pin);            //Стартовая последовательность
    Pull0(_pin);
    delay(20);
    SetPinIn(_pin);
    delayMicroseconds(10);
}

DhtSource Dht22::ReadSource() {
    // массив считаных байт с датчика
    // 0 и 1 = влажность * 10
    // 2 и 3 = температура * 10
    // 4 - контрольная сумма
    //Serial.println("BEGIN->Dht22::ReadArray");
    DhtSource source = DhtSource();
    Init();

    if (!TestPin(LOW, TimeLimit))
        return source;
    if (!TestPin(HIGH, TimeLimit))
        return source;
    if (!TestPin(LOW, TimeLimit))
        return source;

    for (unsigned char count = 0; count < _dataLenght * 8; count++) {
        if (!TestPin(HIGH, TimeLimit))
            return source;

        unsigned char  result = TestPin(LOW, TimeLimit);

        if (!result)
            return source;

        (source.Humidity <<= count < 16) += result > 50;
        (source.Temperature <<= count < 32) += result > 50;
        (source.CheckSumm <<= count >= 32) += result > 50;

    }
    //Serial.println("END->Dht22::ReadArray");
    return source;
}

unsigned char Dht22::TestPin(unsigned char level, unsigned char timeLimit)
{
    unsigned char timecount = 0;
    delayMicroseconds(5);
    while (Read(_pin) != level)
    {
        timecount++;
        if (timecount > timeLimit)
            return 0;
    }
    return timecount;
}
 
Последнее редактирование:
Сверху Снизу