Uso de SD a modo de base de datos temporal???

Hola,

De vez en cuando dedico un pensamiento a un proyecto de sistemas de medida que envían info de medidas de sensores y alarmas de funcionamiento, con marca de hora a una base de datos en servidor de base de datos y web.

Actualmente, las pruebas las hago con dos Arduinos Uno, con Shield Ethernet, con instalación gemela (cambio MAC e IP), conectados por cable a la LAN.

De momento, a intervalos fijos (actualmente 30 segundos para las pruebas, pero lo ampliaré), hacen un GET a una página php del servidor que se encarga de incorporar los datos a la base.

Si no hay conexión en un ciclo de transmisión (red KO, servidor que no responde, ...), actualmente ese dato se pierde. Quizá ahora no sea tan crítico, al llevar cable, pero levo idea de probar pasar alguno a Wifi, y ahí podría ser que si no llego a optimizar el funcionamiento del ESP8266, tenga periodos más frecuentes de no enlace.

Hasta ahora no he tocado las SD, pero he pensado que quizá podría ser el momento.

Mi idea inicial era, para no perder el dato, si hay error en la incorporación a base de datos, grabar el registro en fichero de tarjeta SD.

Algo he leído. Si juego con longitud de registro fija, podría, cuando la comunicación se reanude, leer en la SD los registros marcados como pendientes, intentar enviarlos, y modificar una marca si el intento ha sido exitoso. Así el registro sería obviado en siguientes ciclos, o la línea podría ser reutilizada.

Una línea podría ser algo como:

00 20160903130100 P01 S01 00012.00 enviado o no - fechahora - id de placa - id de sensor - valor

Es la idea a priori, no sé si el planteamiento puede ser correcto, si veis alternativas mejores, o si puedo encontrar algún problema duro.

Gracias.

pues si es un planteamiento correcto, de hecho no hace falta que todos los campos tengan los mismo caracteres, por que puedes (y asi te recomiendo) usar un delimitador como ; - o / caracteres que no formen parte de los datos

Entoces: cuando haya un problema de transmisión lo guarda en el archivo de la SD

como gestionar una base de datos es complicado en arduino yo lo que hago es crear un archivo para cada registro y que contenga una sola linea

entonces: cada vez que la conexión falle creas un archivo (SD.open("example.txt", FILE_WRITE);) y cada vez que funcione, miras a ver si hay algun archivo creado (recorrer todos los archivos de una determinada carpeta), y si lo hay lo lees y envias la peticion, si funciona lo borras (SD.remove("example.txt");) y si ha vuelto a fallar lo cierras sin borrarlo (myFile.close();)

puedes y

Gracias.
Creo que tiraré por ahí (opción de fichero por registro no enviado). Parece que será más sencillo de programar y rápido a la hora de trabajar.

Si viera que da problemas, porque se acumulen muchos ficheros o lo que sea, ya miraré de ir a la alternativa de las líneas tipo tabla de datos, reutilizables.

Actualmente la IP y la MAC las ajusto en la EEPROM, con la placa conectada al ordenador, para poder usar el mismo sketch en todas las placas.
También miraré de pasar esa configuración a un fichero en la SD, y así podría simplificar y flexibilizar el proceso de configuración.

No tendrás problemas aún que haya miles de archivos, el sistema fat 32 admite 268.435.437archivos... Ates se llena tu sd de 1 gb o dos que llegues a la limitación de archivos.

La mac si quieres usar el mismo programa en todos la puedes obtener de una eprom que vienen ya con una Mac única en el mundo preprogramada, por ejemplo las vende microchip (0.3€) y se conecta por ejemplo por i2c

GO_zalo:
La mac si quieres usar el mismo programa en todos la puedes obtener de una eprom que vienen ya con una Mac única en el mundo preprogramada, por ejemplo las vende microchip (0.3€) y se conecta por ejemplo por i2c

Lo que pasa es que si lo hago con la SD, veo la flexibilidad de poder crear un fichero de config general, que me sirva incluso para distintos tipos de conexión (Wifi -datos para conectar- o Ethernet), o nuevos parámetros que vaya viendo interesantes que puedan hacerse parametrizables.

A ver, que aún tengo cosas por definir, y sólo estoy hilvanando ideas.

Para manejarse con la SD como una base de datos Noter hice un trabajo excelente que esta por ahi en Documentación. Debes buscarlo y considéralo. Tal vez sirva a tu propósito o tal vez no sea lo que buscas.

Gestión e indexación de registros de una tabla SD por Noter

https://forum.arduino.cc/index.php?topic=287514.60

Encontrado. Gracias. No es para leerlo en un par de minutos, que el post tiene "chicha". Muy interesante. Aunque supera lo que pretendo, lo leeré con más detalle

Bueno, hace meses, mucha gente venía con proyectos similares al tuyo.. y yo había encontrado el tema de EBD Extentend Data Base para EEPROM, Serial EEPROM, Flash y SD. Entonces conversando con Serafín (noter) le sugerí si podía ya que el finalmente era quien daba las mejores respuestas del tema, encarar un buen tutorial y asi lo hizo. Creo que es un material excelente. Como bien has dicho, tal vez sea demasiado, pero es para tener en cuenta.