Sensorwerte in eine CSV- Datei auf einer SD-Karte schreiben
Als Beispiel werden hier Sensorwerte von einem MPB180 Sensor in eine CSV- Datei geschrieben. Der I2C Bus wurde dabei auf die Pins 4 und 0 gelegt, da das LoLin32 Lite ansonsten nicht den SPI Bus parallel benutzen kann. Sofern die Datei towilab.csv noch nicht existiert, wird sie automatisch angelegt.
In der Loop Funktion wird der Sensor ausgelesen und die entsprechenden Werte in die CSV Datei geschrieben. Dabei wird die Datei immer geöffnet und anschließend geschlossen. Durch die Pause wird verhindert das die SD Karte zu schnell vollgeschrieben wird.
/* owe sensor als csv auf sd-karte schreiben 10.2022
pinbelegung für wemos lolin 32 lite
sclk 18
miso 19
mosi 23
cs 5
i2c_sda 0
i2c_scl 4
*/
#include <SPI.h> //einbinden SPI bibliothek
#include <SD.h> //einbinden SD-karten bibliothek
#include "Wire.h" //einbinden I2C bibliothek
#include <Adafruit_BMP085.h>
#define i2c_sda 0 //hier den sda port definieren
#define i2c_scl 4 //hier den scl port definieren
Adafruit_BMP085 bmp; //objekt erstellen
File csv_datei; //objkt csv_datei erzeugen
void setup() {
Serial.begin(115200); //serielle Schnittstelle erzeugen
while (!Serial) {;} //auf die serielle schnittstelle warten
Wire.begin(i2c_sda, i2c_scl); //i2c Schnittstelle starten
if (!bmp.begin()) {
Serial.println("konnnte den sensor nicht finden");
while (1) {}
}
Serial.println("sensor ok");
if (!SD.begin()) {
Serial.println("keine sd karte gefunden");
while (1);
}
Serial.println("sd karte ok");
}
void loop() {
float temp = bmp.readTemperature(); //lesen der temperatur
float druck = bmp.readPressure(); //lesen des druckes
Serial.print("Temperatur = ");
Serial.print(temp);
Serial.println(" *C");
Serial.print("Druck = ");
Serial.print(druck);
Serial.println(" Pa");
Serial.println();
csv_datei = SD.open("/towilab.csv", FILE_APPEND); //datei oeffnen und werte anhaengen
if (csv_datei) { //ist die datei offen
csv_datei.print(temp); //schreiben der sensorwerte
csv_datei.print(",");
csv_datei.println(druck);
csv_datei.close(); //datei schließen
Serial.println("werte geschrieben");
}
else {
Serial.println("konnte die datei nicht finden");
}
delay(5000);
}