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); }