Problème dht11 arduino

bonjour j'ai un arduino avec un dht11 branché dessus mais les valeurs sont bizarres:

#include <Adafruit_Sensor.h>

#define SCREEN_WIDTH  128
#define SCREEN_HEIGHT 128 // Change this to 96 for 1.27" OLED.

// You can use any (4 or) 5 pins 
#define SCLK_PIN 2
#define MOSI_PIN 3
#define DC_PIN   4
#define CS_PIN   5
#define RST_PIN  6

// Color definitions
#define BLACK           0x0000
#define BLUE            0x001F
#define RED             0xF800
#define GREEN           0x07E0
#define CYAN            0x07FF
#define MAGENTA         0xF81F
#define YELLOW          0xFFE0  
#define WHITE           0xFFFF

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1351.h>
#include <SPI.h>
#include <DHT.h>
#include <DHT_U.h>
// Definit la broche de l'Arduino sur laquelle la 
// broche DATA du capteur est reliee 
#define DHTPIN 12
// Definit le type de capteur utilise
#define DHTTYPE DHT11
// Declare un objet de type DHT
// Il faut passer en parametre du constructeur 
// de l'objet la broche et le type de capteur
DHT_Unified dht(DHTPIN, DHTTYPE);

// Option 1: use any pins but a little slower
Adafruit_SSD1351 tft = Adafruit_SSD1351(SCREEN_WIDTH, SCREEN_HEIGHT, CS_PIN, DC_PIN, MOSI_PIN, SCLK_PIN, RST_PIN); 
float temperature; 
float Humidity;
sensor_t sensor;

void setup() {
  // put your setup code here, to run once:
  tft.begin();
  delay(5000);
  Serial.begin(9600);
}

void loop() {
  sensors_event_t event;
  dht.temperature().getEvent(&event);
  temperature = event.temperature;
  dht.humidity().getEvent(&event);
  Humidity = event.relative_humidity;
  Serial.println(Humidity);
  Serial.println(temperature);
//  tft.setCursor(0,0);
//  tft.setTextColor(BLUE);
//  tft.print(String(Humidity));
//  tft.setCursor(0,1);
//  tft.setTextColor(RED);
//  tft.print(String(temperature));
  delay(sensor.min_delay / 1000);
//  tft.setCursor(0,0);
//  tft.setTextColor(BLACK);
//  tft.print(String(Humidity));
//  tft.setCursor(0,1);
//  tft.print(String(temperature));
  // put your main code here, to run repeatedly:

}

oui il y a du copié collé et c'est prévu pour un écran oled plus tard

et ça me renvoie des valeurs comme:

167.00
pour l'humidité et
11.xx
alors qu'il fait 20 °c dans la pièce

ou alors ça me renvoie nan
en boucle

Je ne sais pas quoi faire

si vous rajoutez ça à la fin du setup, ça dit quoi.

  sensor_t sensor;

  dht.temperature().getSensor(&sensor);
  Serial.println(F("------------------------------------"));
  Serial.println(F("Temperature Sensor"));
  Serial.print  (F("Sensor Type: ")); Serial.println(sensor.name);
  Serial.print  (F("Driver Ver:  ")); Serial.println(sensor.version);
  Serial.print  (F("Unique ID:   ")); Serial.println(sensor.sensor_id);
  Serial.print  (F("Max Value:   ")); Serial.print(sensor.max_value); Serial.println(F("°C"));
  Serial.print  (F("Min Value:   ")); Serial.print(sensor.min_value); Serial.println(F("°C"));
  Serial.print  (F("Resolution:  ")); Serial.print(sensor.resolution); Serial.println(F("°C"));
  Serial.println(F("------------------------------------"));

  dht.humidity().getSensor(&sensor);
  Serial.println(F("Humidity Sensor"));
  Serial.print  (F("Sensor Type: ")); Serial.println(sensor.name);
  Serial.print  (F("Driver Ver:  ")); Serial.println(sensor.version);
  Serial.print  (F("Unique ID:   ")); Serial.println(sensor.sensor_id);
  Serial.print  (F("Max Value:   ")); Serial.print(sensor.max_value); Serial.println(F("%"));
  Serial.print  (F("Min Value:   ")); Serial.print(sensor.min_value); Serial.println(F("%"));
  Serial.print  (F("Resolution:  ")); Serial.print(sensor.resolution); Serial.println(F("%"));
  Serial.println(F("------------------------------------"));

