¿Alguna vez has querido guardar configuraciones o secuencias personalizadas en tu Arduino y que persistan aunque apagues el dispositivo? En este artículo te mostramos cómo hacerlo de forma sencilla, usando la memoria EEPROM interna y la comunicación serie. Además, te proporcionamos el código tanto para Arduino como para el programa de escritorio en C, multiplataforma Windows y Linux.
El código, al tratarse de nuevos ejemplos de el libro «De 0 a 100 con Arduino y ESP32» y se pueden encontrar en https://github.com/pinguytaz/Arduino-ESP32/tree/master/CuadernoTecnico/Almacenamiento/Config_Serial.
EEPROM (Electrically Erasable Programmable Read-Only Memory)
Es una memoria no volátil integrada en muchas placas Arduino que permite guardar datos que persisten tras reinicios o apagados.
Esquema del montaje
El siguiente esquema muestra la conexión de un botón y un LED RGB al Arduino UNO. El botón permite seleccionar entre el modo de configuración (grabación por serie) y el modo de ejecución normal (lectura desde EEPROM):

- Botón: Selecciona el modo de funcionamiento.
- LED RGB: Visualiza los valores almacenados en la EEPROM.
- Arduino UNO: Controla el proceso y gestiona la memoria.
Funcionamiento general:
Modo configuración:
Si el botón está pulsado al encender el Arduino, entra en modo de programación. Espera datos por el puerto serie y los graba en la EEPROM.
Modo normal:
Si el botón no está pulsado, lee la configuración almacenada en la EEPROM y ejecuta la secuencia de colores en el LED RGB. Cada vez que pulses el botón, avanza al siguiente estado.
Si el botón está pulsado al arrancar, llama a programarEEPROM(), que espera datos por serie y los graba en la EEPROM, una vez que termina se queda en un bucle infinito y tendremos que reiniciar nuestro Arduino, sin pulsar el botón para entrar en el modo normal de funcionamiento. El modo normal es muy sencillo va avanzando estados, los grabados en el modo configuración, cambiando los colores del LED-RGB.
El programa en C, se ha realizado para que pueda compilarse para Linux y Windows, el Makefile que se encuentra en el repositorio Github nos muestra dos objetivos según para el sistema que deseemos crearlo, es por ese motivo por el que el fuente tiene varias instrucciones de preprocesador. El código Windows esta pensado para compilarse desde Linux con una compilación cruzada gracias a MinGW.
El programa de escritorio (compatible con Linux y Windows) lee un archivo de configuración y envía los datos al Arduino por el puerto serie. Así puedes definir fácilmente la secuencia de colores en un fichero de texto.
Ejemplo de archivo en el que se configuramos los tres colores básicos.
255 0 0 Este es el color rojo
0 255 0 Este es el color verde
0 0 255 Este es el color azul
<R> <G> <B> <Comentario que no se enviara pero nos sirve de aclaración de color>
La estructura del programa es muy sencilla, lo primero es comprobar que nos pasan por parámetro el puerto serie por el que nos comunicaremos (/dev/ttyXXX en Linux y COMX en Windows) y el fichero de configuración, después leeremos el fichero y almacenaremos los datos en un array con estructura t_led, con los datos en memoria solo nos queda enviarlos por el puerto serie.
El protocolo es muy sencillo y facil de ampliar a nuestras necesidades, ya que consta de lineas terminadas en \n
<Número de lineas a enviar>\n // Le indicamos el numero de lineas a enviar
<R> <V> <A>\n // Datos de las lineas.
....
<R> <V> <A>\n
Consejos y consideraciones
- Cuidado con la vida útil de la EEPROM, tienen un número limitado de ciclos de escritura (normalmente 100,000). No la uses para almacenar datos que cambian constantemente.
- Sincronización: Añade pequeños retardos entre escrituras para evitar errores.
- Una mejora puede ser el añadir una suma de comprobación (checksum) para verificar la integridad.
Conclusión
Este método es ideal para actualizar configuraciones o guardar registros desde tu PC a un Arduino de forma sencilla y robusta, sin necesidad de hardware adicional. Puedes adaptar el ejemplo para guardar cualquier tipo de dato, desde parámetros de sensores hasta mensajes de usuario.
Déjanos un comentario o revisa el repositorio vinculado en el libro De 0 a 100 con Arduino y ESP32, donde encontraras muchos otros ejemplos.
.