Problema con sensore DHT22

Ciao a tutti,
sto provando un sensore DHT22 con una Wemos D1 Mini ma ho un problema:
lo sketch di esempio DHTTest della libreria Adafruit mi restituisce sempre: "Failed to read from DHT sensor"
se però scollego l'alimentazione al sensore e la ricollego inizia a leggere sia i valori di temperatura che umidità.
Come mai accade questo?

in allegato lo schema di collegamento.

Grazie mille

UPDATE*

Ho provato a collegare la Wemos ad un alimentatore USB e quindi non al pc e il problema svanisce.
Possibile che non arriva abbastanza corrente dalla USB del PC? Ma a questo punto come faccio a leggere sulla seriale il dato di temperatura??

Grazie

Mi pare strano che l'USB del PC non riesca ad alimentare la scheda, provato altre usb del pc? Altri PC? Anche il cavo usb protrebbe essere fonte di guai, comunque, la cosa più semplice che mi viene in mente un HUB USB alimentato oppure complicando la cosa alimenti da +5V e GND e usi un cavo usb modificato dove elimini la parte di alimentazione e lasci solo i dati e GND in comune.

Ciao @fabpolli e grazie per la risposta.

No la scheda (WeMos D1 mini) è alimentata dal PC e funziona a dovere, forse è il DHT22 che richiede più corrente, ma la cosa strana è che se scollego e ricollego la VCC al DHT22 il tutto inizia a funzionare.

Si ho provato altre USB del PC e altri cavi USB ma la situazione è la stessa.
Alimentandolo invece direttamente con un alimentatore degli smartphone e visualizzando il dato sui un display il tutto funziona alla grande...
Non riesco davvero a capire il perchè di questo....

  1. il dht22 non richiede molta corrente
  2. su che piedino hai collegato il dht ? Forse usi un piedino che è usato per mettere il chip in modalità programmazione (prova a cambiare pin magari usa D2)
    (ho un ricordo vago della wemos)
  3. se la wemos lavora a 3,3V non darei i 5V al dht ma i 3,3V

Grazie per la risposta @nid69ita.

Ho usato il D4 provo col D2...
In realtà ho sbagliato a disegnare lo sketch, ho collegato al DHT i 3,3V.

Provo con altro pin sul Wemos e vi aggiorno

INTANTO IL WEMOS FUNZIONA A 3,3 VOLT.
Se tu attacchi il sensore ai 5 volt è normale che poi questi ti arrivino all'ingresso del Wemos
Quindi attaccalo ai 3,3 volt (il DHT funziona anche a questa tensione)
Se non hai fritto l'ingresso probabilmente leggerà, altrimenti prova un altro ingresso.

steve-cr:
INTANTO IL WEMOS FUNZIONA A 3,3 VOLT.
Se tu attacchi il sensore ai 5 volt è normale che poi questi ti arrivino all'ingresso del Wemos
Quindi attaccalo ai 3,3 volt (il DHT funziona anche a questa tensione)
Se non hai fritto l'ingresso probabilmente leggerà, altrimenti prova un altro ingresso.

Grazie per la risposta.
No come dicevo prima è stato un errore nel disegno ma nella realtà ho collegato i 3,3V.
La cosa strana è che se alimentato non da PC ma direttamente da alimentatore 220V a 5V il tutto funziona correttamente...

Ho provato a cambiare pin, ho usato D3, stessa situazione se la usb è collegata al PC non legge il valore dal DHT22 se scollega e ricollego Vcc al DHT allora inizia a leggere.
Se invece collego la USB all'alimentatore legge il dato senza problemi...

Io ti consiglio comunque di provare D2 o D1 che sono pin "semplici", non hanno altre funzioni

La cosa è molto strana. I 5 volt della USB entrano dal connettore e vanno all'integrato stabilizzatore a 3,3 volt.
Che poi quel cavo sia attaccato al PC oppure ad un alimentatore 5v non cambia nulla...
A meno che la USB del PC abbia qualche problema: Connetti la USB al PC e misura sul pin 3,3 volt.
Poi fai la stessa misura con il cavo USB collegato all'alimentatore 220 - USB
E vedi che differenze ci sono.

Grazie a tutti per le risposte.
Ho fatto altri test. In parole povere il problema si crea soltanto quando carico lo sketch sul dispositivo e viene fatto l'hard reset. Se stacco la usb dal pc e la ricollego il tutto torna a funzionare normalmente...
Non so cosa pensare...

A 'sensazione" sembra un problema di "enumerazione porte usb" lato pc... Caratteristiche hardware/software del pc?

#include "DHTesp.h"

#ifdef ESP32
#pragma message(THIS EXAMPLE IS FOR ESP8266 ONLY!)
#error Select ESP8266 board.
#endif

DHTesp dht;

void setup()
{
  Serial.begin(115200);
  Serial.println();
  Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)\tHeatIndex (C)\t(F)");
  String thisBoard= ARDUINO_BOARD;
  Serial.println(thisBoard);


  dht.setup(5, DHTesp::DHT22); // Connect DHT sensor to D1
}

void loop()
{
  delay(dht.getMinimumSamplingPeriod());

  float humidity = dht.getHumidity();
  float temperature = dht.getTemperature();

  Serial.print(dht.getStatusString());
  Serial.print("\t");
  Serial.print(humidity, 1);
  Serial.print("\t\t");
  Serial.print(temperature, 1);
  Serial.print("\t\t");
  Serial.print(dht.toFahrenheit(temperature), 1);
  Serial.print("\t\t");
  Serial.print(dht.computeHeatIndex(temperature, humidity, false), 1);
  Serial.print("\t\t");
  Serial.println(dht.computeHeatIndex(dht.toFahrenheit(temperature), humidity, true), 1);
}

Prova questo e poi dimmi cosa fa.

speedyant:
A 'sensazione" sembra un problema di "enumerazione porte usb" lato pc... Caratteristiche hardware/software del pc?

Un Notebook Samsung i7 Win10 e uso la porta USB2.0.

steve-cr:

#include "DHTesp.h"

#ifdef ESP32
#pragma message(THIS EXAMPLE IS FOR ESP8266 ONLY!)
#error Select ESP8266 board.
#endif

DHTesp dht;

void setup()
{
 Serial.begin(115200);
 Serial.println();
 Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)\tHeatIndex (C)\t(F)");
 String thisBoard= ARDUINO_BOARD;
 Serial.println(thisBoard);

dht.setup(5, DHTesp::DHT22); // Connect DHT sensor to D1
}

void loop()
{
 delay(dht.getMinimumSamplingPeriod());

float humidity = dht.getHumidity();
 float temperature = dht.getTemperature();

Serial.print(dht.getStatusString());
 Serial.print("\t");
 Serial.print(humidity, 1);
 Serial.print("\t\t");
 Serial.print(temperature, 1);
 Serial.print("\t\t");
 Serial.print(dht.toFahrenheit(temperature), 1);
 Serial.print("\t\t");
 Serial.print(dht.computeHeatIndex(temperature, humidity, false), 1);
 Serial.print("\t\t");
 Serial.println(dht.computeHeatIndex(dht.toFahrenheit(temperature), humidity, true), 1);
}




Prova questo e poi dimmi cosa fa.

Ok ci provo appena rientro e ti aggiorno.
Grazie mille

Perdonate il ritardo nella risposta ma ero fuori per lavoro.

Ho provato lo sketch e comunque il problema si presenta, ma soltanto quando è aperto su PC il monitor seriale...
A questo punto non mi resta che provare con un altro pc e vedere cosa accade.

Grazie mille a tutti

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.