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 es única para cada shield (y para cada tarjeta de red de cualquier dispositivo) y 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

// InternetDeLasCosas.cl
// Script que obtiene la temperatura desde un sensor LM35 
// y la envia a un servidor web
//
// Escrito por @joniuz

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

// Mac unica de cada EthernetShield (deben cambiarla)
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x4E, 0xD7 };

// Descomentar esta linea si se desea un IP fijo
//IPAddress ip(172,17,17,200);

// Descomentar esta linea para asignar un DNS fijo
//IPAddress myDns(172,17,17,1);

// Inicializa la instancia client
EthernetClient client;

// Direccion del servidor
char server[] = "www.iot.cl";

// Variable de tiempo de la ultima conexion en milisegundos
unsigned long ultimaConexion = 0;          
// Estado de la ultima conexion
boolean ultimoEstado = false;
// Intervalo en milisegundos entre conexiones
const unsigned long intervaloConexion = 10000;   

// Datos del sensor
float tempC; // Temperatura en celsius
int LM35 = 0; // Pin A0 del Arduino

void setup() {
  // Inicializa puerto serial
  Serial.begin(9600);
  Serial.println("#### Internetdelascosas.cl ####");
  Serial.println("Sensor de temperatura LM35/ web");
  // Espera 1 segundo para que se inicie la tarjeta Ethernet
  delay(1000);
  // Si deseas usar un ip fijo y un DNS fijo descomentar esta linea y comentar la linea 39
  // Ethernet.begin(mac, ip, myDns);
  // Inicializa la tarjeta ethernet mediante DHCP
  Ethernet.begin(mac);
  // Imprime la direccion IP de la tarjeta
  Serial.print("Direccion IP: ");
  Serial.println(Ethernet.localIP());
}
// Loop principal
void loop() {
  // Lee la temperatura desde el sensor
  tempC = analogRead(LM35);
  // Convierte el valor leido a temperatura
  tempC = (5.0 * tempC * 100.0)/1024.0; 
  
  // Si hay datos que llegan por la conexion los envia a la puerta serial
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  // Si no hay conexion de red y se conecto correctamente la ultima vez
  // detiene el cliente Ehternet
  if (!client.connected() && ultimoEstado) {
    Serial.println();
    Serial.println("Desconectando...");
    client.stop();
  }

  // Si no esta conectado y han pasado X segundos (intervaloConexion) 
  // despues de la ultima conexion envia datos al servidor
  if(!client.connected() && (millis() - ultimaConexion > intervaloConexion)) {
    httpRequest();
  }
  // Actualiza la variable ultimoEstado 
  ultimoEstado = client.connected();
}
// Fin del loop principal

// Realiza la conexion http al servidor
void httpRequest() {
  // Se conecta al servidor en el puerto 80 (web)
  if (client.connect(server, 80)) {
    // Envia el dato al puerto serial 
    Serial.print("Sensor LM35: "); 
    Serial.print(tempC); 
    Serial.println(" grados Celsius");
    // Envia el requerimiento al servidor via GET
    Serial.println("Iniciando conexion...");
    client.print("GET /sensorarduino.php?id=joniuz&nombre=temperatura&valor=");
    client.print(tempC);
    client.println(" HTTP/1.1");
    client.print("Host: ");
    client.println(server);
    client.println("User-Agent: Arduino-Ethernet");
    client.println("Connection: close");
    client.println();

    // Actualiza el tiempo en milisegundos de la ultima conexion
    ultimaConexion = millis();
  } 
  else {
    // Si la conexion fallo se desconecta
    Serial.println("Error al conectarse al servidor");
    Serial.println("Desconectando...");
    client.stop();
  }
}

Los puntos importantes donde hay que poner atención son:

byte mac[]: Dirección MAC de tu ethernet shield (la que anotamos anteriormente) esta es única para cada shield por lo que deben cambiarla.

char server[]: nombre del servidor web que recibirá los datos.

IPAddress ip(172,17,17,200);IPAddress myDns(172,17,17,1); : aunque estan comentadas se pueden des comentar y utilizar para asignar direcciones fijas al Arduino y al servidor DNS (normalmente el router que te da acceso a Internet). Poner atención en que las direcciones IP están separadas por comas “,” y no por puntos “.”.

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 usa resolución de nombres accediendo al DNS que obtiene al solicitar IP en la red local utilizando el protocolo DHCP.

