[RISOLTO] Compatibilità DHT22+microSD+eps8266

Salve a tutti, scusate per il titolo bizzarro, ma ritengo che sia questo il mio problema: un'incompatibilità hardware tra questi tre componenti. Se avete suggerimenti su come procedere ve ne sarei grato.

Ho collegato a un Wemos D1, un sensore DHT22 e un lettore di microSD della catalex. La memoria microSD è nuova ed è funzionante. Alimento i sensori con il pin a 5V della board. Posto adesso un codice di esempio che ho creato per analizzare questo problema. Letti i dati del sensore, li stampo su un file.txt.

  #include <DHT.h>
  #include <SD.h>
  #include <SPI.h>                       
  #define SD_CS D4                           
  #define DHTPIN D5
  #define DHTTYPE 22
  DHT dht(DHTPIN, DHTTYPE);
  File local_file;                         
  File project_file; 
  float t = 0;
  float h = 0;
  const char* name_device_file ="file.txt"; 
  String get_upload =""; 

  
void setup() {
 Serial.begin(9600);
 Serial.print("MicroSD...");                 
  if (!SD.begin(SD_CS)) {                           
    Serial.println("not found!");    
  } 

}

void loop() {
    t = dht.readTemperature(); 
    h = dht.readHumidity(); 
    String my_string = "Temperatura: ";
    my_string += t;
    my_string +=" - Umidità: ";
    my_string += h;


    project_file = SD.open(name_device_file, FILE_WRITE);         
  if (project_file) {     
      project_file.println(my_string);
      Serial.println(my_string); 
      project_file.close();                    
  } else {  
      Serial.println("errore: il file non si apre");  
  }

  delay(2000);
  
}

Il software la prima volta mi dice che il file non si apre. Ravviando la board, il programma non segnala più errore e inizia a scrivere su monitor i valori letti. Andando poi a vedere cosa ha scritto nella memoria microSD si può notare che è stata scritta solo la prima riga e nient'altro:

Temperatura: nan - Umidità: nan

Commentando " t = dht.readTemperature(); e h = dht.readHumidity(); " la scheda microSD torna a lavorare correttamente. Suggerimenti?

Non mi quadra. Quando funziona su serial monitor (presumo vedi le misure e non nan) dentro il file solo 1 riga e soprattuoto valori nan ?

Come hai collegato il dht ? Magari collegando sensore e anche SD, dal pin 5v della wemos non arriva abbastanza corrente. Solo con comandi tipo dht.readTemperature(); viene letto qualcosa dal sensore, altrimenti è come se fosse in "quiete"

Grazie nid69ita, è proprio quello che succede. Se "forzo" il programma con un riavvio smette di segnalarmi che ha un problema con la memoria e procede come se fosse tutto a posto, ma quando vai a guardare il contenuto di file.txt al massimo ha scritto la prima riga.

p.s: ho testato il programma su un arduino UNO ed non ho avuto problemi. Ma io necessito dell'eps8266 :frowning:

Mi pare strano questo:
"The microSD card works with 3.3V. So we can't connect it directly to circuits that use 5V logic"
preso da qui: link

Io proverei a collegare ed alimentare tutto a 3,3V

nid69ita:
Io proverei a collegare ed alimentare tutto a 3,3V

No, Nid, se guardi lo schema di quel modulo vedi che ha il regolatore di tensione on-board e gli adattori di livelli sui vari pin.

Guglielmo

 #define SD_CS D4                           
  #define DHTPIN D5

Il pin D5, sulla Wemos D1 è usato dalla SD (Sck)

Grazie mille brunello22! Ho fatto così tante prove che mi son dimenticato di controllare i pin :confused:

Però non capisco: usando l'SCK al pin D13 per il lettore di microSD, il pin D5, anch'esso di tipo SCK, non può essere usato?

Non ho ancora usato la SD con l'ESP8266 (ho usato la flash interna con SPIFFS) ma credo che i pin siano definiti dalla libreria SD e mi sa che non si possono cambiare per cui dovresi usare un pin diverso per il DHT22.