ต้องแสดงผลค่าเฉลี่ย ลงใน sd card เพื่อเก็บค่า ต้องเสริมตรงไหนบ้างคะ บอร์ดwemos D1 คะ
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include "DHTesp.h"
#ifdef ESP32
#pragma message(THIS EXAMPLE IS FOR ESP8266 ONLY!)
#error Select ESP8266 board.
#endif
#include <RTClib.h>
DHTesp dht;
// SD Card & กำหนด CS = ขา D10
File myFile;
// ใช้ RTC 1307
RTC_DS1307 myRTC;
int Hr; // ตัวแปรเก็บค่าชั่วโมง
int Mn; // ตัวแปรเก็บค่านาที
int CS = D10;
int FAN = D5;
int PUME = D6;
float humidity;
float temperature;
void setup()
{
Wire.begin(D10);
Serial.begin(115200);
Serial.println();
Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)\tHeatIndex (C)\t(F)");
String thisBoard= ARDUINO_BOARD;
Serial.println(thisBoard);
pinMode(FAN, OUTPUT);
pinMode(PUME, OUTPUT);
dht.setup(D0, DHTesp::DHT22);
// เช็ค SD Card
if(!SD.begin(D10)){
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
// ลองเปิดไฟล์ ถ้าไม่มีอยู่ให้สร้างขึ้นใหม่
createNew:
myFile = SD.open("data.txt", FILE_WRITE);
myFile.close();
// เช็คการมีอยู่ของไฟล์ ถ้าไม่มีให้กลับไปสร้างไฟล์
if(SD.exists("data.txt")){
Serial.println("File exists.");
} else {
Serial.println("File doesn't exists.");
goto createNew;
}
}
void loop()
{// รับค่าเวลาเก็บในตัวแปร
DateTime nowTime = myRTC.now();
Hr = nowTime.hour();
Mn = nowTime.minute();
// ถ้าค่านาทีหาร 15 แล้วมีเศษ = 0 จะทำงาน
if(Mn % 15 == 0){
delay(dht.getMinimumSamplingPeriod());
float H = dht.getHumidity();
float T = dht.getTemperature();
// เปิดไฟล์ data.txt
myFile = SD.open("data.txt", FILE_WRITE);
if(myFile){
// บันทึกค่าชั่วโมง หากมีหลักเดียว ให้เติม 0 ไว้ด้านหน้า
if(Hr < 9){
myFile.print("0");
myFile.print(Hr);
myFile.print(":");
} else {
myFile.print(Hr);
myFile.print(":"); // : คั่นชั่วโมงและนาที
}
// บันทึกค่านาที หากมีหลักเดียว ให้เติม 0 ไว้ด้านหน้า
if(Mn < 9){
myFile.print("0");
myFile.print(Mn);
myFile.print("\t");
} else {
myFile.print(Mn);
myFile.print("\t"); // \t = เว้น 1 tab
}
myFile.print(dht.getStatusString());
myFile.print(" Humidity(%)\t ");
myFile.print(H, 1);
myFile.print(" Temperature(C*)\t ");
myFile.print(T, 1);
myFile.print(" Temperature(F*)\t ");
myFile.println(dht.toFahrenheit(T), 1);
delay(2000);
}
}
}