Leer datos de Arduino + Ethernet Shield y guardarlos

3,963 views
Skip to first unread message

Mauro Antivero

unread,
Nov 18, 2014, 8:37:27 AM11/18/14
to embeb...@googlegroups.com
Estimados, estoy "jugando" un poco con una Arduino Leonardo + Ethernet
Shield. Lo que quiero lograr es poder leer distintas entradas
remotamente y guardarlas en, por ejemplo una archivo de texto plano o
una DB.

Entre los ejemplos está el de WebServer, que funciona perfectamente,
pero lo que hace es ligeramente distinto a lo que necesito. En este caso
la Arduino lee sus entradas y manda el código HTML junto con el valor
leído para conformar una muy sencilla (pero funcional) página web en
donde se muestran los valores. Lo que yo no sé es como hacer para leer
estos valores y poder guardarlos.

He estado buscando un rato por Internet y no he logrado encontrar un
ejemplo o info en si para hacer lo que yo quiero. Lo que encontré pero
aún no he mirado es una configuración de la Arduino como cliente de un
servidor remoto, al cual se conectaría y guardaría los datos en una DB.
Esto me puede llegar a servir pero creería que se podría hacer algo
similar con el WebServer, es decir, una aplicación (por ejemplo en PHP)
que corra remotamente y lea los datos de la Arduino, para luego
guardarlos donde uno desee.

Alguien ha hecho algo similar? Les agradecería mucho cualquier
información al respecto.

Saludos!

Mauro.

martin ribelotta

unread,
Nov 18, 2014, 9:20:52 AM11/18/14
to embeb...@googlegroups.com
Hola Mauro! Si tenes el shield de ethernet seguro tenes un enchufe para SD o microSD (no recuerdo ahora)
Si es así, podes usar la libreria FS de arduino para guardar los datos en un archivo de texto y mostrar esos valores por el webserver.

Sino, la otra que yo hice en su momento, (para algo que anda dando vueltas por la ciudad de Bahia blanca y que no puedo dar mas datos) es tener un server TCP en una PC y mandarle los datos TCP directo al programa (en Java, C, C++ o lo que sea) y ese si, los graba en una base de datos.

