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.