Go Down

Topic: Arduino y php consulta (SOLUCIONADO) (Read 9 times) previous topic - next topic

Sergegsx

sin ver el codigo no podemos ayudarte.
no hace falta que pongas 2 paginas de código, tan solo lo que este relacionado con el problema. intenta hacer un código básico que haga solamente lo que dices, pedir al servidor datos continuamente, pruebalo y si no funciona pon el código aquí.

Pipper

Bueno a ver esto es lo mas cerca q he estado...

Code: [Select]
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 88 };
byte server[] = {192, 168, 1,33  };


void setup()
{
Serial.begin(9600);    
}
void loop()
{
delay(500);
recibirdatos();
}
void recibirdatos()
{
Ethernet.begin(mac, ip);
Client client(server, 80);
Serial.println("Dentro de la funcion");
delay(100);

if (client.connect()) {
Serial.println("Connected");
client.println("GET /prueba2.php?led=1");
char c = client.read();
Serial.println(c);
   }
else
{
Serial.println("No se puede conectar");
}
client.stop();
while(client.status() != 0)
{
  delay(5);
}
}


Lo que me devuelve por pantalla es:

Dentro de la funcion
connected
y                 //esa y con dos puntitos arriba

osea se repite varias veces logro eso pero no obtengo las variables como cuando lo hacia solo una ves... solo obtengo esa y con dos puntitos...

Sergegsx

#17
Feb 03, 2012, 07:06 am Last Edit: Feb 03, 2012, 07:10 am by Sergegsx Reason: 1
me cuesta creer que me has hecho caso las 2 o 3 veces que te he puesto que te leas el ejemplo Webclient que viene con arduino, pero bueno, aqui va lo que detecto en tu codigo.

Quote

#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 88 };
byte server[] = {192, 168, 1,33  };


void setup()
{
Serial.begin(9600);        
Ethernet.begin(mac, ip);        // SOLO TIENES QUE INICIAR LA PLACA ETHERNET UNA VEZ, IGUAL QUE LO HACES CON EL SERIAL.
Client client(server, 80);        // LO MISMO AL DECLARAR EL CLIENTE.
}
void loop()
{
delay(2500);               // AUMENTA ESTE DELAY INICIALMENTE PARA DARLE TIEMPO AL ARDUINO A CONECTAR Y DESCONECTAR DEL SERVIDOR SIN SATURARLO
recibirdatos();               
}


void recibirdatos()
{
Serial.println("Dentro de la funcion");
delay(100);                  

if (client.connect()) {
Serial.println("Connected");
client.println("GET /prueba2.php?led=1");
char c = client.read();// SI HUBIESES MIRADO EL EJEMPLO QUE TE PROPUSE VERIAS QUE NECESITAS UN while PARA LEER TODO LO QUE CONTESTA LA PAGINA WEB PHP, TU SOLO ESTAS LEYENDO 1 CARACTER AQUI
Serial.println(c);
 
if (client.available()) {
   char c = client.read();
   Serial.print(c);
 }

}
else
{
Serial.println("No se puede conectar");
}
  client.stop();
while(client.status() != 0)          // ESTO NO SE PORQUE LO PONES, YO EN MIS EJEMPLOS NUNCA LO HE USADO AUNQUE TIENE SENTIDO LO QUE HACES
{
 delay(5);
}


 // if the server's disconnected, stop the client:
 if (!client.connected()) {                     // DE TODAS FORMAS YO PROBARIA CON LO QUE TE VIENE EN EL EJEMPLO WEBCLIENT.
   Serial.println();
   Serial.println("disconnecting.");
   client.stop();


}


Elimina todo lo que este en rojo.
si te funciona todo bien, vuelve a poner el codigo que funciona aqui para que otros puedas beneficiarse

Pipper

Bueno a ver:

1° En post anteriores mios esta postiado el ejemplo del "webclient" andando bien consultando mas de una variable, pero, si leyeron, que me parece q no...justamente lo que preguntaba como podia adaptarlo para leer constantemente en el servidorweb, es mas puse las modificaciones que le habia echo sin exito para lograr lo que sigo preguntando...

2°Si no declaro el client dentra  la funcion, vos me pones que lo declare en el setup, me tira un error que no se ha declarado dentro del scope, por eso yo lo habia puesto dentro de la funcion (debido a pruebas anteriores que he echo), despues el codigo sigue sin resolver lo q intento, entra en la funcion entra en el if pero no imprime nada....

saludos

Sergegsx

en el ejemplo de WebClient lo pone arriba del todo.
(yo me he colado y lo he metido en el setup)

Code: [Select]
/*
  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

*/

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

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,1,177 };
byte gateway[] = { 192,168,1,1 };
byte server[] = { 74,125,39,147 };  //{ 173,194,33,104 }; // Google

// 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):
Client client(server, 80);