Si se usa un servidor local lo mas probable es que no tengas un nombre asignado a el por lo que debes descomentar las lineas IPAddres y colocar una IP fija al Arduino, tambien debes cambiar la llamada al inicializar la tarjeta etherne por…

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

id: identificador del Arduino (en este caso utilizo mi nick joniuz para saber que Arduino se esta conectando)

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

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

Recordar que para realizar una llamada GET es necesario colocar las variables después del nombre del script utilizando el caracter “?”, luego cada variable se separa por el caracter “&”. 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, se debe alimentar con +5V el Pin 1, el Pin 2 se debe conectar al la puerta analoga 0 del Arduino y el Pin 3 a Ground.

ArduinoLM35_bb

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:

 #### Internetdelascosas.cl ####
Sensor de temperatura LM35/ web
Direccion IP: 172.17.17.108
Sensor LM35: 18.55 grados Celsius
Iniciando conexion...
HTTP/1.1 200 OK
Date: Wed, 09 Jul 2014 12:47:13 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.3.3
Content-Length: 0
Connection: close
Content-Type: text/html; charset=UTF-8

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 “sensorarduino.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.

<?php
// 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["nombre"],ENT_QUOTES);
$valor = htmlspecialchars($_GET["valor"],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 10 segundos. Si desean modificar este valor pueden hacerlo en la variable intervaloConexion, un valor recomendable es 300000 (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
210.1.221.117 - - [09/Jul/2014:16:48:37 +0400] "GET /sensorarduino.php?id=joniuz&nombre=temperatura&valor=18.55 HTTP/1.1" 200 - "-" "Arduino-Ethernet"
210.1.221.117 - - [09/Jul/2014:16:48:47 +0400] "GET /sensorarduino.php?id=joniuz&nombre=temperatura&valor=18.55 HTTP/1.1" 200 - "-" "Arduino-Ethernet"
210.1.221.117 - - [09/Jul/2014:16:48:58 +0400] "GET /sensorarduino.php?id=joniuz&nombre=temperatura&valor=19.04 HTTP/1.1" 200 - "-" "Arduino-Ethernet"

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. Actualmente estudia como becario de Becas Chile el programa Master of Professional Engineering en la Universidad de Sydney. En Chile trabajó empresas de servicios internet y telcos como IBM, VTR y Entel. Le gusta la fotografía, tiene estudios de violín, guitarra eléctrica y sintetizadores que enciende cuando tiene algo de tiempo.

110 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.

    • Si ambos sirven, pero el LM35 es analogo y el DS18B20 es digital, por lo que van conectados a distintas entradas en el Arduino, atención con eso.

      Saludos

  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

    • Hola disculpa la molestia, una consulta: de donde saco el id: identificador del arduino ?, en el codigo dice un nick jonius.
      Muchas gracias por su amable respuesta

      • Cesar

        Ese identificador simplemente es un nombre para reconocer el equipo en el caso de que tengas varios conectados. Puedes colocar el nombre que quieras. Yo ocupe mi cuenta twitter!

        Saludos
        JZ

  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

    • El Arduino al momento de partir ejecuta el setup() y luego el loop() a menos que este corrupto el boot loader debería hacer eso.

      Revisaron que en el setup() no existe funciones o código que pueda detener la ejecución? probaron con otro Arduino?

      Saludos

  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?

    • Javier

      Cuando te refieres a servidor de dominio DNS, te refieres a un Domain Name Server o a un servidor de dominio de Micro$oft (Active Directory Server)?

      En este ejemplo usa un DNS para resolver el nombre del servidor, aunque también se puede colocar la ip directamente para no depender del servicio DNS. Con respecto al servidor DNS este es entregado cuando el Arduino solicita acceso a la red utilizando el protocolo DHCP. Si tu red utiliza ese protocolo (la mayoría lo hace incluso las redes de las casas que operan con un router wifi) no deberías tener problemas, pero si no funciona te recomiendo que coloques la IP directamente en el código.

      Saludos

  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

    • Hola disculpa la molestia, una consulta: de donde saco el id: identificador del arduino ?, en el codigo dice un nick jonius.
      Muchas gracias por su amable respuesta

      • Cesar

        El identificador permite reconocer que arduino se esta conectado en el caso de que tengas varios conectados, puedes usar cualquier nombre, en este ejemplo yo uso el nick de mi cuenta twitter.

        Saludos
        JZ

  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.

  27. xpmps on 31/03/2014 at 12:55 Dijo:

    Han cambiado ciertas cosas con el tema de client. Ahora es EthernetClient

    http://arduino.cc/en/Reference/EthernetClient

  28. alberto chavez on 18/04/2014 at 10:05 Dijo:

    eres chingon!

  29. Roman on 21/04/2014 at 18:59 Dijo:

    Hola tengo un problema con el codigo.
    Me manda un error en la linea de Client client(server, 80);
    En un video vi que sustituyeron esa linea por un EthernetClient client; y efectivamente el error desaparece pero me muestra un error en la linea de if (Client.connect()>0) {
    Si alguien fuera tan amable de decirme lo que pasa les estaria muy agradecido :)

    • Roman

      Todo depende de la libreria que estes usando, cada libreria tiene distintas instrucciones, por lo mismo lo ideal es que revises en la documentacion de la libreria si las instrucciones son las mismas.

      A veces actualizaciones de librerias cambian las instrucciones por nuevas o con nuevos parametros.

      Saludos
      JZ

  30. David on 28/04/2014 at 19:39 Dijo:

    Cordial saludo
    he seguido este tutorial y me ha ayudado mucho, cambie el sensor por un DHT11 para obtener datos de temperatura y humedad, sin embargo he tenido problemas con la segunda variable puesto q no se como en la siguiente linea puedo agregar la variable:

    solo necesito ayuda con el get, en el puerto serial de arduino ya me salen los resultados de ambas mas no puedo enviar sino el dato de temperatura a la base de datos de mysql como hago para cambiar el get para la variable de humedad’??

    client.print(“GET /arduino.php?id=joniuz&n=t&v=”);
    client.print(temperatura);

    • David,

      Se debe agregar cada variable concatenada por &, tendrias que agregar estas lineas

      client.print(“GET /arduino.php?id=joniuz&n=t&v=”);
      client.print(temperatura);
      client.print(“&h=”);
      client.print(humedad);

      En todo caso, revisa nuestros ultimos tutoriales, porque en esos estamos usando el sensor DHT11.

      Saludos.

  31. vicente on 16/05/2014 at 1:38 Dijo:

    Hola! Te escribo porque tengo una duda! Me hace todo bien pero no escribe en la base de datos? Alguna idea?

    Saludos!

    • Vicente

      Lo primero que tienes que probar es justamente la escritura en la base de datos, para eso puedes usar cualquier computador dentro de tu red llamando directamente al servidor con la URL, deberia escribir en la base de datos.

      Si quieres nos puedes escribir a contacto@internetdelascosas.cl porque necesitamos ver el codigo para ayudarte.

      Saludos
      JZ

  32. Samuel Gómez on 19/05/2014 at 19:08 Dijo:

    Hola, muchas gracias por tu aporte de verdad me parece excelente.
    Quisiera saber si, existe una forma de mandar desde php una orden a arduino para que apague un bombillo y como lo hago. Te agradezco muchísimo que me colabores ya que lo necesito para un proyecto de aula semestral que necesito entregar pronto en la u.

    • Samuel

      Efectivamente se puede realizar la conexion en forma inversa, que el arduino sea el servidor y un navegador internet el cliente.

      Revisa en los ejemplos que vienen en el IDE de arduino: Ethernet – WebServer, ese es un ejemplo como ver parametros que esta sensando el arduino.

      Saludos
      JZ

  33. Samuel Gómez on 24/05/2014 at 9:12 Dijo:

    Hola, gracias por responder mi interrogante. Ahora quisiera saber si esto puede ocurrrir al mismo tiempo es decir que yo mande datos del arduino a php y los guarde en un bd MySql y que a la vez, desde php mande datos al arduino para que haga alguna cosa que yo quiera como prender un foco o algo asi.

    • Si, se puede, en el php debes enviar una salida que debe ser procesada por el Arduino y tomar una decisión dependiendo de lo que procese.

  34. Samuel Gómez on 24/05/2014 at 9:17 Dijo:

    Otra pregunta que quiero hacer es: el arduino.php tiene que estar donde, en una carpeta del servidor normal, para lo cual tendria que decir carpeta/arduino.php o tengo que meter el codigo de arduino en xampp/htdocs?

    • Desconozco como funciona el xammp pero me parece que debes colocarlo en la carpeta htdocs. El script php debe quedar visible desde la red, debes poder acceder a el desde un navegador como Chrome o Firefox.

  35. Samuel Gómez on 24/05/2014 at 13:11 Dijo:

    Ignora las preguntas que te hice antes… mira me puedes regalar tu correo para mandarte una duda que tengo (que incluye pantallazos), resulta que he intentado hacer lo que tu pones aqui en este ejemplo y no me ha funcionado

  36. Emanuel on 02/06/2014 at 17:04 Dijo:

    hola excelente tu poss, mira tengo que hace un proyecto de una banda transportadora, donde la banda va estar tranportando productos y tendra casi al final como una puertita que los va a parar y con un sensor y un servo va decidir si avienta al objeto a la derecha p izquierda, lo que queremos hacer es que en la base de datos tenga una tabla con los atributos o columnas que sean derecha e izquiera y que podamos manipular los valores de la base de datos y que el arduino capte la señal…por ejemplo en la columna derecha le pongo 5 y en la izquierda 3…pues quiero que me aviente primero 5 objetos que detecte a la derecha(que el servo gire a tal dirección) despues de eso 5 que los 3 objetos me los aviente a la izquierda(el servo gire a la dirección opuesta), y se vuelva repetir el ciclo, no se si me explique, si podrías hacerme el favor de ayudarme como hacerle

    • Emanuel,
      No me queda claro el patron que usaras para seleccionar los productos, hablas de un sensor pero no dices que tipo de sensor es. Si utilizas una banda transportadora un parámetro muy importante a controlar es la velocidad de esta, al mismo tiempo el Arduino debe ser capaz de detenerla en caso de detectar alguna condición de error.

      El proyecto es completamente factible, pero te recomiendo que realices pruebas iniciales antes de largarte a programar el Arduino, hay varios parámetros que debes controlar y eso se logra solo con la experimentación.

      Saludos

  37. Emanuel on 07/06/2014 at 16:56 Dijo:

    bueno mas bien de acuerdo al codig0 de webclient arduino como le hago para guardar el valor de las variables de el php por ejemplp tengo $re=5; y quiere que ese valor lo tome una variable arduino como le hago?

  38. Fernando on 12/06/2014 at 21:19 Dijo:

    Hola Excelente, me queria sacar una duda, resulta que tengo un desarrollo parecido ,pero la conexion no es demasiado estable ,de 10 intentos conecta 6 y que es muy lento la conexion al servidor osea cada vez que hace (client.connect(server,80)) se demora unos cuantos segundos., te pasa algo parecido o la respuesta de conexion es inmediata?.
    Saludos.

    • En nuestro caso la conexión es inmediata y estamos utilizando un servidor que esta literalmente hablando al otro lado del mundo.

      Tu Arduino se conecta localmente? o utiliza un servidor en internet? Utiliza resolución por nombre o un IP?

      Muchas veces la resolución de nombres retrasa un poco la llamada GET.

  39. Roberto gonzalez on 20/06/2014 at 12:22 Dijo:

    hola tengo un problema con un programa que realice con arduino shield Ethernet bastante parecido al tuyo yo envios letras por a través de Ethernet y estas son recividas y enviadas de vuelta al arduino como para comprobar que si llego la información el problema se produce es que después de estar conectado un par de horas o incluso a veces un par de días es super relativo se pierde la conexión y en el programa no visualizo nada aunque se que se están enviando ya que he realizado ping a la arduino y esta me contesta sin problemas tu me podrias guiar en donde podría estar alojándose el problema el programa de recepción de información a parte de guardar la letra que se envió se genera un archivo txt que va guardando toda la información entrante

    • Roberto

      Te recomiendo utilizar la interfaz serial que tiene Arduino para realizar el debug a tu programa. Que el Arduino responda por ping no implica que este ejecutando correctamente el loop principal, solo indica que la tarjeta de red esta operativa.

      Te recomiendo revisar las variables, recuerda que Arduino tiene una memoria limitada, si usas muchas variables o tienes alguna que reciba un valor no esperado puedes provocar que el Arduino se bloquee y solo responda por ping. También debes tener cuidado con el archivo txt que generas, como controlas que no crezca hasta el infinito llenando todo el espacio disponible?

      Saludos

  40. jorge on 21/06/2014 at 12:08 Dijo:

    Felcitaciones por el post quiera saber como podria hacer para enviar mensajes de sms desde php, con datos que estan en mysql usando arduino

    • Jorge, no entiendo porque quieres agregar un Arduino si basta con Linux, MySQL, PHP, un celular compatible o Modem GSM y playSMS puedes enviar SMS sin necesidad de un Arduino. Si aun así quieres hacerlo con Arduino, tendrás que comprar una GSM Shield que es una de las mas caras y programar un cliente para el Arduino y un Servidor que entregue el SMS a enviar… Busca en Google mejor con las palabras que están mas arriba, Google todo lo sabe!

      Saludos

  41. David on 08/07/2014 at 0:57 Dijo:

    felicitaciones por la excelente explicación…

    Estoy realizando el proyecto con un sensor DHT11 para enviar datos de temperatura y humedad…tu nos mostraste como enviar un dato el de temperatura…¿Como hago para enviar dos datos el de temperatura y el de humedada la vez desde el GET y que en ki base de datos queden guardados esos datos cada uno en su repestivo bloque de temperatursa y humedad…
    gracias…POr fa…URGENTE

  42. julian montezuma on 08/07/2014 at 21:00 Dijo:

    hola quisiera saber porque no me deja compilar el sketch en arduino dice” La clase Server a sido renombrada como EthernetServer ” gracias por tu ayuda

    • Julian,

      Eso pasa cuando la libreria Ethernet esta desactualizada, baja la ultima version del IDE para Arduino y utiliza el codigo que hemos actualizado, con esto deberia compilar sin problemas.

      Saludos

  43. Pedro on 15/07/2014 at 9:06 Dijo:

    Hola, muchas gracias por tu dedicación y responder nuestras dudas, excelente Trabajo. Da gusto tener un compatriota aportando sus conocimientos.
    Bueno, necesito hacer un proyecto para presentarlo en la universidad, el asunto es; necesito que se escriba una contraseña numérica en un “teclado matricial arduino” y que esta contraseña se envié por intermedio de ethernet shield a una aplicación “Java” la cual valide la contraseña y envié una respuesta al arduino por intermedio de la misma ethernet shield y active un relee arduino en caso de ser positiva la validación de la contraseña. Todo esto en una red interna.
    La razón de todo este proceso es que necesito generar roles para usuarios, los cuales se validaran con las contraseñas y ademas de llevar un registro de accesos positivos (relee activado), ejemplo: hora, fecha, nombre del usuario. en una base de datos MySql.
    La consulta es si todo este proceso se puede llegar hacer?, si el proyecto seria factible?, “arduino uno” no tendrá problemas en llevar a cuestas Ethernet Shield, 1 relee y un teclado matricial, al mismo tiempo?.
    Se agradece de antemanos tu respuesta.

    Saludos Cordiales.

    • Pedro

      El proyecto es factible, Arduino esta preparado para trabajar con una Ethernet Shield un relay y un teclado. Que tipo de teclado es? has pensado en algo mas moderno como una tarjeta RFID para reemplazar al teclado? Arduino tiene una Shield que lee esas tarjetas.

      Lo que veo mas complicado de un proyecto así es la encriptación, el Arduino necesariamente tiene que encriptar a información que envía y recibe desde el servidor ya que este tipo de implementaciones para control de acceso son fáciles de atacar con la técnica “man in the middle”. Encriptar en un Arduino puede ser complejo porque esta limitado por memoria. Creo que una buena opción seria una Raspberry Pi que es un pequeño computador que corre Linux capaz de manejar un teclado, pantalla y encriptar los datos antes de comunicarse con el servidor.

      Saludos

      • Pedro on 15/07/2014 at 17:33 Dijo:

        Muchas gracias por tu respuesta, si es verdad que había pensado en utilizar el modulo de RFID en vez del Teclado Matricial Membrana 4×4, como idea inicial, pero no lo encuentro ni en M.Libre (1 usuario lo vende pero no es confiable). Y el Raspberry Pi es una gran herramienta, pero por presupuesto tendré que manejar el proyecto con arduino. La encriptación de datos es algo que tendré que estudiar con mas detalle es un problema.
        Se agradece su respuesta y gracias por las recomendaciones.

        Saludos.

  44. Ramon Vargas on 30/07/2014 at 11:19 Dijo:

    Hola Amigo, es muy interesante, creo que me puede servir en un proyecto que estoy haciendo, pero lo que hare es un poquito diferente, quiero mandar ordenes a un beaglebone black r3 conectando un modem (de teleonia celular), pero se me ha hecho un poco complicado investigar acerca de este asunto, me gustaria saber si puedes darme algun consejo o lo que requiero para hacer esto, ya que el problema de la telefonia movil es su ip, que es compartida por varios usuarios.

    gracias

  45. Ramon

    Todo depende del proveedor de telefonía celular que tengas, algunos usan un proxy de navegación lo que hace mas complicado enviarle ordenes o comandos al Beaglebone conectado detrás de un módem 3G, pero hay otros que usan un IP con direccionamiento real en Internet por lo que se hace mas fácil.

    Lo que nosotros hacemos es programar al Beaglebone para que revise constantemente una pagina en internet en donde colocamos los comandos que deseamos ejecutar, con esto no importa que ip tenga el Beaglebone y al mismo tiempo sabemos si esta conectado porque vemos cuando lo hace.

    Este tutorial te puede servir para conectar el Beaglebone con un dongle 3G

    http://www.internetdelascosas.cl/2012/06/21/conectando-el-beaglebone-a-internet-utilizando-un-modem-3g/

    Saludos!

  46. Alejandro Lemos López on 02/08/2014 at 21:46 Dijo:

    Buenas Noches, lo que pasa es que tengo dudas acerca de estas lineas de código ya que estoy trabajando con “Wampserver” y no sé como modificar esa parte:

    // Descomentar esta linea para asignar un DNS fijo
    //IPAddress myDns(172,17,17,1);

    // Inicializa la instancia client
    EthernetClient client;

    // Direccion del servidor
    char server[] = “www.iot.cl”;

    Gracias

  47. Alejandro

    Vemos en nuestro servidor que llegan conexiones desde tu IP (ya que coincide el IP de la pregunta con el registro de conexiones en el servidor web) lo unico que tienes que modificar para que te funcione en tu servidor es las siguientes lineas

    // Direccion del servidor
    char server[] = “www.iot.cl”;

    cambia http://www.iot.cl por la direccion IP de tu servidor local, ejemplo

    char server[] = “192.168.1.100″;

    Suponiendo que 192.168.1.100 es la ip que tiene tu servidor o computador donde tengas instalado WampServer.

    Saludos

    • Alejandro Lemos López on 02/08/2014 at 22:46 Dijo:

      Lo que pasa es que no nos está funcionando…. otra duda es si el “Dns” es importante…

      • Alejandro Lemos López on 02/08/2014 at 22:48 Dijo:

        ya le cambie esa dirección que me dijiste por mi “localhost”, pero cuando le abro el monitor serial me aparece “dirección ip: 192.168.0.105″ no sé que pasa… :/

        • La direccion 192.168.0.105 es la direccion del Arduino en tu red local.

          Cual es la direccion del computador donde tienes instalado WampServer? deberia ser una direccion del tipo 192.168.0.X donde X es un numero entre 1 y 255. Es esa la que debes colocar, nunca “localhost”, esa es una palabra clave que se usa para apuntar a si mismo cuando trabajas con servicios internet.

          • Alejandro Lemos López on 02/08/2014 at 23:05 Dijo:

            la dirección de mí computador es : 192.168.0.104 (esa fue la que puse en el “char server”)… mira:
            byte mac[] = { 0xDE,0xAD,0xBE,0xEF,0xFE,0xED };

            // Descomentar esta linea si se desea un IP fijo
            IPAddress ip( 192, 168, 0, 4);

            // Descomentar esta linea para asignar un DNS fijo
            // IPAddress myDns(192, 168, 0, 4);

            // Inicializa la instancia client
            EthernetClient client;

            // Direccion del servidor
            char server[] = “192.168.0.104″;

            y esto es lo que me imprime:
            #### Internetdelascosas.cl ####
            Sensor de temperatura LM35/ web
            Direccion IP: 192.168.0.105

          • Todo esta correcto, al indicarte

            Direccion IP: 192.168.0.105

            Significa que el Arduino esta conectado a la red, debes revisar ahora el servidor web, revisa si tiene algún tipo de registro de conexion.

            Saludos

      • Alejandro, si esta funcionando, nosotros vemos como tu Arduino se conecta a “nuestro servidor” porque no cambiaste la direccion del servidor.

        El DNS es importante si es que trabajas con direcciones “humanas” como http://www.iot.cl, no cambies nada del dns porque ya vemos que funciona.

  48. Paulo Rodriguez on 14/08/2014 at 11:43 Dijo:

    Muy buen ejemplo Jonuiz pero me gustaría saber en la parte del arduino que librerías estas incluyendo

    • Paulo, por alguna razon extraña el editor borro las librerias, en todo caso ya esta corregido, las librerias son

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

      Saludos

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