Capturando datos en MySQL usando Apache, php, Arduino + Ethernet Shield

Este artículo pretende ser un ejemplo de como utilizar la tarjeta Ethernet Shield para Arduino.

Como la mejor forma de aprender es haciendo las cosas, abordaremos un ejemplo que captura datos, en este caso temperatura y los envía a un servidor conectado a Internet (pero puede ser un servidor local si se desea) el cual tomará esos datos y los guardará en una base de datos.

Materiales:

  • Arduino Uno Release 3
  • Ehternet Shield
  • Sensor LM35
  • Servidor web Apache
  • Lenguaje de programación php
  • Servidor de base de datos MySQL

1. Arduino y Ethernet Shield

En la primera parte de este proyecto nos concentraremos en hacer funcionar el Arduino con la Ethernet Shield, esta shield como su nombre lo dice es una interfaz ethernet que permite conectar el Arduino a nuestra red local o internet.

Antes de ensamblar la shield con el Arduino se debe anotar la dirección MAC que la mayoría de las veces está en un papel adherido a la parte inferior de la shield, esta dirección MAC se usará después para programar la shield.

arduino_ethernet_shield_x_abajo

Con la shield ensamblada se conecta el Arduino con el cable usb al computador para programarlo.

Usaremos el siguiente sketch

// www.internetdelascosas.cl
//
// Sketch mide la temperatura con un sensor LM35
// y la envia a un servidor remoto
//
// contacto@internetdelascosas.cl
//

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = {  0x90, 0xA2, 0xDA, 0x0D, 0x4E, 0xD7 }; // MAC de la tarjeta ethernet shield
byte ip[] = { 192,168,1,100 }; // Direccion ip local
byte server[] = { 192,168,1,200 }; // Direccion ip del servidor

Client client(server, 80);
float value;

// Definicion de pines

const int inPin = 0;  // sensor conectado a la entrada analoga 0

void setup()
{
  Serial.begin(9600);
  Ethernet.begin(mac, ip); // inicializa ethernet shield
  delay(1000); // espera 1 segundo despues de inicializar
}

void loop()
{
  int value = analogRead(inPin);
  float celsius =  (value * 500L) /1024.0;     // 10 mV por grado celsius
  Serial.print(celsius); // Escribe en el puerto serial para monitorear
  Serial.print(" grados Celsius");

  Serial.println("Conectando..");

  if (client.connect()>0) {  // Se conecta al servidor
    client.print("GET /arduino.php?id=joniuz&n=t&v="); // Envia los datos utilizando GET
    client.print(celsius);
    client.println(" HTTP/1.0");
    client.println("User-Agent: Arduino 1.0");
    client.println();
    Serial.println("Conexion exitosa");
  }
  else
  {
    Serial.println("Falla en la conexion");
  }
  if (client.connected()) {}
  else {
    Serial.println("Desconectado");
  }
  client.stop();
  client.flush();
  delay(300000); // espera 5 minutos antes de volver a sensar la temperatura
}

Los puntos importantes donde hay que poner a tención son:

byte mac[]: Dirección MAC de tu ethernet shield (la que anotamos anteriormente)

byte ip[]byte server[]: direcciones ip tanto del Arduino como del Servidor estan separadas por “,” y no por “.”

El servidor puede ser local (como en este caso) o directamente un servidor en Internet, el Arduino usará la red local para llegar al servidor Internet. Este sketch no usa resolución de nombres por lo cual la dirección debe ser entregada en formato de octetos ip.

La llamada al servidor web se realiza usando GET al script php “arduino.php” (que se verá mas adelante) y pasando en la URL los valores de las variables:

id: identificador del arduino (mi nick joniuz)

n: nombre de la variable (en este caso t de temperatura)

v: valor de la variable, el que se obtienen concatenando el string con el valor interno de la variable.

Recordar que el inicio de la llamada al pasar variables por GET es el caracter “?” y que cada variable va separada por “&”. No se permiten espacios en blanco.

La forma de conectar el sensor LM35 lo vimos en el artículo Midiendo temperatura con Arduino y LM35. Para cargar el sketch, compilarlo y ejecutarlo en el Arduino pueden revisar el artículo Hola Mundo version Arduino donde explicamos el proceso con “pantallitas”.

