• Система автоматизации с открытым исходным кодом на базе 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;
}
 
Последнее редактирование:
Сверху Снизу