From dbdb59f0d069049a95efeb01e287dd51aca4f123 Mon Sep 17 00:00:00 2001 From: dakkar Date: Fri, 1 Apr 2022 10:59:46 +0100 Subject: start of data logging to sd card --- datalog.h | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 datalog.h (limited to 'datalog.h') diff --git a/datalog.h b/datalog.h new file mode 100644 index 0000000..39473e3 --- /dev/null +++ b/datalog.h @@ -0,0 +1,54 @@ +#pragma once + +#include +#include + +#include "data.h" + +/* + most of this comes from + https://github.com/Xinyuan-LilyGO/LilyGo-T5-Epaper-Series/blob/master/examples/GxEPD_SD_1.02_Example/SD_Example.ino + */ +class DataLog { +private: + SPIClass SDSPI; + File logfile; + char line[100]; + uint8_t linesSinceLastFlush; + uint8_t flushThreshold; +public: + DataLog(uint8_t ft=4) : SDSPI(VSPI), flushThreshold(ft) {} + + void start() { + SDSPI.begin(SDCARD_SCLK, SDCARD_MISO, SDCARD_MOSI); + SD.begin(SDCARD_CS, SDSPI); + logfile = SD.open("air-quality.csv",FILE_APPEND,true); + linesSinceLastFlush=0; + } + + void show(const SensorData *data) { + sprintf( + line, + //milli co2 temp humid pm1 pm2.5 pm4 pm10 battery + "% 5lu, % 5u, % 5.1f, % 5.1f, % 6.1f, % 6.1f, % 6.1f, % 6.1f, % 5.2f\n", + millis()/1000, + + data->co2, + data->temperature, + data->humidity, + + data->pm.mc_1p0, + max(0.0f,data->pm.mc_2p5 - data->pm.mc_1p0), + max(0.0f,data->pm.mc_4p0 - data->pm.mc_2p5), + max(0.0f,data->pm.mc_10p0 - data->pm.mc_4p0), + + data->batteryVoltage + ); + logfile.write((uint8_t *)line,65); + Serial.write(line); + if (++linesSinceLastFlush > flushThreshold) { + logfile.flush(); + linesSinceLastFlush=0; + } + } +}; -- cgit v1.2.3