PROYECTO RFID CON ETHERNET

Hola a todos:

Llevo ya un tiempo desarrollado un proyecto de control de accesos con arduino mega, un modulo RFID RC522 y una Ethernet shield, ademas de un reloj I2C y un LCD.
Basicamente el funcionamiento es el siguiente: Extrae el tag de la tarjeta y lo sube a una tabla SQL alojada en un servidor, acompañado de fecha y hora y algunos datos de localización del lector (la idea es que haya varios conectados a la misma red). A su vez, muestra mensajes consecuentes por LCD, guarda el log en la SD de la Ethernet y activa un rele.

Ahora bien, quisiera hacerlo funcionar de manera inversa, es decir, que arduino busque el tag de la tarjeta en la tabla SQL remota y solo si lo encuentra active el rele. En caso contrario, mensaje de error.

No se si me he explicado bien. Tampoco se si esto es posible pues no he encontrado nada parecido.

¿Alguien me puede ayudar...?

Creo que con el ejemplo de “webClient” que viene en la librería de ethernet, podrías conseguirlo, no he realizado las pruebas, pero llamas a la página pasando el tag y luego esa página te entregue una respuesta tipo 0 o 1
al interpretarla Arduino decide si abrir el relé o no.

Aunque también, habría que implementar algún método para mejorar un poco la seguridad, pero comenzaría desde allí

/*
  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 Leonardo 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);
  }
}

Muchas gracias. Voy a ponerme con ello ahora mismo y ya te cuento...

Bueno, despues de darle una vueltas, pienso que el planteamiento no es el mas adecuado para el proyecto, ya que, en caso de fallo de conexion, no habria posibilidad de acceso a la tabla y por tanto, dejaría de funcionar.

Creo que lo mejor sera que la tabla este alojada en un fichero de texto en la propia SD.

Si, puede ser un gran problema, si no es estrictamente necesario que esté conectado a una base de datos en internet, lo mejor es hacer eso, porque es solucionable el tema de la desconexión, pero aún así los Arduinos más básicos creo que no son tan potentes para poder implementar algún sistema seguro de cifrados de datos , aunque ya es otro tema.

Si luego quieres tener más lectores RFID y solo una base de datos, puedes comunicarte entre ellos por medio de wifi (de forma local),rf, etc