Come salvare i valori della sonda DHT11 su PC via seriale?

Ciao tutti,
sono un autodidatta e vorrei chiedere il vostro aiuto con lo scopo di salvare i valori di una sonda (DHT11) in un file sul PC. In rete ho trovato frammenti di codice che ho unito e vorrei la vostra opinione.

#include <dht11.h>
dht11 DHT;
#define DHT11_PIN 4 // Input at digital PIN 4
import processing.serial.*;
Serial mySerial;
PrintWriter output

void setup(){ // Start setup
  Serial.begin(9600);
  delay(500); // Delay to let system boot
  Serial.println("DHT TEST PROGRAM ");
  Serial.print("LIBRARY VERSION: ");
  Serial.println(DHT11LIB_VERSION);
  Serial.println();
  Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)");
  delay(1000); // Wait before accessing Sensor
  mySerial = new Serial( this, Serial.list()[0], 9600 );
  output = createWriter( "data.txt" );
} // End setup

void loop(){ // Start loop
  int chk;
  Serial.print("DHT11, \t");
  chk = DHT.read(DHT11_PIN); // Read the value returned from sensor at digital PIN 4
  switch (chk){
    case DHTLIB_OK: // The sensor samples and its checksum are OK
                Serial.print("OK,\t"); 
                break;
    case DHTLIB_ERROR_CHECKSUM: // The checksum test failed
                Serial.print("Checksum error,\t"); 
                break;
    case DHTLIB_ERROR_TIMEOUT: // A timeout occurred, and communication has failed
                Serial.print("Time out error,\t"); 
                break;
    default: 
                Serial.print("Unknown error,\t"); 
                break;
  }
 // DISPLAY DATA
  Serial.print(DHT.humidity,1); // print the humidity
  Serial.print(",\t");
  Serial.println(DHT.temperature,1); // print the temperature
  Serial.write(DHT.humidity,1);
  delay(5000); //Wait 5 seconds before accessing sensor again
} // End loop

void draw() {
    if (mySerial.available() > 0 ) {
         String value = mySerial.readString();
         if ( value != null ) {
              output.println( value );
         }
    }
}

void keyPressed() {
    output.flush();  // Writes the remaining data to the file
    output.close();  // Finishes the file
    exit();  // Stops the program
}

Sotto potete trovare la documentazione dalla quale mi sono ispirato
electrical engineering

Grazie a tutti.


Antonio

... ma salvare su un file DOVE ? Sul PC (... e quindi trasmettendoglieli via seriale) o su un modulo SD che colleghi ad Arduino ?

Guglielmo

NO NON LI PUOI UNIRE !! :o
Quei due pezzi di codice trasmettono (via seriale) da Arduino verso un PC dove gira Processing e il secondo codice è codice simil-Java tipico di Processing.
E al link c'e' anche scritto: "on the Processing side use a PrintWriter to write the data read from the serial port to a file"

gpb01:
... ma salvare su un file DOVE ? Sul PC (... e quindi trasmettendoglieli via seriale) o su un modulo SD che colleghi ad Arduino ?

Guglielmo

Ciao Gugliemo,
si, salvare i file sul PC.

Grazie

Ok, quindi da un lato hai Arduino che invia i dati trami le seriale con delle Serial.println(), dall'altra devi avere un'applicazione su PC che salva questi dati su un file.

Se NON ti serve una cosa sofisticata, ma ti basta di salvare le varie righe che trasmetti da Arduino, ti basta un emulatore di terminale capace di fare il salvataggio su disco, come CoolTerm, gratuito e disponibile per tutte le piattaforme :slight_smile:

Quindi, lato Arduino leggi i valori e quello che vuoi salvare lo stampi sulla seriale con Serial.println(), lato PC apri CoolTerm e lo metti in registrazione dei dati ricevuti su file.

Guglielmo