Magos do Arduino

Arduino EEPROM

Aprenda a utilizar a EEPROM do Arduino

Magos do Arduino

Arduino EEPROM

EEPROM significa Electrically Erasable Programmable Read-Only Memory.

É um tipo de memória não volátil (não perde os dados quando o Arduino é desligado).

Arduino EEPROM

Diferente da RAM, os valores permanecem salvos mesmo sem energia.

Todos os Arduinos possuem uma quantidade de memória EEPROM interna.

O Arduino Uno R3 por exemplo possui 1Kb enquanto que o Arduino Uno R4 possui 8Kb.

Essa memória é usada para armazenar dados permanentes, como configurações ou calibrações.

Cada posição da EEPROM pode armazenar um valor de 0 a 255 (1 byte).

Ela pode ser lida e escrita individualmente.

Ela também possui vida útil limitada, cerca de 100.000 ciclos de escrita por posição.

As leituras não desgastam a memória.

A EEPROM é organizada como uma tabela de bytes.

Cada célula da tabela corresponde a um endereço numérico (0, 1, 2, 3 … até o limite da memória).

Cada endereço armazena 1 byte (8 bits), ou seja, um número de 0 a 255.

Por exemplo, o Arduino Uno R3 possui 1024 bytes, portanto ele disponibiliza os endereços de 0 a 1023.

Cada endereço guarda um valor independente, e a leitura e escrita são feitas um endereço de cada vez.

Para guardar números maiores que 255 (ex.: int, float), o valor precisa ser quebrado em vários bytes e armazenado em endereços consecutivos.

O Arduino possui funções prontas (na biblioteca ) para facilitar este processo.

A biblioteca EEPROM.h permite ler e escrever dados na memória EEPROM do Arduino.

Ela facilita o armazenamento de dados que devem persistir mesmo sem energia.

Não precisa de instalação uma vez que ela é incluída automaticamente na Arduino IDE.

Principais funções de leitura e escrita dela:

  • EEPROM.read(endereço) -> Lê 1 byte da EEPROM no endereço especificado.
  • EEPROM.write(endereço, valor) -> Grava 1 byte na EEPROM no endereço especificado.
  • EEPROM.update(endereço, valor) -> Grava 1 byte, mas só se o valor for diferente do que já está armazenado.
  • EEPROM.put(endereço, dado) -> Grava qualquer tipo de dado (int, float, struct, string).
  • EEPROM.get(endereço, variável) -> Lê qualquer tipo de dado previamente gravado com put.

Como boas práticas, evite gravar repetidamente dentro do loop(), use EEPROM.update() sempre que possível e planeje o mapa de endereços se houver vários dados a serem armazenados.

Lembre-se do limite de ciclos de gravação (~100.000 por endereço).

Arduino EEPROM

Neste projeto você fará uso da EEPROM presente na placa Arduino.

Para a criação deste circuito serão necessários os seguintes componentes:

  • 1x Arduino UNO

Código fonte para o circuito do Arduino EEPROM

Uma vez criado o circuito, use os dois códigos fontes a seguir no Arduino IDE para fazer o upload dele na placa Arduino e verificar o funcionamento de ambos, onde cada um deles faz o uso de diferentes funções da biblioteca EEPROM.h e devem ser testados separadamente.

Código 1: teste da EEPROM para as funções de write, update e read.

/**
 * Código do curso Magos do Arduino para gravar dados simples na EEPROM Arduino. 
 * 
 * Código de teste de EEPROM para as funções de write, update e read.
 * Grava os valores de 1 a 10 a partir do endereço de memória 10, e depois 
 * imprime no monitor serial os valores gravados.
 *
 * (c) Copyright KazaleIT
 * @kazaleitoficial no YouTube
 **/

#include <EEPROM.h>

void setup() {
  Serial.begin(9600);
  while (!Serial) {
    ; // aguarda uma conexão serial
  }

  int endereco = 10; // endereço onde será gravado valores na EEPROM

  // grava os dados na EEPROM usando as funções write e update
  for (int i=0; i<10; i++) {
    // EEPROM.write(endereco, i + 1);
    EEPROM.update(endereco, i + 1);
    endereco++;
  }

  // lê os dados da EEPROM com o read e imprime os valores no monitor serial
  for (int j=10; j<20; j++) {
    int valor = EEPROM.read(j);
    Serial.print("Endereço: ");
    Serial.print(j);
    Serial.print(", Valor: ");
    Serial.println(valor);
  }
}

void loop() {
}

Código 2: teste da EEPROM para as funções de put e get.

/**
 * Código do curso Magos do Arduino para gravar dados complexos na EEPROM do Arduino. 
 * 
 * Código de teste de EEPROM para as funções de put e get.
 * Grava os valores complexos (struct), e depois imprime no monitor serial os valores gravados.
 *
 * (c) Copyright KazaleIT
 * @kazaleitoficial no YouTube
 **/

#include <EEPROM.h>

struct Sensor {
  float temperatura;
  int umidade;
  char titulo[20];
};

void setup() {
  Serial.begin(9600);
  while (!Serial) {
    ; // aguarda uma conexão serial
  }

  // gera dados a serem gravados na EEPROM
  Sensor dadosSensor = {
    26.5f,
    75,
    "Magos do Arduino"
  };

  // grava os dados na EEPROM
  EEPROM.put(0, dadosSensor);

  // realiza a leitura dos dados da EEPROM
  Sensor leituraDados = {};
  EEPROM.get(0, leituraDados);

  Serial.println("Valores obtidos da EEPROM: ");
  Serial.print("Temperatura: ");
  Serial.println(leituraDados.temperatura);
  Serial.print("Umidade: ");
  Serial.println(leituraDados.umidade);
  Serial.print("Título: ");
  Serial.println(leituraDados.titulo);
}

void loop() {
}