Někdy je potřeba logovat průběžně data a někam si je ukládat. Arduino má v sobě EEPROM paměť ale ta má velikost jen 1kB. Pokud potřebujeme ukládat více dat tak můžeme použít SD karu.
Modul micro SD karty vyjde na www.aliexpress.com na € 0.5 tedy asi na 14 Kč a samozřejmě doprava zdarma.
Zapojení pinů:
| modul SD karty | Arduino UNO |
|---|---|
| GND | GND |
| VCC | 5V |
| MISO | 12 |
| MOSI | 11 |
| SCK | 13 |
| CS | 4 |
Vyzkoušel jsem tři různé knihovny pro zápis na SD kartu připojenou na arduino UNO. V tuto chvíli mi šlo jen o zápis údajú. Všechny knihovny umí pracovat jak s FAT16 tak s FAT32. Napsal jsem malinký program který jen každou sekundu zapíše do souboru.
#include <SD.h>
void setup()
{
SD.begin(4);
}
void loop(void)
{
File dataFile = SD.open("zapis.txt", FILE_WRITE);
dataFile.println(millis());
dataFile.close();
delay(1000);
}
Práce s touto knihovnou je jednoduchá a je nejvíce rozšířená. Nemusí se instalovat jelikož je součástí arduino IDE.
Bohužel tato knihovna zabírá také nejvíce mista a to 12 526 bytů což je 38% paměti pro program v arduínu
a také 851 bytů což je 41% paměti pro proměnné.
#include <SdFat.h>
SdFat SD;
void setup()
{
SD.begin(4);
}
void loop(void)
{
File dataFile = SD.open("zapis2.txt", FILE_WRITE);
dataFile.println(millis());
dataFile.close();
delay(1000);
}
Tato knihovna je ke stažení zde https://github.com/greiman/SdFat. Program v tuto chvíli zabírá v paměti 9 974
bytů (30%) a proměnné 662 bytů (32%). V manuálu se ale dočtete, že jde zabrané místo zmenšit pomocí
konfiguračního souboru SdFatConfig.h, pokud tedy chceme ještě ušetřit nějaké místo pak stačí v tomto souboru
upravit řádky.
#define USE_LONG_FILE_NAMES 0
tímto si vypneme možnost používat dlouhé názvy souborů (což při logování dat z čidel nevadí)
#define ARDUINO_FILE_USES_STREAM 0
touto directivou vypneme přístup k datům přes streamy (což při logování také nevadí)
Po tomto zákroku jsem se dostali na na velikost 8 302 bytů (25%) a proměnné 654 bytů (31%).
#include "PetitFS.h"
#include "PetitSerial.h"
PetitSerial PS;
#define Serial PS
// The SD chip select pin is currently defined as 10
// in pffArduino.h. Edit pffArduino.h to change the CS pin.
FATFS fs;
void setup()
{
char buf[15];
pf_mount(&fs);
pf_open("PETIT.TXT");
UINT n;
for (byte i=0;i<20;i++)
{
itoa((int)millis(),buf,10);
strcat(buf,"\r\n");
pf_write(buf,strlen(buf),&n);
delay(200);
}
pf_write(0,0,&n);
}
void loop() {}
Tato knihovna je ke stažení zde https://github.com/greiman/PetitFS. Tato knihovna nedokáže vytvářet soubory a ani do nich
přidávat záznamy, dokáže jen přepisovat data v existujícím souboru. Soubor musí mít název ve formátu 8.3.
V praxi to znamená, že si musíte na SD kartě připravit soubor který naplníte například v poznámkovém bloku nějakými znaky
a tyto znaky pak přes arduino přepisujete. Ano je to opruz ale díky tomu program zabírá 5 090 bytů (15%) a
proměnné 82 bytů (4%).
Takže pokud máte dost místa tak můžete použít vestavěnou knihovnu SD. Ale pokud chcete připojit například TFT dotykový displej (který má někdy SD slot rovnou na sobě) a nějaká čidla, tak můžete narazit na problém s nedostatkem místa. Pak se bude hodit knihovna SdFat a v krajním případě i knihovna PetitFs.