#include "FS.h"
#include "SD.h"
#include <SPI.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
uint64_t uS_TO_S_FACTOR = 1000000;
uint64_t TIME_TO_SLEEP = 600;
const char* ssid = "나우커피2G";
const char* password = "dee01dc173";
#define SD_CS 3
RTC_DATA_ATTR int readingID = 0;
String dataMessage;
#define ONE_WIRE_BUS 21
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
float temperature;
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP);
String formattedDate;
String dayStamp;
String timesStamp;
void setup() {
Serial.begin(115200);
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected.");
timeClient.begin();
timeClient.setTimeOffset(3600);
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;
}
File file = SD.open("/data.txt");
if(!file) {
Serial.println("File doesn't exist");
Serial.println("Creating file...");
writeFile(SD, "/data.txt", "Reading ID, Data, Hour, Temperature \r\n");
}
else {
Serial.println("File already exists");
}
file.close();
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
sensors.begin();
getReadings();
getTimeStamp();
logSDCard();
readingID++;
Serial.println("DONE! Going to sleep now.");
esp_deep_sleep_start();
}
void loop() {
}
void getReadings(){
sensors.requestTemperatures();
temperature = sensors.getTempCByIndex(0);
Serial.print("Temperature : ");
Serial.println(temperature);
}
void getTimeStamp() {
while(!timeClient.update()) {
timeClient.forceUpdate();
}
formattedDate = timeClient.getFormattedDate();
Serial.println(formattedDate);
int splitT = formattedData.indexOf("T");
dayStamp = formattedData.substring(0, splitT);
Serial.println(dayStamp);
timeStamp = formattedData.substring(splitT+1, formattedDate.length()-1);
Serial.println(timeStamp);
}
void logSDCard() {
dataMessage = String(readingID) + "," + String(dayStamp) + "," + String(timeStamp) + "," +
String(temperature) + "\r\n";
Serial.print("Save data: ");
Serial.println(dataMessage);
appendFile(SD, "/data.txt", dataMessage.c_str());
}
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();
}
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();
}