Mandar datos desde Arduino a una página web

Hola, resulta que tengo una placa Arduino Ethernet y necesito mandar ciertos datos desde dicha placa a una página web. Estuve probando con un programa que armé y no funciona. A continuación adjunto dicho programa:

Código:
#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xCD };
byte ip[] = { 192,168,1, 105 };
byte gw[] = {192, 168, 0, 1};
byte subnet[] = {255, 255, 255, 0};
byte server[] = {66, 7, 198, 112}; //IP de la página web
byte SNTP_server_IP[] = {10, 66, 3, 100};
Server servidor = Server(80);

int Temperatura = 0;
int Humedad = 0;

void setup()
{
  Serial.begin(9600);
  Ethernet.begin(mac, ip, gw, subnet);
  servidor.begin();
}

void loop()
{
Temperatura = 10;
Humedad = 20;
envioweb(Temperatura,Humedad);
delay(100);
}

void envioweb(int t1,int h1)
{
 
 Client client(server, 80);
 Serial.println("Envio de datos al servidor web:");
  //inicializacion cliente web por ethernet

 //creamos una clase cliente para que conecte al servidor indicado en el puerto 80 
    if (client.connect()) {
      Serial.print("Conectado OK: ");
      //comenzamos la peticion http
      client.print("GET /agrosensor/index.php?reg=1&t1=");
      Serial.print("GET /agrosensor/index.php?reg=1&t1=");
      //ponemos las variables
      client.print(t1);
      Serial.print(t1);
      client.print("&h1=");
      Serial.print("&h1=");
      client.print(h1);
      Serial.print(h1);
      //terminamos indicando el protocolo HTTP y un salto de linea
      client.println(" HTTP/1.1");
      Serial.print(" HTTP/1.1");
      //linea en blanco para que termine la peticion
      client.println();
      Serial.println();
    }
    else
    {
      Serial.println("Error al conectar. Compruebe la conexion.");
    }
    
    //paramos el cliente
    client.stop();
    delay(1);
}

El programa está hecho en la versión 0023 de Arduino.
Bueno, en principio la idea es ir viendo en la página los valores 10 y 20. Más adelante iré mandando datos correspondientes a un sensor de temperatura y otro de humedad.
Muchas gracias.
Saludos.
 
Última edición por un moderador:
Respuesta rapida.... No se puede...

Puedes hacer lo contrario... desde una pagina web puedes leer el arduino, tambien puedes hacer que el arduino envie datos a algun programa residente en la memoria de un servidor y que se mantenga corriendo como un demonio de linux (o servicio de windows) y de alli guarde los datos en alguna base mysql o fichero txt para que despues la pagina pueda leerlo...

http://es.wikipedia.org/wiki/Demonio_(informática)
 
yo tal vez lo que haria seria implementar en el arduino el servidor web, que capture las peticiones GET y las conteste enviando una pagina html o un texto con la temperatura y humedad. Así tú desde el otro extremo simplemente tienes que hacer la peticion.
P.D. Bueno, no se si se puede hacer eso en arduino, que yo nunca lo he usado :LOL:...
 
Última edición:
Efectivamente asi es como

Hay que instalar un servidor web en el arduino para que pueda responder a las peticiones, despues solo se leen los datos entrando a la IP del Arduino
 
Hola...yo estuve haciendo pruebas con Arduino UNO + Ethernet Shield + librería DHCP y dentro de mi misma red LAN todo funciona ok, puedo ver datos en un navegador de internet desde un puerto análogo del arduino, pero ahora quiero que cualquier persona en el mundo vean estos sensores (tengo un html embebido en el arduino)...COMO LO PUEDO HACER???

..creo que me fallan los conocimientos informáticos acá...(soy electrónico)
 
el proceso es el mismo.. solo que ahora necesitas abrir firewalls y posiblemente abrir una cuenta en una pagina web que pueda retransmitir la señal hasta tu computadora, como dyndns

Lo primero es que averigues tu IP externa, eso se revisa facilmente en paginas como whatismyip, despues necesitas comprobar que el puerto de comunicacion que uses este abierto, y tambien es facil revisandolo en paginas escaneadoras de puertos como http://www.t1shopper.com/tools/port-scan/

