Para que, porque e como utilizar memorias EEPROM com seu Arduino

Memórias EEPROM são conhecidas como memórias não volátil, que não se perdem quando não há mais energia, ou seja, mesmo desligando seu aparelho as informações contidas na memória não se perdem.

Estas são semelhantes as memória FLASH, em seu propósito, porem memórias EEPROM são ditas de escrita bit-a-bit, quanto as FLASHs são de bloco-a-bloco.

Estas memórias são destinadas ao armazenamento de dados nem sempre permanentes, mas de pouca modificação, como armazenamento de configurações, constantes e algumas outras informações, como senhas e pré-definições. Isso por que a gravação da memória EEPROM é limitada, mesmo que seja bastante, ainda é limitada. Um loop mal feito poderia facilmente acabar com uma EEPROM.

Nos Arduinos mais comuns, esta memória pode variar entre 1KB até 4KB, porem alguns modelos ja estão saindo com mais de 16KB, e pode ser escrita até 100,000 vezes.

Se sua memória é curta ou já foi gravada até seu limite, o Arduino pode ser facilmente expandido para suportar mais chips de memória EEPROM, como é o caso dos chips da serie eeprom-24cxx, que pode chegar à 64KB com o custo de R$ 1,50.
Para utilizar memórias externas, podemos usar alguma lib que já nos traz as facilidades do chip escolhido, ou podemos utilizar a lib Wire.h, já que toda comunicação é feita por I2C, como pode ser visto nas referencias do Arduino aqui.

Um outro ponto importante à se debater é a questão da segurança. Como dito acima uma EEPROM trabalha bit-a-bit, e pode ser lida bit-a -bit, afim de se obter os dados salvos na memória. Sempre que formos trabalhar pensando na segurança, é possível trabalhar com uma pequena criptografia, mesmo que seja primitiva, para esconder alguma coisa importante que ali esteja.

A forma mais simples de utilizar a EEPROM do Arduino, é utilizar a própria lib da IDE, EEPROM.h. Essa lib possui 2 métodos da classe EEPROM, read() e write().

Para gravar, basta passar no primeiro parâmetro, o endereço da memória onde deseja salvar, e no segundo parâmetro o valor em byte (0 à 255). Para ler, basta passar o endereço, que receberá o valor.