Quel Arduino?
Parce que l'afficheur fait 128x128 il doit falloir pas mal de RAM pour le buffer d'image.

Tu as le même comportement si tu mets en commentaire tout ce qui concerne l'afficheur?

‌un mega 2560

Avant d'aller plus loin, j'irais tester le montage à l'aide de l'exemple fourni par la bibliothèque DHT

D'allleurs, je ne vois pas de dht.begin() dans ton setup.

et l'exemple de l'afficheur marche

Est-ce que l'exemple du DHT11 marche aussi ?

Pour ma part, j'utilise la bibliothèque DHTsensorlibrary et son exemple DHT_Unified_sensor ... sans oublier de sélectionner le bon composant (une seule ligne décommentée entre les lignes 19, 20 ou 21)

o‌ui il marche ça c'est sûr

Voici de quoi repérer l'erreur de DHT, j'ai emprunté quelque part il y quelque temps, voyez mon commentaire « qui se fait capricieux ... »

  // Précautions envers DHT qui se fait capricieux plus souvent qu'à son tour
  int chk = dht.read();
  pumiDHT = humiDHT;    //On garde ici en banque la dernière valeur DHT valable (« phumDHT »  comme dans « précédente valeur humiditié tirée du DHT »)
  switch (chk) {
    case DHTLIB_OK:                     Serial.print  ("OK,\t");                break;
    case DHTLIB_ERROR_CHECKSUM:         Serial.print  ("Checksum error,\t");    break;
    case DHTLIB_ERROR_TIMEOUT_A:        Serial.print  ("Time out A error,\t");  break;
    case DHTLIB_ERROR_TIMEOUT_B:        Serial.print  ("Time out B error,\t");  break;
    case DHTLIB_ERROR_TIMEOUT_C:        Serial.print  ("Time out C error,\t");  break;
    case DHTLIB_ERROR_TIMEOUT_D:        Serial.print  ("Time out D error,\t");  break;
    case DHTLIB_ERROR_SENSOR_NOT_READY: Serial.print  ("Sensor not ready,\t");  break;
    case DHTLIB_ERROR_BIT_SHIFT:        Serial.print  ("Bit shift error,\t");   break;
    case DHTLIB_WAITING_FOR_READ:       Serial.print  ("Waiting for read,\t");  break;
    default:Serial.print  ("Unknown: ");Serial.print  (chk);Serial.print(",\n");break;
  }
  humiDHT = dht.getHumidity();
  tempDHT = dht.getTemperature();
  if (humiDHT < 0 || humiDHT > 100) { humiDHT = pumiDHT; }

Ceci pourrait vous permettre de savoir ce qui en retourne de votre DHT

Dans ce fichier .ino d'où j'ai tiré le code ci-haut, je vois aussi que l'humidité relative est mesurée par un BME280 (bibliothèque SparkFunBME280) qui inclut les fonctions de pression, température et humidité en un seul module. Ne pas confondre avec BMP280.
Le BME280 (un seul composant, une seule adresse i2c) s'est fait rare, des pseudo-imitation l'ont remplacé en jumelant sur la même carte deux lecteurs (AHT20 + BMP280) - avec aussi deux adresse i2C.

Que ce soit BME280 ou sa forme jumelée, ces derniers s'avèrent plus fiable que DHT11 ou DHT22 Aussi ai-je abandonné l'usage de DHT au profit de ces copies

Aussi ... as-tu lu Question DHT11 résolue sur notre forum ?

Bonjour

La solution est dans le post#5

Cordialement
jpbbricole