#include "DHT.h"
#include <SD.h>
#define DHTPIN 2
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
#define CS_PIN 10
File root;
void setup() {
Serial.begin(115200);
Serial.println("Initializing DHT sensor...");
dht.begin();
Serial.println("Initialization done.");
// Initialize SD Card
Serial.print("Initializing SD card... ");
if (!SD.begin(CS_PIN)) {
Serial.println("Card initialization failed!");
while (true);
}
Serial.println("initialization done.");
Serial.println("Files in the card:");
root = SD.open("/");
printDirectory(root, 0);
Serial.println("");
}
void loop() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Check if any reads failed and exit early (to try again).
if (isnan(temperature) || isnan(humidity)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
Serial.print(F("Humidity: "));
Serial.print(humidity);
Serial.print(F("% Temperature: "));
Serial.print(temperature);
Serial.println(F("°C "));
// write the temp and humidity to the sd card
write_to_sd(temperature, humidity);
// now read data from the sd card and print to terminal
read_from_sd();
// Wait a few seconds between measurements.
delay(1000);
}
void write_to_sd(float temperature, float humidity) {
// Example of writing file on the card
File textFile = SD.open("sensor.txt", FILE_WRITE);
if (textFile) {
textFile.print(F("Humidity: "));
textFile.print(humidity);
textFile.print(F("% Temperature: "));
textFile.print(temperature);
textFile.println(F("°C "));
textFile.println("file writing test complete");
textFile.close();
} else {
Serial.println("error opening file to write!");
}
}
void read_from_sd() {
// Example of reading file from the card:
File textFile = SD.open("sensor.txt");
if (textFile) {
Serial.print("sensor.txt - reading back: ");
while (textFile.available()) {
Serial.write(textFile.read());
}
Serial.println("File read complete.");
textFile.close();
} else {
Serial.println("error opening sensor.txt!");
}
}
void printDirectory(File dir, int numTabs) {
while (true) {
File entry = dir.openNextFile();
if (! entry) {
// no more files
break;
}
for (uint8_t i = 0; i < numTabs; i++) {
Serial.print('\t');
}
Serial.print(entry.name());
if (entry.isDirectory()) {
Serial.println("/");
printDirectory(entry, numTabs + 1);
} else {
// files have sizes, directories do not
Serial.print("\t\t");
Serial.println(entry.size(), DEC);
}
entry.close();
}
}