void setup() {
  // start the Ethernet connection:
    Ethernet.begin(mac, ip, gateway); // Ethernet.begin(mac, ip);
  // start the serial library:
  Serial.begin(9600);
  // 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()) {
    Serial.println("connected");
    // Make a HTTP request:
    client.println("GET /search?q=arduino HTTP/1.0");
    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:
    for(;;)
      ;
  }
}


Pipper

Perfecto es el mismo codigo que he usado, si anda joya, pero se realiza una sola ves y termina con disconect, osea ese codigo anda pero solo una ves no se queda preguntando, ese mismo codigo le he intentado hacer las mil y una modificaciones para intentar que se quede preguntando sin lograr resultado...por ejemplo algo que no entiendo de ese codigo es el for(;) que esta al final si lo sacas se queda en un lazo infinito pero la parte del disconect...bue con ese codigo mismo he intentado meterle funciones cosa de q se ejecute varias veces nada...

Sigo insistiendo el codigo ese lo tengo funcionando bien y es mas lo hice para recibir en tramas lo que optengo y me anda joya....pero solo se hace una sola consulta....sigo insistiendo como logro hacer consultas constantes, con ese codigo o con el q sea, llevo posta 4 dias intentando todo, he intentado programar utilizando la logica y hasta la no logica por que ya no se q mas hacer :(.

Sergegsx

por mucho que insistas  como tu dices, lo que tienes que hacer es entender lo que estas haciendo. hasta que no comprendas el ejemplo webclient linea a linea no puedes pretender hacer programas mas complejos
por ejemplo el for;; lo usa para que el prgrama se pare en ese punto
el webclient solo lo hace una vez porque la llamada la haces en la funcion Setup() que como sabras (espero) es la que se llama al principio del programa y sola una vez
Code: [Select]
if (client.connect()) {

Pipper

Exacto...por que te pensas q despues lo he puesto dentro de una funcion ;), y dentro del loop estoy llamando a la funcion...pero bue seguire intentado cosas, supongo algun dia lo voy a lograr :), perseverancia ante todo :), saludos.

Sergegsx

pero fuera de toda funcion es donde deberia de estar. justo arriba del todo, has probado ahi?

Pipper

#24
Feb 03, 2012, 04:54 pm Last Edit: Feb 03, 2012, 04:56 pm by Pipper Reason: 1
A ver:

Code: [Select]

//declaramos variables globales, tambien el cliente

void setup(){
//Aca solamente inicio el serial y el Ethernet
}
void loop(){
//aca llamo a la funcion recibirdatos
//aca es donde pongo si el cliente esta disponible leer los datos
}
void recibirdatos(){
//aca es donde intento hacer la coneccion al servidor y mando el GET
}


Fijate si tengo algun error de concepto, que pueda ser el por que no esta andando para mi deberia de estar funcionando asi, pero bue por ahi estoy fallando en la logica, y es por eso que pido ayuda no :P...

Sergegsx

y donde inicias la placa Ethernet? Ethernet. begin?
que version de IDE estas usando? el 1.0 o 23 o 22?

Pipper

Ahi modifique el de arriba me falto poner je, en el setup lo inicio, ya que arriba de todo no me deja iniciarlo, tambien he probado iniciarla dentro de la funcion...es el mismo resultado.

IDe 22.

Sergegsx

postea tu codigo tal cual lo tienes ahora. a ver que me da a mi. tengo 10 minutos y luego tengo que irme, pero igual me da tiempo a sacar algo.

Pipper

Code: [Select]
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 88 };
byte server[] = {192, 168, 1,33  };
Client client(server, 80);

void setup()
{
Serial.begin(9600);         
Ethernet.begin(mac, ip);       
}
void loop()
{
delay(5000);               
recibirdatos();
if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }
}

void recibirdatos()
{
Serial.println("Dentro de la funcion");
delay(100);                 

if (client.connect()) {
Serial.println("Connected");
client.println("GET /prueba2.php?led=1");
}
else
{
Serial.println("No se puede conectar");
}

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

Sergegsx

no llegaste a cambiar lo que te dije del "if" por el "while" cuando lees los datos por lo que solo te estaba leyendo una letra.
a mi me funciona el codigo, he modificado la llamada al ethernet porque yo uso un router y que cambiado el servidor para que llame a google y que este conteste

Quote
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 88 };
//byte server[] = {192, 168, 1,33  };
byte server[] = { 74,125,39,147 };  //{ 173,194,33,104 }; // Google
byte gateway[] = { 192,168,1,1 };

Client client(server, 80);

void setup()
{
Serial.begin(9600);         
Ethernet.begin(mac, ip, gateway);       
}
void loop()
{
delay(5000);               
recibirdatos();

while (client.available())
   { //if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }
}

void recibirdatos()
{
    Serial.println("Dentro de la funcion");
    delay(100);                 
   
    if (client.connect()) {
        Serial.println("Connected");
        client.println("GET /prueba2.php?led=1");
}
else
{
    Serial.println("No se puede conectar");
}

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

Go Up