#include "DHT.h"
#include "FS.h"
#include "SD.h"
#include <SPI.h>
#define DHTTYPE DHT22 // DHT 11
struct DHTSensor{
//Digital (i2c) pin
uint8_t DHTPin;
DHT Dht;
float temmperature;
float humidity;
};
struct BrightnessSensor{
//Analog in pin
uint8_t Pin;
float brightness;
};
const uint8_t inputPins[12] = {36, 39, 34, 35, 32, 33, 25, 26, 27, 14, 12, 13};
const uint8_t dhtPins[3] = {36, 39, 34};
const uint8_t brightnessPins[5] = {35, 32, 33, 25, 26};
const uint8_t usedDHTSensors = 3; //Number of used DHT Sensors
const uint8_t usedBrightnessSensors = 5; //Number of used brightness sensors
DHTSensor dhtSensors[sizeof(dhtPins) / sizeof(dhtPins[0])];
BrightnessSensor brightnssSensor[(sizeof(brightnessPins) / sizeof(brightnessPins[0]))]
int DHTPin = 4;
DHT dht(DHTPin, DHTTYPE);
float Temperature;
float Humidity;
String formattedDate;
String dayStamp;
String timeStamp;
// Define CS pin for the SD card module
#define SD_CS 5
String dataMessage;
void setup() {
Serial.begin(115200);
pinMode(DHTPin, INPUT);
dht.begin();
// Initialize SD card
SD.begin(SD_CS);
if(!SD.begin(SD_CS)) {
Serial.println("Card Mount Failed");
return;
}
uint8_t cardType = SD.cardType();
if(cardType == CARD_NONE) {
Serial.println("No SD card attached");
return;
}
Serial.println("Initializing SD card...");
if (!SD.begin(SD_CS)) {
Serial.println("ERROR - SD card initialization failed!");
return; // init failed
}
File file = SD.open("/data.txt");
if(!file) {
Serial.println("File doens't exist");
Serial.println("Creating file...");
writeFile(SD, "/data.txt", "Date, Time, Temperature, Humidity \r\n");
}
else {
Serial.println("File already exists");
}
file.close();
if(usedDHTSensors > (sizeof(dhtPins) / sizeof(dhtPins[0]))){
usedDHTSensors = sizeof(dhtPins) / sizeof(dhtPins[0]);
};
if(usedBrightnessSensors > (sizeof(brightnessPins) / sizeof(brightnessPins[0]))){
usedBrightnessSensors = sizeof(brightnessPins) / sizeof(brightnessPins[0]);
};
for(int i = 0; i < usedDHTSensors; i++){
pinMode(dhtPins[i], INPUT);
DHT tempDht(dhtPins[i], DHTTYPE)
tempDht.begin();
dhtSensors[i] = {dhtPins[i], tempDht};
};
}
void loop() {
Read_TempHum();
//getTimeStamp();
logSDCard();
delay(5000); //Wait for 5 seconds before writing the next data
}
// Function to get temperature
void Read_TempHum()
{
Temperature = dht.readTemperature();
Humidity = dht.readHumidity();
Serial.print("Temperature = ");
Serial.println(Temperature);
Serial.print("Humidity = ");
Serial.println(Humidity);
}
// Function to get date and time from NTPClient
void getTimeStamp() {
dayStamp = "10";
timeStamp = "100";
}
// Write the sensor readings on the SD card
void logSDCard() {
dataMessage = String(dayStamp) + "," + String(timeStamp) + "," +
String(Temperature) + "," + String(Humidity)+ "\r\n";
Serial.print("Save data: ");
Serial.println(dataMessage);
appendFile(SD, "/data.txt", dataMessage.c_str());
}
// Write to the SD card (DON'T MODIFY THIS FUNCTION)
void writeFile(fs::FS &fs, const char * path, const char * message) {
Serial.printf("Writing file: %s\n", path);
File file = fs.open(path, FILE_WRITE);
if(!file) {
Serial.println("Failed to open file for writing");
return;
}
if(file.print(message)) {
Serial.println("File written");
} else {
Serial.println("Write failed");
}
file.close();
}
// Append data to the SD card (DON'T MODIFY THIS FUNCTION)
void appendFile(fs::FS &fs, const char * path, const char * message) {
Serial.printf("Appending to file: %s\n", path);
File file = fs.open(path, FILE_APPEND);
if(!file) {
Serial.println("Failed to open file for appending");
return;
}
if(file.print(message)) {
Serial.println("Message appended");
} else {
Serial.println("Append failed");
}
file.close();
}