Autor Tema: Comunicar Arduino con pagina web  (Leído 1979 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado chronos682

  • PIC10
  • *
  • Mensajes: 6
Comunicar Arduino con pagina web
« en: 01 de Octubre de 2015, 02:48:26 »
Hola a todos, estoy utilizando este código para intentar comunicar el arduino leonardo con shield ethernet con una página escrita en php y alojada en godaddy:

Código: [Seleccionar]
  Web client

 This sketch connects to a website (http://www.google.com)
 using an Arduino Wiznet Ethernet shield.

 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13

 created 18 Dec 2009
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe, based on work by Adrian McEwen

 */

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

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// if you don't want to use DNS (and reduce your sketch size)
// use the numeric IP instead of the name for the server:
//IPAddress server(74,125,232,128);  // numeric IP for Google (no DNS)
char server[] = "www.google.com";    // name address for Google (using DNS)

// Set the static IP address to use if the DHCP fails to assign
IPAddress ip(192, 168, 0, 177);

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    // try to congifure using IP address instead of DHCP:
    Ethernet.begin(mac, ip);
  }
  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:
  if (client.connect(server, 80)) {
    Serial.println("connected");
    // Make a HTTP request:
    client.println("GET /search?q=arduino HTTP/1.1");
    client.println("Host: www.google.com");
    client.println("Connection: close");
    client.println();
  } else {
    // kf you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

void loop() {
  // if there are incoming bytes available
  // from the server, read them and print them:
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    // do nothing forevermore:
    while (true);
  }
}

Tengo un inconveniente y es que la ip que me proporciona godaddy no es dedicada y por lo tanto no puedo acceder al servidor a través de la ip, intenté hacer la conexión con el nombre de dominio y tampoco funciona, lo extraño es que yo tengo instalado el wamp en mi pc y al subir la página al servidor apache en local y poner la ip local funciona todo perfecto. Guarda la información de los sensores en la base de datos sin ningún problema. Sospecho que el problema está en el router que está impidiendo la comunicación con el exterior, ya abrí el puerto 80 pero no sé específicamente qué otros puertos abrir o qué otras configuraciones tengo que hacer en el router. Ya he probado con muchos códigos y posibles soluciones pero nada funciona. Ya desactivé el firewall, y tampoco funciona. Muchas gracias por responder. Quedo atento.
« Última modificación: 01 de Octubre de 2015, 11:36:23 por chronos682 »

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2226
Re: Comunicar Arduino con pagina web
« Respuesta #1 en: 02 de Octubre de 2015, 11:18:20 »
En un hosting compartido múltiples dominios hacen uso de la misma ip. Si intentas acceder a tu espacio usando solamente la ip el sistema será incapaz de dar una respuesta correcta y te dirigirá a una página establecida por defecto. Por ejemplo: http://xxx.xxx.xxx.xxx/cgi-sys/defaultwebpage.cgi.

En algunos casos es posible el acceso añadiendo a la ip el nombre de usuario precedido del signo ~. Por ejemplo: http://xxx.xxx.xxx.xxx./~nombre. El nombre es el que usamos para acceder al panel de control de nuestro sitio y, por lo general, será el mismo que el nombre de dominio sin extensión, pero no siempre es así. Puedes probar si funciona en un navegador antes de liarte con el código en Arduino...

De todas formas, aunque puedas acceder de esta manera, habrá cosas que no funcionen y siempre será preferible usar un nombre de dominio en lugar de la ip.

Te dejo un ejemplo que -creo- hace lo que tú necesitas. Acceso a dominio y uso de GET para la toma de datos: http://goo.gl/xONV42

un saludo

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2226
Re: Comunicar Arduino con pagina web
« Respuesta #2 en: 02 de Octubre de 2015, 11:45:11 »
Oppppsss, veo que cambiaste el código...

Es básicamente eso, indicar dominio:
char server[] = "nombre_dominio";

y hacer las peticiones a la página en cuestión:
client.println("GET /nombre_pagina.php?...");