ZenoModiff
Published © LGPL

Datalogger With Sd Card Support

I Will Show You How To Make A Data Logger With Esp8266, Sensors, NTP Client & Save The Values To The Sd Card

IntermediateFull instructions provided6,369
Datalogger With Sd Card Support

Things used in this project

Hardware components

NodeMCU ESP8266 Breakout Board
NodeMCU ESP8266 Breakout Board
×1
Flash Memory Card, SD Card
Flash Memory Card, SD Card
×1
Sd Card Module
×1
DHT22 Temperature Sensor
DHT22 Temperature Sensor
×1
MQ-135 Air Quality Sensor
×1
Jumper wires (generic)
Jumper wires (generic)
×1
Breadboard (generic)
Breadboard (generic)
×1
Arduino UNO
Arduino UNO
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Hot glue gun (generic)
Hot glue gun (generic)

Story

Read more

Schematics

Schematics

Wire As Per As The Schematics

Code

Arduino Code

C/C++
Upload The Code To Nodemcu (ESP8266)
/*feel free to contact
 * sreeramaj53@gmail.com
 * www.youtube.com/ZenoModiff
 * last updated - time 09:16 AM - date 25 may 2021
 Github Link :-- https://github.com/Zenomodiff/Nodemcu-Datalogger-With-DHT22-MQ135-NTP-Time-Saving-It-To-Sd-Card
 */

#include "SPI.h"
#include "SD.h"
#include "DHT.h"
#include <ESP8266WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>

#define DHTPIN D2   
#define DHTYPE DHT22

const int chipSelect = D8; 
const int mq135 = A0;
DHT dht(DHTPIN, DHTYPE);

const char *ssid     = "PASTE SSID NAME";
const char *password = "PASTE PASSWORD";

WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org");

#define SDREADLEDPIN D1 

String weekDays[7]={"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
String months[12]={"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};

float m = -0.6527; 
float b = 1.30;  
float R0 = 21.91;

void setup() {

  pinMode(mq135, INPUT);
  Serial.begin(115200);
  
  pinMode(SDREADLEDPIN, OUTPUT);
  digitalWrite(SDREADLEDPIN, LOW);

    while (!Serial) {
  }

  if (!SD.begin(chipSelect)) {
    Serial.println("Initialization failed!");
    while (1);
  }

  dht.begin();
  
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  timeClient.begin();
  timeClient.setTimeOffset(19786);
}

void loop() {

  timeClient.update();

  double mq135_value = analogRead(mq135);
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  unsigned long epochTime = timeClient.getEpochTime();
  String formattedTime = timeClient.getFormattedTime(); 
  int currentHour = timeClient.getHours();
  int currentMinute = timeClient.getMinutes();
  int currentSecond = timeClient.getSeconds();
  String weekDay = weekDays[timeClient.getDay()];    
  struct tm *ptm = gmtime ((time_t *)&epochTime); 
  int monthDay = ptm->tm_mday;
  int currentMonth = ptm->tm_mon+1;
  String currentMonthName = months[currentMonth-1];
  int currentYear = ptm->tm_year+1900;
  String currentDate = String(currentYear) + "-" + String(currentMonth) + "-" + String(monthDay);
  
  String fullstring = String(weekDay) + "," + String(currentMonthName) + "," + String(monthDay)+ "," + String(currentYear)   + "," + 
  String(currentHour) + "," + String(currentMinute) + "," + String(currentSecond) + "," + 
  String(t) + "," + String(h) + (",") + String(mq135_value);
  
  Serial.print("Full Data: ");
  Serial.println(fullstring);
  Serial.println("");
  delay(1000);
  
  File dataFile = SD.open("datalog.txt", FILE_WRITE);
  digitalWrite(SDREADLEDPIN, HIGH);
  if (dataFile) {
    dataFile.println(fullstring);
    dataFile.close();
    delay(1000);
    digitalWrite(SDREADLEDPIN, LOW);
  }
  
  else {
    Serial.println("error opening datalog.txt");
  }
  delay(2000);
}

Credits

ZenoModiff
17 projects • 10 followers
Contact

Comments

Please log in or sign up to comment.