Arduino può mantenere salvati i dati? Può fare una "store" dei dati in modo persistente? In questo articolo ho il piacere di rispondere a questa domanda.
Ma prima di cominciare, permettimi di presentarmi: sono Lorenzo Neri: chief education officer di Elettronica Open Source, mi occupo di realizzare contenuti educativi per aiutare persone come te a comprendere meglio questo mondo!
Arduino per quello che è, una scheda a micro-controllore, è dotata di memoria di lavoro, quindi una piccola quantità di RAM e un'altra che ti permette di eseguire il firmware che tu stesso scrivi, quindi la ROM. Precisiamo: la EEPROM.
Senza dubbio non si tratta di un computer dotato di hard disk con centinaia di GigaByte a disposizione, questo no: però puoi "sfruttare" la ROM disponibile all'interno del micro-controllore stesso.
La ROM di Arduino: come mantenere salvati i dati
Devo essere totalmente sincero con te: per "salvare i dati" è molto probabile che tu sottintenda informazioni strutturate e/o pesanti. Se nella tua testa c'è l'idea di poter salvare un report dati di un sensore della durata di un mese ti devo fermare. Una cosa del genere è pressoché impossibile: in questo caso ti suggerirei di trovare soluzioni alternative per trasferire questi dati e magari analizzarli...
La ROM messa a disposizione da Arduino, senza dubbio può salvare piccoli quantitativi di dati: ma parliamo di dati molto semplici, non di certo di file strutturati come l'esempio di prima. Devi fare un'altra considerazione: all'interno della ROM è presente il firmware stesso, perciò gran parte di questa memoria viene occupata dal programma che hai scritto.
Quindi, hai a tua disposizione la ROM di Arduino: come usarla?
EEPROM Arduino: una libreria omonima
Possiamo sfruttare una libreria "built-in" realizzata direttamente dalla casa madre: EEPROM, di cui ti lascio le referenze ufficiali qui. Grazie a questa libreria, come ti dicevo prima, possiamo salvare, scrivere, leggere, aggiornare ed eliminare informazioni semplici in maniera persistente, quindi un modo vero e proprio di eseguire una store dei dati all'interno di Arduino. Questa libreria ti permette di usare i 512 byte all'interno della ROM: non sono tanti, anzi. Sono pochi, ma dipende dall'uso che ne fai.
Alcuni modelli di Arduino però, permettono di avere a disposizione un maggior quantitativo di ROM. Come dicevo ad inizio articolo, mentirei se ti dicessi che puoi salvare file grandi e strutturati: ma dati semplici e piccoli puoi. Ogni singolo byte, proprio per la natura stessa di un byte, permette di mantenere salvato al suo interno un valore compreso fra 0 e 255 inclusi.
Ognuno di essi ha un suo indirizzo.
Ma penso sia meglio mostrarti direttamente un esempio in codice su come poter concretizzare tutto questo e mantenere salvati i dati in modo persistente:
#include <EEPROM.h>
int indirizzo = 0;
void setup() {
// qui puoi aggiungere il tuo codice.
}
void loop() {
// prendiamo un valore a caso di tipo intero,
compreso fra i valori consentiti
int val = random(0,256);
EEPROM.write(indirizzo, val);
// Incrementiamo l'indirizzo
così da poter scrivere nel byte successivo
indirizzo = indirizzo + 1;
// Se raggiungiamo il massimo indirizzo, riprendiamo dal primo.
if (indirizzo == EEPROM.length()) {
indirizzo = 0;
}
delay(100);
}
Ovviamente, abbiamo a disposizione tutte le altre operazioni: scoprile all'interno della documentazione ufficiale della libreria EEPROM!