Para validar que esta funcionando, se puede monitorear la interfaz serial del Arduino y debería verse algo como esto:

17.69 grados Celsius
Conectando...
Conexion exitosa

Con estos pasos ya deberíamos tener nuestro sensor funcionando y conectado a la red.

2. Servidor Apache – MySQL – PHP

Daremos por conocido que el servidor Apache – MySQL – PHP fue instalado y esta operando correctamente y que se dispone de una cuenta en MySQL con permisos de acceso para escritura. En Ubuntu es bien sencillo instalar todos estos paquetes utilizando Synaptic y esta bien documentado como hacerlo, solo deben buscar en Google.

Para guardar los datos enviados por el Arduino utilizaremos la tabla “variable” la cual se puede crear utilizando el siguiente script sql y algún administrador de base de datos o directamente sobre el interprete de comandos de MySQL (copiar y pegar).

CREATE TABLE IF NOT EXISTS `variable` (
  `fecha` datetime NOT NULL,
  `id` varchar(30) NOT NULL,
  `nombre` varchar(100) NOT NULL,
  `valor` float NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

El script php encargado de procesar las llamadas GET desde el arduino se llama “arduino.php” y se debe colocar en la raiz de nuestro servidor web, en Ubuntu normalmente se ubica en /var/www, el código fuente es el siguiente.

<?
// www.internetdelascosas.cl
//
// Script para recolectar datos enviados por arduinos conectados a la red
//
// contacto@internetdelascosas.cl
//

// Parametros de base de datos
$mysql_servidor = "localhost";
$mysql_base = "idlc";
$mysql_usuario = "idlc";
$mysql_clave = "contraseña_super_secreta";

$id  = htmlspecialchars($_GET["id"],ENT_QUOTES);
$nombre = htmlspecialchars($_GET["n"],ENT_QUOTES);
$valor = htmlspecialchars($_GET["v"],ENT_QUOTES);

// Valida que esten presente todos los parametros
if (($id!="") and ($nombre!="") and ($valor!="")) {
	mysql_connect($mysql_servidor,$mysql_usuario,$mysql_clave) or die("Imposible conectarse al servidor.");
	mysql_select_db($mysql_base) or die("Imposible abrir Base de datos");
	$sql = "insert into variable (fecha, id, nombre, valor) values (NOW(),'$id','$nombre','$valor')";
	mysql_query($sql);

}
?>

Si realizan todos los pasos correctamente, la tabla variable debería comenzar a recibir registros cada 5 minutos.

Pueden ver el log del servidor apache para validar que se esta llamando correctamente al script arduino.php

[root@idlc ~]# tail -f /var/log/httpd/internetdelascosas.cl-access_log
190.22.238.90 - - [22/May/2012:14:10:52 -0400] "GET /arduino.php?id=joniuz&n=t&v=19.01 HTTP/1.0" 200 - "-" "Arduino 1.0"
190.22.238.90 - - [22/May/2012:14:15:53 -0400] "GET /arduino.php?id=joniuz&n=t&v=19.94 HTTP/1.0" 200 - "-" "Arduino 1.0"
190.22.238.90 - - [22/May/2012:14:20:54 -0400] "GET /arduino.php?id=joniuz&n=t&v=20.85 HTTP/1.0" 200 - "-" "Arduino 1.0"
190.22.238.90 - - [22/May/2012:14:25:54 -0400] "GET /arduino.php?id=joniuz&n=t&v=20.80 HTTP/1.0" 200 - "-" "Arduino 1.0"

Si tienen cualquier consulta, no duden en comentar o consultarnos a nuestro email.

Acerca de joniuz

Ingeniero Civil Informático, Universidad de Santiago de Chile. 15 años de experiencia trabajando para empresas de servicios internet y telcos como IBM, VTR y Entel. Experto en servicios internet, redes 2g y 3g, y servicios de valor agregado para telefonía móvil. Asesor Tecnológico de PyMES. Fotógrafo cuando se lo piden y músico cuando tiene algo de tiempo.

52 Thoughts on “Capturando datos en MySQL usando Apache, php, Arduino + Ethernet Shield

  1. Hola Joniuz, muchísimas gracias por compartir este post, es muy pero muy útil amigo. Yo estoy trabajando en un proyecto parecido con RFID, en cuanto lo tenga terminado lo compartiré en mi blog. Muchas gracias.

  2. Manuel on 26/07/2012 at 12:12 Dijo:

    Perdona, espero me pueda ayudar.
    Este campo $mysql_base = “idlc”;, ¿indica el nombre de la tabla?
    $mysql_usuario = “idlc”; ¿Este me imagino es nombre usuario BBDD.
    Gracias

    • Manuel, la instrucción $mysql_base = “idlc” indica el nombre de la base de datos dentro de una instancia mysql.

      Un servidor MySQL puede tener multimples instancias y una instancia puede tener varias bases de datos.

      Efectivamente $mysql_usuario es el nombre del usuario de la base de datos que debe tener los privilegios para poder conectarse al servidor y a la base de datos.

      En este ejemplo el nombre de la tabla esta en la sentencia $sql = “insert into variable …” donde “variable” es el nombre de la tabla.
      .

  3. German on 22/08/2012 at 22:45 Dijo:

    Hola joniuz! muy buen post! tengo una duda, para hacerlo al revez, o sea enviar datos desde php al arduino y que este me devuelva su estado. Por ejemplo, llamo a una funcion en php que se llame “pedir_estado.php” y que esta le pida el estado al arduino, y luego mostrarlo en el navegador. Espero que me puedas ayudar.

    Saludos y gracias!

    • German, para consultar el estado del arduino necesariamente debes utilizar un sketch que implementa un servidor que utiliza el protocolo http (me parece que dentro de los ejemplos viene uno). Luego desde el php en el servidor haces un “include” con la direccion http del arduino.

      Buen tema para un artículo, buscare mas información y publicaré un ejemplo.

      Saludos
      @joniuz

  4. Pablo Morales Tapia on 13/11/2012 at 19:09 Dijo:

    Estimado mi pregunta si esto se puede implementar en un arduino nano v3.0

    Saludos

    • Pablo, no, no se puede porque necesitas el Ethernet Shield para conectar el Arduino a Internet.

      • Pablo Morales Tapia on 14/11/2012 at 19:10 Dijo:

        claro pero si compro el ethernet shield? o solo funciona para el arduino uno?

        Saludos muy buena la pagina me la recomendo mi tio marcelo tapia nose si lo conoces.

  5. Jose on 15/12/2012 at 16:48 Dijo:

    Hola. Muy Bueno.

    Estoy empezando a desarrollar un proyecto parecido.

    Se trata de leer datos de sensores de temperatura y lectura de caudal mediante generador de pulsos y guardarlos en un txt en la tarjeta SD incorporada en Arduino. Esto se hará cada x tiempo.

    Ahora lo que quiero es pasar estos datos a una tabla de bd mysql alojado en un servidor y realizarlo cada x tiempo, es decir sincronizar los datos.

    La idea de hacerlo así es para evitar la pérdida de datos de los sensores por no tener conexión por cualquier motivo.

    Si al arduino se le incorpora una batería no dejaría de almacenar lecturas independiente de lo que suceda en el exterior.

    Cuando se reestablezca la conexión se actualizaría los datos desde la tarjeta SD a la base de datos.

    Una vez explicado mi proyecto.
    ¿Podrías guiarme como proceder?
    Gracias y un saludo.

    • Hola Jose,

      Suena interesante el proyecto, lo que no me queda claro es ¿los Arduinos están siempre en linea o con una conexión intermitente?, si es asi, lo mejor seria ir guardando los datos en una memoria Micro SD (la capa Ethernet tiene un slot para ese tipo de memoria) lo complejo será saber que dato enviaste y que dato no, por lo cual cada registro (o línea) debe ir con un correspondiente timestamp (marca de tiempo).

      Mi recomendación es siempre cablear, en la medida de lo posible, con sistemas inalambricos siempre hay problemas :)

      Saludos
      JZ

  6. Diego Zamora on 20/12/2012 at 16:24 Dijo:

    Hola, excelente tutorial, sin embargo a la hora de compilar de el sketch en arduino IDE señala un error en

    client(server, 80);

    de que manera puedo corregirlo para que se refiera correctamente al computadora cliente?? de antemano muchas gracias

    • Estimado,

      ¿Cual es el código exacto del error?

      A nosotros a veces nos marca error cuando intentamos compilar un sketch de Windows en Linux, muchas veces tenemos que cambiar las llamadas a las funciones de red.

      Cuéntanos para ver si podemos ayudarte.

      Saludos
      JZ

      • Pablo Morales Tapia on 13/02/2013 at 21:51 Dijo:

        Estimado joniuz ami igual me marcaba un error en la linea

        Client client(server, 80);

        Pero lo solucione de la siguiente forma
        primero edite la linea por esta

        EthernetClient client;

        Despues cambie la conexion al server por esta

        if (client.connect(server, 80)) { // Se conecta al servidor

        y asi compila sin ningun problema el sketch y funcionando con servidor remoto con base datos Mysql

        Saludos Gracias muy bueno el tutorial

        • Perfecto!

          El codigo depende de la versión del compilador de Arduino que tengas, nosotros hemos tenido problema en compilar programas hechos en Linux cuando los exportamos a Windows.

          Y hemos logrado correrlos de la misma forma.

          Saludos

  7. jack on 12/01/2013 at 10:44 Dijo:

    junios, yo uso XAMPP, código php almacenado en qué carpeta?

    • Jack, ¿sobre que sistema operativo lo estas usando? normalmente en sistemas Linux (o unix) los archivos del sitio web quedan en /var/www/

      Revisa la documentación de XAMP para ver donde esta la raíz del sitio web en el el sistema de archivos.

      Saludos
      JZ

  8. jack on 16/01/2013 at 2:21 Dijo:

    Arduino puede conectarse al servidor de IP que es IP pública estática, pero los datos transmitidos no aparece en la base de datos

    si alguno de los script php?

    por favor entrada

  9. Manuel on 26/01/2013 at 11:45 Dijo:

    Excelente post !!!! me quede con una duda que se convirtio en idea, dime se puede mandar datos por bluetooth a mysql !!!! seria el mismo procedimiento ????

  10. Ricardo on 17/02/2013 at 18:39 Dijo:

    Hola, estoy pensando implementar esto de manera local y tengo ciertas preguntas.

    1. El Ethernet Shield a donde debe ir conectado, a un router?
    2. Se puede realizar esto usando Apache en localhost? (cuales son los datos de ip y server en el caso de localhost?)

    • Ricardo, este ejemplo esta implementado en una red local.

      Respondo a tus preguntas:

      1.- Si, el puerto ethernet del ethernet shield lo debes conectar a la red local (a uno de los puertos ethernet del router) y obviamente el ethernet shield debe estar montado sobre un Arduino uno.

      2.- Si, este ejemplo utiliza apache. Ojo con localhost, este es el nombre que recibe la tarjeta de red local en un Linux y no significa que es una red local, lo que debes conocer es la ip que tiene Linux en la red, si te fijas en este ejemplo esa ip es 192.168.1.200. Para conocer esta ip puedes usar el comando ifconfig (debes ejecutarlo como root).

      Espero que te sirva.

      Saludos

  11. Fernando on 13/04/2013 at 0:34 Dijo:

    Hola, te felicito por tu tutorial.

    Quiero probar tu proyecto y soy novato en Arduino; tengo dos dudas:

    1) Como obtienes el valor de la mac { 0×90, 0xA2, 0xDA, 0x0D, 0x1F, 0×80 }; es decir como se cual sera el valor de la mac de mi Ethernet Shield?

    2) Por que cuando transmites los datos el client.print(“GET /arduino.php?id=joniuz&n=t&v=”); el valor v dice ” no deberia decir v=celcius?

    Saludos.

    • Hola Fernando! gracias por las felicitaciones.

      Respondo a tus preguntas
      1) La mac viene impresa en un sticker pegado bajo la tarjeta, agregue una imagen en el artículo para que veas a lo que me refiero.

      2) Hay dos funciones para imprimir:
      - print: imprime (en este caso envía la información por la conexión hacia el servidor web) pero no cambia de linea, dejando el cursor en la misma linea para escribir a continuación.

      - println: imprime y envía el caracter new line “\n” al final de la linea, esto para el servidor web es muy importante.

      ¿Donde esta el truco? En la siguiente linea esta escrito el valor con la instrucción “client.print(celsius);” pero no es hasta la siguiente instrucción “client.println(” HTTP/1.0″);” donde deja un espacio en blanco y le dice al servidor web que termino de enviar los datos con los caracteres “HTTP/1.0″ y el fin de linea con println.

      Espero haberte aclarado las dudas y cuéntanos como te fue!

  12. Fernando on 15/04/2013 at 12:32 Dijo:

    Ok gracias por la aclaración.

    Lo único que me falta es el Sensor LM35, lo googleado y solo aparece un vendedor en Arica. Sabes donde conseguirlo en Stgo. O bien sera posible usar el Sensor de Temperatura One Wire DS18B20?, imagino que si pero como no soy electrónico si no que informático prefiero pregunatrte.

  13. Saludos desde Colombia, ha sido muy interesante tu aporte, estoy realizando mis primeros pines en arduino y este código me ha venido al pelo. Me surge una duda, puedo yo desde mi servidor web enviar variables al arduino como respuesta al dato enviado, por ejemplo;
    Sabemos que si al subir cierta temperatura podemos abrir un delay o relevo para encender un aire acondicionado, esto lo programariamos directamente desde el sketch de arduino, pero si quisiera mediante la web cambiar el valor almacenándolo en una tabla mysql y modificar el valor maximo de temperatura por ejemplo de 22 grados a 25, y que el arduino tomara este valor para validar su condición de prender o no el aire.
    Es posible?
    Me podrías dar una luz al respecto.

    • Estimado

      La ayuda que pide alcanza para escribir un articulo completo, pero haré el esfuerzo respondiendo acá.

      Existen dos formas de atacar el problema de las variables. La primera es guardar las variables en un servidor externo.

      El Arduino es un microcontrolador que ejecutara un código en loop infinitamente, no tiene una memoria persistente, por lo que si se reinicia, vuelve a partir desde los valores iniciales. Esto le da mayor versatilidad y al mismo tiempo lo limita, por ejemplo, un Arduino no puede correr una base de datos MySQL.

      Si desea conservar una variable, necesariamente debe hacerlo en una memoria MicroSD o en un servidor externo.

      Para la segunda opcion, es necesario que cada vez que envie datos al servidor, este debe devolver variables, las cuales deben ser procesadas (parseadas en la jerga informatica) en el Arduino para ir actualizando los valores en tiempo de ejecucion.

      Busque la siguiente linea en el codigo que publicamos

      if (client.connected()) {}

      En esa linea se ve que no se ejecuta código cuando el Arduino se conecta al servidor (en este caso “nada” {}), ya que el Arduino envio solo envía los valores en la URL sin esperar respuesta.

      En esta linea deberia comenzar a procesar la respuesta del servidor. El problema es que no existe una funcion especifica para leer el “string” despuesta y se debe hacer caractera a caracter con una instruccion como la siguiente.

      char c = client.read();

      Al conectarse el Arduino con el servidor, este deberia enviar la o las variables como respuesta, las que seran parseadas por el Arduino localmente. Para ello deberia modificar el archivo PHP del servidor.

      Vea los ejemplos de clientes web en el menú de ejemplos del Arduino, esos le aclararan un poco mas la idea. Intentaremos sacar un ejemplo así dentro de poco.

      La segunda forma de atacar el problema es creando un servidor web que funcione localmente en el Arduino, para esto, el ejemplo de este artículo no sirve, ya que el Arduino opera como un cliente web. Revise los ejemplos que vienen con el software de instalacion, en ellos se ve como crear un servidor web en Arduino.

      Ha pensado en usar equipos mas inteligentes que el Arduino como Raspberry Pi o Beaglebone?

      Saludos desde Chile

  14. Antonio on 21/05/2013 at 8:46 Dijo:

    Hola,

    Mi consulta es si se puede hacer en sentido inverso. Quiero hacer una cnc, y guardar los trabajos en mysql para ejecutarlos conforme me vaya haciendo falta. Por ejemplo si guardo un proyecto llamado dinosaurio y tengo que volver a “imprimirlo” ¿puedo hacer que arranque el código desde mysql? ¿Podria enviarlo a arduino desde una Tablet encontrándose la base de datos en un servidor de red o internet?

    Por favor avisarme en email cuando respondáis. Gracias.

    • Hola

      Si desea hacerlo en modo inverso, es decir tener localmente la base de datos MySQL, evalúe otro tipo de tarjetas con linux embebido como Raspberry Pi o Beaglebone

      El Arduino no está diseñado para que se le envíe código en cada arranque, todo lo contrario, fue pensado para ejecutar el mismo código infinitas veces reinicializando todas las variables cada vez que parte.

      Saludos

      • Antonio on 10/06/2013 at 13:25 Dijo:

        Ante todo agradecerte tu atencion y consejo, me ha interesado el raspberry pi porque no solo ofrece lo que busco sino que también podría tener un media center.

        Hace unos minutos he visto otro proyecto que saldrá en septiembre, se llama UDOO, ¿me espero a que salga y podría usarlo como media center? mas que todo por si soy inacapaz de aprender a programar la cnc que comente anteriormente.

        Otra duda es si tendría que comprar un arduino para controlar los motores paso a paso a demas de los driver.

        No tengo ni idea de electrónica pero me gustaría introducirme sin tirar el dinero pudiendo dar otra utilidad si me aburriese.

        Al principio quería el arduino (16 euros), me aconsejaste el raspberry pi (38 euros) y ahora he conocido UDOO.

        De aburrirme podría usarlo como media center o como servidor web php-mysql.

        Un cordial saludo

        • Antonio, el Raspberry Pi es mucho mas equipo que un Arduino, pero tiene una desventaja, no tiene puertas analogicas, por lo que si tu objetivo es conectar sensores analogicos tendras que usar un Arduino como interfaz.

          Saludos

  15. te cuento que tu ejemplo me servio para punta pies de lo que estoy desarrollando,tengo bastante experiencia programando pic,pero arduino nada
    asi que me dedique a estudiar un rato y me encontre con tu web y que mejor alguien chileno una maravilla.
    como no todo es gratis jajajja
    una consultilla:
    arduino puede tyrabajr tanto como servidor y cliente
    la idea es que acepte peticiones asi como las envia

    saludos

    alexander
    santiago de chile

    • Alexander

      Efectivamente Arduino puede trabajar como servidor y como cliente, lo que debes tener en cuenta es que cuando opera como servidor no tiene mucho que servir ya que no tiene ningún dispositivo de almacenamiento en su versión básica, si deseas servir archivos debes usar una shield para micro SD.

      Dentro de los sketchs de ejemplos vienen varios servidores que permiten modificar el estado de las puertas de salida, con esto puedes prender leds o activar reles remotamente.

      Saludos

  16. lforteaga on 25/06/2013 at 15:47 Dijo:

    Excelente aporte joniuz..!! Muchas gracias por compartirlo.

    Una consulta, ya vi que envias datos por HTML al servidor web. Si queres enviar datos o consultas desde el servidor apache con PHP hacia la shield Arduino ethernet via TCP/IP usas el método POST?

    • Hola

      Para la comunicación en sentido inverso, desde la red hacia el Arduino uso GET (es mas fácil de procesar las variables en el lado del Arduino)

      Saludos

  17. gogy on 30/06/2013 at 2:28 Dijo:

    que debo hacer para usar la base de datos de byethost?

    • Este ejemplo te sirve, debes validar que tengas el lenguaje PHP en el servidor (que es lo mas probable), crear una base de datos MySQL y modificar las credenciales (servidor, usuario, contraseña) de acuerdo a las que definas en el proveedor de Hosting.

      Saludos

  18. mario on 12/08/2013 at 19:36 Dijo:

    hola joniuz, muy interesante tu publicación bueno quisiera que me orientes ,mi idea es desarrollar un invernaderos automatizado utilizando (php,mysql y arduino ethernet sin poe) ,donde pueda capturar los datos generados mediante sensores y a la vez también pueda manipular desde la pagina web al arduino de forma remota como encender o apagar ventiladores ,ha por cierto una pregunta mas se podrá realizar con asp

    estos son los que ya tengo comprado :
    http://www.5hz-electronica.com/arduinoethernet-1.aspx

    sensores
    bomba de agua
    relay shell
    y programare mediante conexión usb

    espero su respuesta gracias

    • Hola Mario, los Arduino Ethernet que ya tienes están perfectos para lo que quieres realizar. Debes “inventar” un protocolo de comunicacion basado en peticiones GET o POST entre el servidor (que puede ser ASP, aunque no es de mi agrado, te recomiendo PHP) y los Arduino.

      Puedes enfrentar el problema de dos formas:
      1) Arduinos reportándose al servidor: El servidor simplemente escucha y los Arduinos se reportan al servidor con una frecuencia programable, en cada reporte reciben también instrucciones.

      2) El servidor se comunica periódicamente con cada Arduino: los Arduinos esperan la comunicación del servidor, reciben instrucciones y entregan sus variables de estado.

      La opción 1 cargara mas la red ethernet, pero si son pocos sensores (mucho serian unos 500 Arduinos) creo que es la mas simple.

      Espero que esta ayuda te sirva, nosotros estamos desarrollando un proyecto parecido, pero no con invernaderos…

  19. Victor on 23/08/2013 at 0:15 Dijo:

    es posible hacer lo mismo pero que se conecte a un webservice, y obtenga datos de desde ahi??.

    • Si, es posible pero debes considerar que no existen (hasta donde nosotros sabemos) librerías en Arduino que te permitan procesar el xml que entrega un WebService por lo que debes realizar ese “parseo” a mano.

      Para evitar un excesivo procesamiento en el Arduino nosotros utilizamos scripts php que entregan valores simples de procesar, sin todo el protocolo y headers que normalmente entrega un WebService.

      Saludos

  20. Hola amigo, en primer lugar muy agradecidos todos poq tu post es referencia para todos, pero tengo un gran problema, hice todo el desarrollo en base a tu ejemplo, y tengo tablas en mi server para monitorear las temperaturas del proyecto, pero NO FUNCIONA! ?=(
    por lo que he podido ver, el arduino sólo ejecuta la consulta como cliente el GET al server en el void setup() pero no el el loop()
    lo que hace inviable estar actualizando de manera periódica la tabla mysql en el server en la red.
    Es bastante frustrante para mi encontrarme con esto luego que estaba seguro que se podía.
    que me puedes ayudar al respecto.
    Gracias de antemano

  21. Jordi on 07/10/2013 at 17:39 Dijo:

    Hola Joniuz. Excelente trabajo y gracias por compartirlo con todos. Estoy trabajando en un proyecto similar pero mi base de datos tiene 6 variables dentro de una tabla. ¿ cual sería el codigo del arduino para “grabar” las 6 variables ?
    Me permito una segunda pregunta: ¿ ya has generado el blog para que el arduino pueda recibir datos desde la base de datos? Entiendo que para esto el arduino debe indicar que variable quiere leer y ponerse en modo de escucha para recibir el dato no?.

    Gracias por tu atención y respuesta si es posible.

    Saludos desde Barcelona

  22. JAVIER on 29/01/2014 at 14:39 Dijo:

    felicitaciones por el post muy buena informacion, sabes que yo lo probe pero no me funciona y no se comunica a mi server local y lo probe en un servidor en internet y no conecto , mi pregunta es que si usas la ip del servidor necesitas un servidor de dominio DNS para poder llagar al destino tanto en lan como en wan?

  23. jorge on 03/02/2014 at 21:47 Dijo:

    hola, como puedo hacer para conectar arduino al programa Logtemp y que pueda leer el sensor sd18b20, aclaro Arduino reconoce el sensor, pero logtemp no recibe los datos, saludos

  24. Ivan on 12/02/2014 at 19:42 Dijo:

    Hola Joniuz, muy buen aporte, quisiera preguntarte lo siguiente si decidiera recolectar la informacion de sensores en arduino almacenandola en la SD del ethernet shield como podria despues enviarla a una aplicacion java o applet para graficarla, te agradezco de antemano la respuesta
    un saludo

  25. jesus alfredo salgado on 27/02/2014 at 13:53 Dijo:

    esta perfecto, ando haciendo un proyecto parecido pero con sensor de movimiento y con wifi adaptado a un linksys me gustaria si me podrias ayudar gracias.

  26. Mariana Rodríguez on 23/03/2014 at 18:44 Dijo:

    Es sin duda alguna un buen proyecto, pero no me funciona, me muestra en el monitor serial del arduino que tengo conexión y las temperaturas, pero nada se refleja en mi base de datos.
    De verdad es URGENTE, espero alguien me pueda ayudar.

    • Estimada,

      Específicamente que parte del proyecto presenta problemas? Nosotros lo hemos replicado en forma independiente sin problemas. Si nos entregas más detalles podemos reproducir el error.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Post Navigation