Algo mas avansado, seria un cliente para una base de datos MySQL, todo usando las librerias TCP de arduino, pero creo que eso ya es palabra mayor y requiere un laburo grande (ademas que es un suicidio dejar una server MySQL escuchando en un puerto en claro 



Mauro.

--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32+unsubscribe@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
--- Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32+unsubscribe@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/d/optout.

Mauro Antivero

unread,
Nov 18, 2014, 9:41:20 AM11/18/14
to embeb...@googlegroups.com
Gracias Martín (nótese que hoy estoy formal). Contesto entre líneas.

El 18/11/14 a las 11:20, martin ribelotta escibió:
Hola Mauro! Si tenes el shield de ethernet seguro tenes un enchufe para SD o microSD (no recuerdo ahora)
Si es así, podes usar la libreria FS de arduino para guardar los datos en un archivo de texto y mostrar esos valores por el webserver.
Si, pero en este caso no los quiero mostrar en una página, sino almacenarlos en una PC remota, para luego procesarlos y por ejemplo, graficarlos. Bah, estaría bueno poder armar una linda página como para ver los datos en el momento, pero por ahora no es mi objetivo.


Sino, la otra que yo hice en su momento, (para algo que anda dando vueltas por la ciudad de Bahia blanca y que no puedo dar mas datos) es tener un server TCP en una PC y mandarle los datos TCP directo al programa (en Java, C, C++ o lo que sea) y ese si, los graba en una base de datos.
Puede ser, pero mirá, justo cambiando la cadena de búsqueda en Google me topé con algunos resultados interesantes. Básicamente lo que hacen es mandarle los valores en la URL a un servidor que corra PHP por ejemplo y que este los procese luego a gusto. Algo así como:

http://yourphpserver/add_data.php?variable1=value1&variable2=value2&variable3=value3...

Donde "data.php" claro está es el script que hace "cosas" con los datos, como por ejemplo guardarlos en un archivo o en una DB.


Algo mas avansado, seria un cliente para una base de datos MySQL, todo usando las librerias TCP de arduino, pero creo que eso ya es palabra mayor y requiere un laburo grande (ademas que es un suicidio dejar una server MySQL escuchando en un puerto en claro
Lo de que es un suicidio no te creas, hay muchos servidores MySQL que por supuesto escuchan en un determinado puerto y los clientes se conectan a la DB remotamente, de hecho esto es muy normal. Eso si, por supuesto que tenés que tener un firewall bien configurado.

Voy a ir por la opción de un script en PHP al cual le mando los datos. Después les comento como me va.

Por cierto, estas son algunas páginas interesantes que acabo de encontrar:

http://www.tweaking4all.com/hardware/arduino/arduino-ethernet-data-push/
http://www.instructables.com/id/PART-1-Send-Arduino-data-to-the-Web-PHP-MySQL-D3js/?lang=es
http://www.cyberspice.org.uk/blog/2009/10/29/boarduino-vivarium-temperature-monitor/

En cuanto pueda tener algo andando si les interesa comento.

Saludos y gracias!

Mauro.

El 18 de noviembre de 2014, 10:37, Mauro Antivero <mauro.a...@gmail.com> escribió:
Estimados, estoy "jugando" un poco con una Arduino Leonardo + Ethernet Shield. Lo que quiero lograr es poder leer distintas entradas remotamente y guardarlas en, por ejemplo una archivo de texto plano o una DB.

Entre los ejemplos está el de WebServer, que funciona perfectamente, pero lo que hace es ligeramente distinto a lo que necesito. En este caso la Arduino lee sus entradas y manda el código HTML junto con el valor leído para conformar una muy sencilla (pero funcional) página web en donde se muestran los valores. Lo que yo no sé es como hacer para leer estos valores y poder guardarlos.

He estado buscando un rato por Internet y no he logrado encontrar un ejemplo o info en si para hacer lo que yo quiero. Lo que encontré pero aún no he mirado es una configuración de la Arduino como cliente de un servidor remoto, al cual se conectaría y guardaría los datos en una DB. Esto me puede llegar a servir pero creería que se podría hacer algo similar con el WebServer, es decir, una aplicación (por ejemplo en PHP) que corra remotamente y lea los datos de la Arduino, para luego guardarlos donde uno desee.

Alguien ha hecho algo similar? Les agradecería mucho cualquier información al respecto.

Saludos!


Mauro.

--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es

--- Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.

Para obtener más opciones, visita https://groups.google.com/d/optout.

--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es

---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Sergio Marin

unread,
Nov 18, 2014, 10:27:17 AM11/18/14
to embeb...@googlegroups.com
Hola Mauro,

Creo que para eso te sería muy util, usar una plataforma como www.ubidots.com, creo que en la sección de devices http://ubidots.com/docs/devices/index.html, puedes encontrar la libreria para el ardunio ethernet.

Saludos

2014-11-18 9:20 GMT-05:00 martin ribelotta <martinr...@gmail.com>:
Hola Mauro! Si tenes el shield de ethernet seguro tenes un enchufe para SD o microSD (no recuerdo ahora)
Si es así, podes usar la libreria FS de arduino para guardar los datos en un archivo de texto y mostrar esos valores por el webserver.

Sino, la otra que yo hice en su momento, (para algo que anda dando vueltas por la ciudad de Bahia blanca y que no puedo dar mas datos) es tener un server TCP en una PC y mandarle los datos TCP directo al programa (en Java, C, C++ o lo que sea) y ese si, los graba en una base de datos.

Algo mas avansado, seria un cliente para una base de datos MySQL, todo usando las librerias TCP de arduino, pero creo que eso ya es palabra mayor y requiere un laburo grande (ademas que es un suicidio dejar una server MySQL escuchando en un puerto en claro 
El 18 de noviembre de 2014, 10:37, Mauro Antivero <mauro.a...@gmail.com> escribió:
Estimados, estoy "jugando" un poco con una Arduino Leonardo + Ethernet Shield. Lo que quiero lograr es poder leer distintas entradas remotamente y guardarlas en, por ejemplo una archivo de texto plano o una DB.

Entre los ejemplos está el de WebServer, que funciona perfectamente, pero lo que hace es ligeramente distinto a lo que necesito. En este caso la Arduino lee sus entradas y manda el código HTML junto con el valor leído para conformar una muy sencilla (pero funcional) página web en donde se muestran los valores. Lo que yo no sé es como hacer para leer estos valores y poder guardarlos.

He estado buscando un rato por Internet y no he logrado encontrar un ejemplo o info en si para hacer lo que yo quiero. Lo que encontré pero aún no he mirado es una configuración de la Arduino como cliente de un servidor remoto, al cual se conectaría y guardaría los datos en una DB. Esto me puede llegar a servir pero creería que se podría hacer algo similar con el WebServer, es decir, una aplicación (por ejemplo en PHP) que corra remotamente y lea los datos de la Arduino, para luego guardarlos donde uno desee.

Alguien ha hecho algo similar? Les agradecería mucho cualquier información al respecto.

Saludos!


Mauro.

--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32+unsubscribe@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es

--- Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32+unsubscribe@googlegroups.com.

Para obtener más opciones, visita https://groups.google.com/d/optout.

--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
Sergio A. Marin
Director Ejecutivo
Netux - Tecnologia Aplicada
PBX: (574) + 4480368
Móvil: (57) 3164782725
Nota: Mi horario laboral es de 8:00 am a 12:00 m y de 2:00 pm a 5:30 pm
__________________________

El contenido de este mensaje y de los archivos adjuntos están dirigidos exclusivamente a sus destinatarios y puede contener información privilegiada o confidencial. Si usted no es el destinatario real, por favor informe de ello al remitente y elimine el mensaje de inmediato, de tal manera que no pueda acceder a él de nuevo. Está prohibida su retención, grabación, utilización o divulgación con cualquier propósito. Este mensaje ha sido verificado con software antivirus; sin embargo, el remitente no se hace responsable en caso de que en éste o en los archivos adjuntos haya presencia de algún virus que pueda generar daños en los equipos o programas del destinatario. 

This e-mail and its attachments may contain privileged or confidential information and are addressed exclusively to their intended recipients. If you are not the intended recipient, please notify the sender immediately and delete this e-mail and its attachments from your system. The storage, recording, use or disclosure of this e-mail and its attachments by anyone other than the intended recipient is strictly prohibited. This message has been verified using antivirus software; however, the sender is not responsible for any damage to hardware or software resulting from the presence of any virus.

Juan Sebastian Morant

unread,
Nov 19, 2014, 8:55:36 AM11/19/14
to embeb...@googlegroups.com
Hola a todos!

Con seguridad Ubidots es una muy buena solución, te tardas cinco minutos en crear una cuenta y allí ya tienes almacenamiento en la nube, visualización gráfica y acceso por medio de una API muy amigable.
En la página de Ubidots todavía no está desplegado el código de ejemplo específico para utilizar el Ethernet Shield, pero un colega y yo desarrollamos una aplicación en la que se lee una entrada análoga y se guarda el registro tanto en Ubidots como en un archivo local en la memoria SD (por si en algún momento no hay acceso a internet). 

Adjunto el código. Para iniciar, pon la biblioteca "TimerOne" adjunta, en el path de las bibliotecas de Arduino, antes de abrir el Arduino IDE. El path por defecto usualmente es:
C:\Users\"User Name"\Documents\Arduino

Al inicio del código puedes seleccionar el factor de calibración para cualquier sensor que uses (temperatura, humedad, fotoresistencia, etc), la zona horaria en la que estás ubicado y el tiempo entre posts. También puedes deshabilitar el almacenamiento local o el almacenamiento en la nube. El sistema se conecta al servidor de Ubidots para obtener la hora actual y entonces, escribe el timestamp (de acuerdo a la zona horaria que seleccionaste) para cada muestra en un archivo .txt en la SD. Si el sistema no tiene acceso a internet desde el comienzo, inicia el almacenamiento local con la siguiente fecha y hora de referencia:
January the 1st - 2014, 00:00:00 GMT 0. En ese caso, tendrías que realizar el ajuste durante el análisis de datos en Excel.


Ten presente que éste es el primer release del código. Por favor hazme saber si tienes alguna dificultad para ayudarte en lo que pueda, y si encuentras algún "bug" que puedas mejorar estaría muy agradecido si me lo puedes compartir.

Saludos,


On Tuesday, November 18, 2014 10:27:17 AM UTC-5, Sergio Marin wrote:
Hola Mauro,

Creo que para eso te sería muy util, usar una plataforma como www.ubidots.com, creo que en la sección de devices http://ubidots.com/docs/devices/index.html, puedes encontrar la libreria para el ardunio ethernet.

Saludos

2014-11-18 9:20 GMT-05:00 martin ribelotta <martinr...@gmail.com>:
Hola Mauro! Si tenes el shield de ethernet seguro tenes un enchufe para SD o microSD (no recuerdo ahora)
Si es así, podes usar la libreria FS de arduino para guardar los datos en un archivo de texto y mostrar esos valores por el webserver.

Sino, la otra que yo hice en su momento, (para algo que anda dando vueltas por la ciudad de Bahia blanca y que no puedo dar mas datos) es tener un server TCP en una PC y mandarle los datos TCP directo al programa (en Java, C, C++ o lo que sea) y ese si, los graba en una base de datos.

Algo mas avansado, seria un cliente para una base de datos MySQL, todo usando las librerias TCP de arduino, pero creo que eso ya es palabra mayor y requiere un laburo grande (ademas que es un suicidio dejar una server MySQL escuchando en un puerto en claro 
El 18 de noviembre de 2014, 10:37, Mauro Antivero <mauro.a...@gmail.com> escribió:
Estimados, estoy "jugando" un poco con una Arduino Leonardo + Ethernet Shield. Lo que quiero lograr es poder leer distintas entradas remotamente y guardarlas en, por ejemplo una archivo de texto plano o una DB.

Entre los ejemplos está el de WebServer, que funciona perfectamente, pero lo que hace es ligeramente distinto a lo que necesito. En este caso la Arduino lee sus entradas y manda el código HTML junto con el valor leído para conformar una muy sencilla (pero funcional) página web en donde se muestran los valores. Lo que yo no sé es como hacer para leer estos valores y poder guardarlos.

He estado buscando un rato por Internet y no he logrado encontrar un ejemplo o info en si para hacer lo que yo quiero. Lo que encontré pero aún no he mirado es una configuración de la Arduino como cliente de un servidor remoto, al cual se conectaría y guardaría los datos en una DB. Esto me puede llegar a servir pero creería que se podría hacer algo similar con el WebServer, es decir, una aplicación (por ejemplo en PHP) que corra remotamente y lea los datos de la Arduino, para luego guardarlos donde uno desee.

Alguien ha hecho algo similar? Les agradecería mucho cualquier información al respecto.

Saludos!


Mauro.

--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
--- Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/d/optout.

--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
TimerOne.zip
ethernet_ubidots.zip

elider ordaz

unread,
Dec 3, 2015, 10:57:29 AM12/3/15
to Embebidos32
Hola buenos días me podrías apoyar con la conexión de un sensor reflectivo en un arduino el sensor es industrial. la cuestión es que no me envía ningún dato al arduino.

Franco Yáñez

unread,
Sep 22, 2016, 3:50:22 PM9/22/16
to Embebidos32
Mauro ! ... en qué quedó el desarrollo de su proyecto ? , ando en busca de algo similar. He realizado un proyecto en donde tengo ocho sensores de temperatura, he visto por la web la posibilidad de montar un web server en arduino, y me aventuré en ello. Ya puedo visualizar las lecturas mediante una ip asignada a arduino. Pero como bien dices, es vagamente lo que ando buscando. Me gustaría poder almacenar en un PC de forma remota las lecturas que van saliendo en la pagina web montada en arduino. Tienes info que sea de ayuda ? ... de antemano muchas Gracias :D

Saludos cordiales. 

Marcelo Miguel López

unread,
Sep 22, 2016, 4:15:08 PM9/22/16
to embeb...@googlegroups.com
Buenas Tarde Franco 

Te recomiendo encares con un cliente/ servidor usando UDP para mandar los datos desde el arduino (cliente) a la PC (servidor) y desde la aplicación o servicio en la PC puedes persistir los datos en un motor de base de datos.
Este es el ejemplo de un cliente para el arduino https://www.arduino.cc/en/Tutorial/UDPSendReceiveString y te paso un ejemplo de un cliente servidor en C# que es lo que uso http://www.codeproject.com/Articles/552497/Scalable-UDP-Client-Server

Espero que la información te resulte de utilidad.

Saludos



El 22 de septiembre de 2016, 12:09, Franco Yáñez <franco....@gmail.com> escribió:
Mauro ! ... en qué quedó el desarrollo de su proyecto ? , ando en busca de algo similar. He realizado un proyecto en donde tengo ocho sensores de temperatura, he visto por la web la posibilidad de montar un web server en arduino, y me aventuré en ello. Ya puedo visualizar las lecturas mediante una ip asignada a arduino. Pero como bien dices, es vagamente lo que ando buscando. Me gustaría poder almacenar en un PC de forma remota las lecturas que van saliendo en la pagina web montada en arduino. Tienes info que sea de ayuda ? ... de antemano muchas Gracias :D

Saludos cordiales. 

--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32+unsubscribe@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es

---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32+unsubscribe@googlegroups.com.

Carlos Pantelides

unread,
Sep 22, 2016, 6:58:42 PM9/22/16
to Embebidos32
Les comparto algunas reflexiones de seguridad relativas a la conversación.


Entiendo que hay dos arquitecturas planteadas (se debería ver bien con tipografía de tipo monospace como courier):


+----------------------------------+
|       arduino + shields          |
+----------------------------------+
|sensor -> db local -> servidor web| -- http -> cliente web
+----------------------------------+



Reemplazar http por https
   Esto sirve para que al conectarte al arduino sepas que es realmente el arduino y no otro dispositivo.


+-------------------+           +----------------------------------+
|arduino + shields  |           |             pc                   |
+-------------------+           +----------------------------------+
|sensor->cliente web|-http/udp->|servidor web/udp->db->servidor web|-http->cliente web
+-------------------+           +----------------------------------+




Reemplazar http por https entre el arduino y la pc

   Para evitar que el arduino se conecte a un servidor con no sea el que querés
   Para evitar que el tráfico pueda ser visto o modificado

Con UDP
    encriptaría el paquete, de este modo se soluciona la autenticación del cliente y
    del servidor, sin olvidar un número de secuencia para que no pueda haber replay
    de paquetes.

Autenticar el arduino frente a la PC
   Si no hay https, no tiene mucho sentido

Validar los datos enviados en el servidor web antes de almacenar en la DB

   Tenés que evitar XSS

      esto es, código javascript inyectado en la DB desde otro dispositivo que luego
      se ejecuta en el cliente web. Dado que sólo estás enviando números, se evita
      validando que los valores recibidos correspondan a un número, ya sea binario o
      si está en ascii, 0 a 9, signo, coma. ojo con comillas, "%", "<" y null



   Tenés que evitar SQLi
      esto es, datos ingeniosamente malformados pasado a la db para generar
      operaciones no esperadas. Se evita con "prepared statements".


   Ojo con los buffer overflows

Usa POST en lugar de GET entre el arduino y la pc, pues es lo correcto semánticamente y en general es buena práctica pues la url (el GET) queda en proxys y logs y POST no.


Quizas no puedas reemplazar http por https cuando está el arduino involucrado por performance, aunque supongo que no tenés que leer



¡Eh, amigo! ¿por qué tendría que preocuparme por todo esto si lo voy a tener en una red interna? Por que puede haber un ataque interno o mañana tu red interna se conecta a internet y ni te vas a acordar que tenés esto corriendo. O tenés un AP wifi en esa red y se te cuela alguien. Y fundamentalmente para comprender y practicar, pues es el futuro.


Si alguien necesita que me explaye en cualquiera de los conceptos vertidos, me lo pide.

Charli

Reply all
Reply to author
Forward
0 new messages