Arduino:
Praca z plikami CSV

Jak to zrobić:

Arduino nie posiada wbudowanej biblioteki specjalnie do obsługi plików CSV, ale możesz użyć bibliotek SD i SPI do dostępu do plików na karcie SD, a następnie przetwarzać lub generować dane CSV za pomocą podstawowych technik manipulacji ciągami znaków. Kiedy zajmujesz się bardziej złożoną manipulacją plikami CSV, biblioteka firm trzecich ArduinoCSV może być wykorzystana do łatwiejszego parsowania i zapisywania.

Odczytywanie danych CSV z karty SD:

#include <SPI.h>
#include <SD.h>

void setup() {
  Serial.begin(9600);
  if (!SD.begin(4)) {
    Serial.println("Inicjalizacja nie powiodła się!");
    return;
  }
  File dataFile = SD.open("data.csv");
  if (dataFile) {
    while (dataFile.available()) {
      String dataLine = dataFile.readStringUntil('\n');
      Serial.println(dataLine); // Wyświetla linię CSV
    }
    dataFile.close();
  } else {
    Serial.println("Błąd otwierania data.csv");
  }
}

void loop() {
  // Nie używane w tym przykładzie
}

Przykładowe wyjście:

SensorID, Timestamp, Value
1, 1597840923, 23.5
2, 1597840987, 22.4

Zapisywanie danych CSV na karcie SD:

#include <SPI.h>
#include <SD.h>

void setup() {
  Serial.begin(9600);
  if (!SD.begin(4)) {
    Serial.println("Inicjalizacja nie powiodła się!");
    return;
  }
  File dataFile = SD.open("output.csv", FILE_WRITE);
  if (dataFile) {
    dataFile.println("SensorID, Timestamp, Value"); // Nagłówek CSV
    dataFile.println("1, 1597840923, 23.5"); // Przykładowy wiersz danych
    dataFile.close();
    Serial.println("Dane zapisane");
  } else {
    Serial.println("Błąd otwierania output.csv");
  }
}

void loop() {
  // Nie używane w tym przykładzie
}

Przykładowe wyjście:

Dane zapisane

Użycie ArduinoCSV do parsowania: Jeśli zajmujesz się skomplikowanymi plikami CSV, biblioteka ArduinoCSV może znacznie uproszczyć prace związane z parsowaniem. Ten przykład zakłada, że zainstalowałeś już bibliotekę ArduinoCSV.

#include <SPI.h>
#include <SD.h>
#include <ArduinoCSV.h>

void setup() {
  Serial.begin(9600);
  if (!SD.begin(4)) {
    Serial.println("Inicjalizacja nie powiodła się!");
    return;
  }
  File dataFile = SD.open("data.csv");
  if (dataFile) {
    CSVParser parser;
    while (dataFile.available()) {
      String dataLine = dataFile.readStringUntil('\n');
      if (parser.parseLine(dataLine)) {
        for (int i = 0; i < parser.count(); i++) {
          Serial.print(parser.getField(i)); // Wyświetl każde pole
          if (i < parser.count() - 1) {
            Serial.print(", ");
          }
        }
        Serial.println();
      }
    }
    dataFile.close();
  } else {
    Serial.println("Błąd otwierania data.csv");
  }
}

void loop() {
  // Nie używane w tym przykładzie
}

Przykładowe wyjście:

SensorID,  Timestamp,  Value
1,  1597840923,  23.5
2,  1597840987,  22.4

W tych przykładach, poprzez odczytywanie z plików CSV i zapisywanie do nich na karcie SD, projekty Arduino mogą łatwo zbierać dane, przechowywać ustawienia konfiguracyjne lub wymieniać dane z innymi aplikacjami w uniwersalnie dostępnym formacie.