Salve ragazzi, sto cercando di realizzare un accesso remoto con un rfid rc522 con uno shield eth e arduino uno.
Teoricamente l' idea e semplice. Leggo id del tag, arduino invia al server, il server controlla se id è nel suo database, se si mi da risposta "ok", entro, altrimenti "ko", no. Semplice giusto? no.
Lo skech è il seguente:
#include <Wire.h> //lcd
#include <LiquidCrystal_I2C.h> //lcd
#include<SPI.h>
#include<MFRC522.h>
#include<SoftwareSerial.h>
#include <Ethernet.h>
#define SS_PIN 9 //FOR RFID SS PIN BECASUSE WE ARE USING BOTH ETHERNET SHIELD AND RS-522
#define RST_PIN 8
#define No_Of_Card 3
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte server[] = {1, 1, 1, 1}; //YOUR SERVER
IPAddress ip(192, 168, 0, 104);
EthernetClient client;
SoftwareSerial mySerial(8, 9);
MFRC522 rfid(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;
LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display
char ok;
char permesso;
byte i;
byte id_temp[3][3];
String id;
void setup()
{
//LCD
lcd.init(); // initialize the lcd
lcd.init();
// Print a message to the LCD.
lcd.backlight();
/////////fine LCD
pinMode(2, OUTPUT); //led verde
pinMode(6, OUTPUT); //buzzer
Serial.begin(9600);
mySerial.begin(9600);
SPI.begin();
rfid.PCD_Init();
for (byte i = 0; i < 6; i++)
{
key.keyByte[i] = 0xFF;
}
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
Ethernet.begin(mac, ip);
}
delay(1000);
Serial.println("connessione...");
}
void loop()
{
id = "";
int m = 0;
if (!rfid.PICC_IsNewCardPresent())
return;
if (!rfid.PICC_ReadCardSerial())
return;
for (i = 0; i < 4; i++)
{
id_temp[0][i] = rfid.uid.uidByte[i];
id = id + rfid.uid.uidByte[i];
Serial.print(rfid.uid.uidByte[i]);
Serial.print(" ");
delay(50);
}
Sending_To_DB();
// Halt PICC
rfid.PICC_HaltA();
Serial.println();
// Stop encryption on PCD
rfid.PCD_StopCrypto1();
Serial.println(" \n ID: " + id); //test
}
void Sending_To_DB() { //CONNECTING WITH MYSQL
if (client.connect(server, 80)) {
Serial.println("connesso");
// Make a HTTP request:
client.println("GET /arduino.php?idcardnfc=" + id);
Serial.println("GET /arduino.php?idcardnfc=" + id); //YOUR URL
//client.print(" "); //SPACE BEFORE HTTP/1.1
client.println("HTTP/1.1");
client.println("Host: www.ilmiosito.it");
client.println();
//client.stop();
}
else {
Serial.println("connessione al file sul server web fallita");
}
if (client.connected()) {
if (client.find("permesso:")) {
//ok = client.parseInt();
client.find("ok");
float value = client.parseFloat();
Serial.print("permesso: ");
Serial.println(value);
if (permesso == ok) {
digitalWrite(2, HIGH);
Serial.println ("permesso:ok");
}
else {
digitalWrite(6, HIGH);
Serial.println ("permesso:ko");
}
}
else {
Serial.println ("disconnesso");
}
client.stop();
}
/*
if (client.find("<span"pr\">")) {
client.find(">");
float value = client.parseFloat();
Serial.print("Ilre delle azioni di Google: ");
Serial.println(value);
}}
if (client.connected()) {
if (client.find("permesso:")) {
char permesso = client.parseInt();
Serial.print("permesso:");
Serial.println (permesso);
if (permesso == ok)
char ok = client.read();
Serial.print(ok);
client.stop();
lcd.backlight();
lcd.setCursor(3, 0);
lcd.print(codice);
delay (3000);
lcd.clear();
digitalWrite(2, HIGH);//led verde
digitalWrite(6, HIGH); //buzzer
delay(50);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
delay(150);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
delay(500);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
delay(10);
} else {
// if you didn't get a connection to the server:
Serial.println("connection failed");
}
}*/
}
il codice php è questo:
<?php
$idnfc = $_GET['idcardnfc'];
$idnfcpost = $_POST['idcardnfc'];
if($idnfc=="11210354165" || $idnfcpost=="11210354165" ){
$messaggio = array('messaggio'=> "Sei abilitato ad entrare", 'permesso'=>'ok');
}else{
$messaggio = array('messaggio'=> "Non sei abilitato ad entrare", 'permesso'=>'ko');
}
echo json_encode($messaggio);
da broser:
{"messaggio":"Non sei abilitato ad entrare","permesso":"ko"}
Questo e invece il monitor seriale:
connessione...
112 103 54 165 connesso
GET /arduino.php?idcardnfc=11210354165
disconnesso
ID: 11210354165
Sono sincero, ho quasi esaurito la quantità di scrittura per i tentativi fatti.
perchè non riesco ad riceve il permesso ok? dove sbaglio?
grazie a tutti.