Несколько dht11 на wemos d1 r1

Я пытаюсь подключить три отдельных DHT11 к моему Wemos d1 r1. У меня каждый датчик подключен к контакту питания, который включается и выключается, контакту датчика и общему заземлению. Вот мой код:

#include <DHTesp.h>
#include <ESP8266WiFi.h>

String apiKey = "xxxxxxxxxxxxxx";  
const char* ssid = "xxxxxxxxxxx";  
const char* password = "xxxxxxxxxxxx";  
const char* server = "api.thingspeak.com";

DHTesp dht;
DHTesp dht2;
DHTesp dht3;
WiFiClient client;

void setup() {

  pinMode(D6,OUTPUT);
  pinMode(D8,OUTPUT);
  pinMode(D1,OUTPUT);

    Serial.begin(115200);
    dht.setup(D5, DHTesp::DHT11);
    dht2.setup(D7, DHTesp::DHT11);
    dht3.setup(D2, DHTesp::DHT11);
    WiFi.begin(ssid, password);

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
digitalWrite(D6,HIGH);

}


void loop() {
 digitalWrite(D6,HIGH);
  delay(8000);

    float t = dht.getTemperature();
    float f = (t*1.8) + 32;

    if (isnan(t))
  {
    Serial.println("Failed to read from DHT2 sensor!");
    return;
  }
    Serial.print(", \"maintemp\": ");
    Serial.print(f);
    Serial.print("}\n");



digitalWrite(D6,LOW);
digitalWrite(D8,HIGH);
delay(8000);

    float t2 = dht2.getTemperature();
    float f2 = (t2*1.8) + 32;

    if (isnan(t2))
  {
    Serial.println("Failed to read from DHT3 sensor!");
    return;
  }
    Serial.print(", \"lowtemp\": ");
    Serial.print(f2);
    Serial.print("}\n");


digitalWrite(D6,LOW);
digitalWrite(D1,HIGH);
delay(8000);

    float t3 = dht3.getTemperature();
    float f3 = (t3*1.8) + 32;

    if (isnan(t3))
  {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
    Serial.print(", \"uptemp\": ");
    Serial.print(f3);
    Serial.print("}\n");

    digitalWrite(D1,LOW);

    delay(2000);

    if (client.connect(server, 80)) {
    String postStr = apiKey;
    postStr += "&field3=";
    postStr += String(f);
    postStr += "&field4=";
    postStr += String(f2);
    postStr += "&field5=";
    postStr += String(f3);
    postStr += "\r\n\r\n\r\n\r\n";

    client.print("POST /update HTTP/1.1\n");
    client.print("Host: api.thingspeak.com\n");
    client.print("Connection: close\n");
    client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n");
    client.print("Content-Type: application/x-www-form-urlencoded\n");
    client.print("Content-Length: ");
    client.print(postStr.length());
    client.print("\n\n\n\n");
    client.print(postStr);

    Serial.print("Temperature: ");
    Serial.print(f);

    Serial.println("Sending data to Thingspeak");
  }
  client.stop();

  Serial.println("Waiting 20 secs");
  // вещам требуется не менее 15-секундной задержки между обновлениями
  // 20 секунд на всякий случай

  delay(53700);
}  

Как видите, я назначаю отдельный DHT для каждого контакта датчика и включаю и выключаю контакты питания для каждого датчика. Все они имеют общую основу.

Когда я запускаю код, первый датчик считывает температуру, а второй говорит: "Не удалось прочитать с датчика DHT3!".

Это не датчик, потому что, если я поменяю местами первый и второй датчик, первый всегда читает, а второй дает сбой. Если я уберу второй датчик, третий выйдет из строя. Я попытался подать питание на все контакты датчика в SetUP, но все равно работает только первый. Есть ли какой-то трюк, который я должен использовать здесь.
Я использую DHTESP.h, так как обычный DHT.h не работает с Wemos Pro Mini.

Кто-нибудь сталкивался с этим, чтобы дать мне некоторые рекомендации.

Спасибо

, 👍-1

Обсуждение

Можете ли вы добавить печать getStatusString в свою ошибку? Например, если (иснан(т)) { Serial.print("Не удалось прочитать с датчика DHT2: статус"); Serial.println(dht2.getStatusString()); возвращаться; }. Сделайте это для всех трех датчиков, затем опубликуйте вывод; он скажет вам, по крайней мере, какую ошибку он обнаруживает (тайм-аут? контрольная сумма?...), @frarugi87

Можешь нарисовать схему? Какова общая измеренная подтяжка от линии передачи данных до линии +5 В?, @Maximilian Gerhardt


1 ответ


0

Возможно, вам придется создавать новый объект DHT при каждом включении питания. Я предполагаю, что датчик должен быть инициализирован Arduino, прежде чем он будет готов снимать показания, и когда вы выключаете и снова включаете питание, он теряет свою конфигурацию.

,