Как подключить 2 дачтика DHT11 к ESP8266?

Использую NodeMCU v3
Хочу подключить 2 датчика но не имею представления как это сделать со стороны кода

Start with this Sketch Builder example and get it working with one sensor:

This code creates a DHT object called dht:
DHT dht(DHTPIN, DHTTYPE);

You could replace all lower case instances of dht with dht1 then add additional lines to create a second DHT object called dht2

DHT dht1(DHT1PIN, DHT1TYPE);
DHT dht2(DHT2PIN, DHT2TYPE);

You can then read the two sensors separately:

  float h1 = dht1.readHumidity();
  float t1 = dht1.readTemperature();

  float h2 = dht2.readHumidity();
  float t2 = dht2.readTemperature();

Pete.

Не работает
Мой код:

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>

char auth[] = "BlynkToken";
char ssid[] = "SSID";
char pass[] = "Password";

#define DHT1PIN 2
#define DHT1TYPE DHT11

#define DHT2PIN 3
#define DHT2TYPE DHT11
//1 sensor
DHT dht1(DHT1PIN, DHT1TYPE);
BlynkTimer timer;

void sendSensor()
{
  float h1 = dht1.readHumidity();
  float t1 = dht1.readTemperature();

  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  Blynk.virtualWrite(V2, h);
  Blynk.virtualWrite(V3, t);
}

//2 sensor
DHT dht2(DHT2PIN, DHT2TYPE);
BlynkTimer timer;
void sendSensor()
{
  float h2 = dht2.readHumidity();
  float t2 = dht2.readTemperature();
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT2 sensor!");
    return;
  }
  Blynk.virtualWrite(V3, h2);
  Blynk.virtualWrite(V4, t2);
}

void setup()
{
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
  dht.begin();
  timer.setInterval(1000L, sendSensor);
}

void loop()
{
  Blynk.run();
  timer.run();
}

Выдаёт такие ошибки:

