Salve ragazzi , è da un paio di settimane che lavoro a questo progetto . Vorrei creare questo sistema di controllo accessi tramite autenticazione rfid. Il tutto è correlato di database dove viene cercato se il codice rfid è presente consente l'accesso , mentre se non è presente non consente l'accesso .
Fino a qualche giorno fa tutto "funzionava" fino alla connessione del database. Al passaggio del tag rfid non effettuava la query ,dandomi un errore di sql syntax. Adesso dopo 5 giorni mi rimetto a testare e non si collega più al DB, senza aver cambiato nulla (IP del server uguale).
Potete aiutarmi a capire il perchè? Ho usato arduino uno , RC522 e Ethshield .
vi posto il codice
Questo programma permette di collegarsi ad un DB MySQL per verificare se il codice della tessera magnetica è corretto
PINOUT:
RC522 MODULE Uno/Nano
SDA D10 //sposto da 10 a 4
SCK D13
MOSI D11
MISO D12
IRQ N/A
GND GND
RST D9
3.3V 3.3V
#include "SPI.h"
#include "Ethernet.h"
#include "sha1.h"
#include "mysql.h"
#include "RFID.h"
/* Vengono definiti PIN del RFID reader*/
#define SDA_DIO 3 // 53 per Mega lo sposto a 4 perche interferenza SPI CON LA SHIELD
#define RESET_DIO 9
#define delayRead 1000 // Time of delay 1000
#define LEDGREEN 5 //13-->3
#define LEDRED 6 //12
/* Viene creata una istanza della RFID libreria */
RFID RC522(SDA_DIO, RESET_DIO);
byte mac_addr[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server_addr(192,168,1,11); //192.168.1.5 macchina virtuale
Connector my_conn;
char user[] = "bob"; //database in virtualmachine server2 con permessi
char password[] = "secret";
char QUERY_POP[50] = "SELECT * FROM auth.codice as AK Where AK.code='%s'";
char query[65];
//as AK Where AK.char QUERY_POP[50] = "Select * From Auth.Codes as AK Where AK.Code='%s'";
void setup() {
Ethernet.begin(mac_addr);
Serial.begin(9600);
/* Abilita SPI*/
SPI.begin();
/* Viene inizilizzato RFID reader */
RC522.init();
pinMode(5,OUTPUT); //13 AL POSTO DI 4--->5
while (!Serial);
delay(1000);
Serial.println("Connessione al Database Auth in corso ...");
if (my_conn.mysql_connect(server_addr, 3306, user, password)){
Serial.println("Connesso al Database Auth!");
} else {
Serial.println("Connessione fallita al Database!");
}
}
void loop() {
//Serial.println("Comincia il loop()");
/* Temporary loop counter */
byte i;
// Se viene letta una tessera
if (RC522.isCard())
{
// Viene letto il suo codice
RC522.readCardSerial();
Serial.println("DEBUG 1");
String codiceLetto ="";
Serial.println("Codice delle tessera letto:");
Serial.println("DEBUG 2");
// Viene caricato il codice della tessera, all'interno di una Stringa
for(i = 0; i <= 4; i++)
{
codiceLetto+= String (RC522.serNum[i],HEX);
codiceLetto.toUpperCase();
Serial.println("DEBUG 2");
}
char charBuf[12];
codiceLetto.toCharArray(charBuf, 12);
Serial.println(codiceLetto);
Serial.println("DEBUG 3");
if(isAuthorized(charBuf)){
Serial.println("Tessera autorizzata");
accendiLed(LEDGREEN);
}else{
Serial.println("Tessera non autorizzata");
accendiLed(LEDRED);
}
delay(delayRead);
}
}
// Controlla se un codice è autorizzato
boolean isAuthorized(char code[]){
sprintf(query, QUERY_POP,code);
Serial.println("DEBUG 4");
my_conn.cmd_query(query);
Serial.println("DEBUG QUERY AUTHORIZED");
my_conn.get_columns();
row_values *row = NULL;
int number = 0;
while (row = my_conn.get_next_row()) {
number++;
my_conn.free_row_buffer();
}
my_conn.free_columns_buffer();
if(number==0){
return false;
}else{
return true;
}
}
// Questa funzione permette di accendere un LED per un determinato periodo
void accendiLed(int ledPin){
digitalWrite(ledPin,HIGH);
delay(delayRead);
digitalWrite(ledPin,LOW);
}