finalmente ya que sabes cual es tu IP y revisaste que el puerto este abierto entonces desde otra computadora solo ingresas la IPy el puerto en el formato (http://x.x.x.x:puerto) y deberias entrar

una vez que eso funcione entonces ya puedes activar una direccion con nombre usando dyndns
 
Hola

Estoy tratando de conectar Arduino uno a un servidor SQLServer que esta en la misma red local mediante una Shield ethernet, pero buscando por google solo encuentro la forma de conectar con un servidor mysql mediante la libreria MySQLConnector.

hay algo parecido pero para SQLServer?

Gracias de antemano. ...
 
Es una muy mala idea tratar de conectar un microcontrolador directamente a un sistema de bases de datos, empezando por que tenes que usar un "conector" de software sobre el propio micro.
Es mucho, pero mucho mas coherente armar un sistema multicapa y comunicarse con un protocolo de alto nivel con una capa intermedia que consulta a la bases de datos y preprocesa la informacion para que el micro pueda digerirla.
 
Gracias por responder Dr. Zoidberg

Tengo unas dudas

¿Porque crees que se tan mala idea?, ¿crees que el microcontrolador no sera capaz crear y mantener un enlace estable y ejecutar unas pocas de consultas sencillas?
si es posible con mysql ¿porque no con sql server?
¿A que te refieres con un sistema multicapa?
 
jobeb, tendrias que programar en el micro un software conector. Siendo MSSQL de codigo cerrado, no creo que sea sencillo hacer ingenieria inversa para saber como funciona el protocolo. En MySql es mas posible (no menos complicado) porque tenes el codigo fuente del conector disponible para computadoras "normales" y con un micro lo suficientemente grande se puede implementar.

Con MSSQL en la teoria tambien es posible, en la practica no, dentro de plazos y esfuerzo razonables.

Por ultimo, implementar algo asi en un micro "si es que te alcanza" posiblemente te dejaria el micro inutilizado para ninguna otra cosa.
 
Ten en cuenta que un arduino tiene una capacidad de procesamiento muy limitada y por lo tanto mantener una simple comunicación de red y ale viene justa.
Yo probaría con una raspberry pi o semejante.
 
Primero habría que definir que es "conectar un Arduino a un servidor (el que sea) de base de datos".

Si lo que pretendes por ejemplo es adquirir datos con el micro controlador e insertarlos en la DB, lo razonable sería escribir un programa "servidor" (listener) que escuche en un puerto los datos a insertar (con un formato definido) mediante socket y realizar la operación sobre la DB, incluso devolviendo un estado de la operación realizada.

Si es para consultas sencillas, incluso lo mismo.

Pero es tan amplio el "conectar" que quien sabe cual sería la solución mas razonable.
 
jobeb dijo:
¿Porque crees que se tan mala idea?, ¿crees que el microcontrolador no sera capaz crear y mantener un enlace estable y ejecutar unas pocas de consultas sencillas?
Es una MUY MALA IDEA por que el problema no es el enlace de red, sino la cantidad de recursos de cómputo (hard y soft) que son necesarios para sostener el middleware requerido para "hablar" con el gestor de bases de datos, y que un Arduino simplemente NO LOS TIENE DISPONIBLES.

jobeb dijo:
si es posible con mysql ¿porque no con sql server?
Ya te contestó seaarg. Leé su respuesta.

jobeb dijo:
¿A que te refieres con un sistema multicapa?
Un sistema "multicapa" es un conjunto de módulos de software que se ejecutan en distintas computadoras (o en la misma... el soft no lo sabe), donde cada módulo es autónomo, tiene un conjunto de funcionalidades asociadas y se diseña en base a las entradas y salidas de datos que recibe.
Vos ya tenés dos módulos, que en este caso son los extremos:

  1. El gestor de bases de datos (SQLServer).
  2. El Arduino.
pero entre ellos es necesario otro módulo que se capaz de conversar, por un lado, con la base de datos, y por otro, con el Arduino. Demás está decir que ese módulo es software (llamémoslo XYZ) que se ejecuta en una computadora poderosa (cualquier PC para el caso) y que se comunica via TCP/IP con el Arduino y la base de datos.
Entonces, cuando el Arduino necesita datos de la base, le dice a XYZ algo como "quiero el nombre y apellido que corresponde al documento 12345678" (se lo manda por la red, obvio), y XYZ traduce eso en algo como:
SELECT nombre, apellido FROM personal WHERE documento=12345678;
y se lo manda al servidor SQLServer. Cuando este le contesta con Juan Perez (ponele...) XYZ le manda un string "Juan Perez" al Arduino... y se acabó la historia. El Arduino solo debe saber mandar y recibir datos por la red a una IP determinada, y el programa XYZ se encarga de todo el bardo de comunicarse con la base y conseguir los datos pedidos.

IC65972.gif


No le des bola a los componentes intermedios, que son para Microsoft, mas bien fijate la idea...
.
 
Para agregar a lo que digo el doctor, dicho software de capa intermedia puede ser un sencillo programa que este en la misma computadora del servidor MSSQL. Este soft abre un socket de red para el arduino donde recibe comandos, interpreta y usa el conector MSSQL para llamar a la base de datos.

Recomiendo que hagas stored procedures en la DB que sean llamados directamente por este "interprete" con lo cual es mas sencilla su programacion (comando + parametros y luego respuesta)

Una posibilidad seria hacer este interprete en lenguaje ASP, con lo cual la "apertura de un socket" ya la tendrias disponible si lo implementas como un servicio REST o SOAP (uy que viejo que estoy)

Entonces en tu arduino, buscas algun codigo de implementacion de requests a un servicio web, que debe haber por ahi porque se que se puede hacer un pequeño webserver con pic asi que algo debe existir ya hecho.
 
Buenas tardes, yo estoy en mi ultimo año del técnico y en una de mis materias se me dio como proyecto una conexión de arduino con el shield de ethernet.

Ahora bien primero se me pidió una simple interfaz para prender un rele desde un servidor web, y hasta ahí no tuve problema alguno. pero luego de presentarlo se me pidió hacer el proceso inverso que desde un pulsador cambie ya sea un palabra, color o fondo en la interfaz del servidor.

ae me ocurrió empezar con un if y que si el pulsador esta presionado hacer todos los cambios en html. pero no se si eso seria lo acertado o de por si estoy cometiendo un error.

A pesar de que leo e investigo solo encuentro el como controlar X aparato desde el servidor y nunca del sentido contrario.
de por si muchas gracias por su ayuda, si tienen algun consejo o idea no dudare en implementarla para probarla ...
 
Para hacer lo inverso tienes que preparar la interfaz web para aceptar cambios, así como puedes mandar ordenes desde la web y o presentar datos del dispotitivo, el tema es mucho más complejo porque tendras que utilizar librerias tipo jqery u otras más avanzadas que te hacen esos cambios sin reinicar la página, alli eso ya entra en la programación web más que en la programación del arduino
 
No has entendido un apice por no leer, la información que has proporcionado es para guardar información en una base datos, cuando el forista lo que desea es modificar algún atributo de la página web que no es lo mismo
 
Atrás
Arriba