C:\Users\im_os\Desktop\dht11_blynk_ino\dht11_blynk_ino.ino: In function 'void sendSensor()':
dht11_blynk_ino:24:13: error: 'h' was not declared in this scope
   if (isnan(h) || isnan(t)) {
             ^
dht11_blynk_ino:24:25: error: 't' was not declared in this scope
   if (isnan(h) || isnan(t)) {
                         ^
dht11_blynk_ino:28:26: error: 'h' was not declared in this scope
   Blynk.virtualWrite(V2, h);
                          ^
dht11_blynk_ino:29:26: error: 't' was not declared in this scope
   Blynk.virtualWrite(V3, t);
                          ^
C:\Users\im_os\Desktop\dht11_blynk_ino\dht11_blynk_ino.ino: At global scope:
dht11_blynk_ino:34:12: error: redefinition of 'BlynkTimer timer'
 BlynkTimer timer;
            ^
dht11_blynk_ino:17:12: error: 'BlynkTimer timer' previously declared here
 BlynkTimer timer;
            ^
C:\Users\im_os\Desktop\dht11_blynk_ino\dht11_blynk_ino.ino: In function 'void sendSensor()':
dht11_blynk_ino:35:6: error: redefinition of 'void sendSensor()'
 void sendSensor()
      ^
dht11_blynk_ino:19:6: error: 'void sendSensor()' previously defined here
 void sendSensor()
      ^
dht11_blynk_ino:39:13: error: 'h' was not declared in this scope
   if (isnan(h) || isnan(t)) {
             ^
dht11_blynk_ino:39:25: error: 't' was not declared in this scope
   if (isnan(h) || isnan(t)) {
                         ^
C:\Users\im_os\Desktop\dht11_blynk_ino\dht11_blynk_ino.ino: In function 'void setup()':
dht11_blynk_ino:51:3: error: 'dht' was not declared in this scope
   dht.begin();
   ^
exit status 1
'h' was not declared in this scope

These variables should be h1 and t1

Pete.

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>

char auth[] = "BlynkToken";
char ssid[] = "SSID";
char pass[] = "Password";

#define DHT1PIN 2
#define DHT1TYPE DHT11

#define DHT2PIN 3
#define DHT2TYPE DHT11
//1 sensor
DHT dht1(DHT1PIN, DHT1TYPE);
BlynkTimer timer;

void sendSensor()
{
  float h1 = dht1.readHumidity();
  float t1 = dht1.readTemperature();

  if (isnan(h1) || isnan(t1)) {
Serial.println("Failed to read from DHT sensor!");
return;
  }
  Blynk.virtualWrite(V2, h1);
  Blynk.virtualWrite(V3, t1);
}

//2 sensor
DHT dht2(DHT2PIN, DHT2TYPE);
BlynkTimer timer;
void sendSensor()
{
  float h2 = dht2.readHumidity();
  float t2 = dht2.readTemperature();
  if (isnan(h2) || isnan(t2)) {
Serial.println("Failed to read from DHT2 sensor!");
return;
  }
  Blynk.virtualWrite(V3, h2);
  Blynk.virtualWrite(V4, t2);
}

void setup()
{
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
  dht.begin();
  timer.setInterval(1000L, sendSensor);
}

void loop()
{
  Blynk.run();
  timer.run();
}

Поправил и всё-равно сыпет ошибками:

dht11_blynk_ino:34:12: error: redefinition of 'BlynkTimer timer'
 BlynkTimer timer;
        ^
dht11_blynk_ino:17:12: error: 'BlynkTimer timer' previously declared here
 BlynkTimer timer;
        ^
C:\Users\im_os\Desktop\dht11_blynk_ino\dht11_blynk_ino.ino: In function 'void sendSensor()':
dht11_blynk_ino:35:6: error: redefinition of 'void sendSensor()'
 void sendSensor()
  ^
dht11_blynk_ino:19:6: error: 'void sendSensor()' previously defined here
 void sendSensor()
  ^
C:\Users\im_os\Desktop\dht11_blynk_ino\dht11_blynk_ino.ino: In function 'void setup()':
dht11_blynk_ino:51:3: error: 'dht' was not declared in this scope
   dht.begin();
   ^
exit status 1
redefinition of 'BlynkTimer timer'

I’d do it like this:

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>

char auth[] = "BlynkToken";
char ssid[] = "SSID";
char pass[] = "Password";

#define DHT1PIN 2
#define DHT2PIN 3

#define DHT1TYPE DHT11
#define DHT2TYPE DHT11

DHT dht1(DHT1PIN, DHT1TYPE);
DHT dht2(DHT2PIN, DHT2TYPE);


BlynkTimer timer;

void sendSensor()
{
  // Read sensor 1
  float h1 = dht1.readHumidity();
  float t1 = dht1.readTemperature();
  if (isnan(h1) || isnan(t1))
  {
    Serial.println("Failed to read from DHT1 sensor!");
    return;
  }
  else
  {
    Blynk.virtualWrite(V2, h1);
    Blynk.virtualWrite(V3, t1);
  }

  // Read sensor 2
  float h2 = dht2.readHumidity();
  float t2 = dht2.readTemperature();
  if (isnan(h2) || isnan(t2))
  {
    Serial.println("Failed to read from DHT2 sensor!");
    return;
  }
  else
  {
    Blynk.virtualWrite(V3, h2);
    Blynk.virtualWrite(V4, t2);   
  }
}


void setup()
{
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
  dht1.begin();
  dht2.begin(); 
  timer.setInterval(5000L, sendSensor);
}

void loop()
{
  Blynk.run();
  timer.run();
}

I’ve changed the timer to every 5 seconds because DHT11 sensors don’t like to be read too frequently.

Also, you are using virtual pin V3 for both t1 and h2
I’ve not changed this in my code, so you need to work-out which pins you want to use and make the changes

Pete.

1 Like

Спасибо <3
Работает)

1 Like