Finalmente dopo settimane e settimane di tentativi sono riuscito a risolvere, lo sketch funziona.
Non è stato facile sono sincero, tanto che la maggior parte del codice è stato scoppiezzato un po qua e un po la sul web.
Vorrei ringraziare a tutti voi, che mi avete risposto e dato dritte, suggerimenti ma ancor di più ad Mr. Plin dove ho preso parte del codice.
A breve inserirò anche il codice php che vorrei condividere, ma lo sto ancora aggiustando, diciamo che è ancora in versione beta.
#include <SPI.h>
#include <Ethernet.h>
#include <MFRC522.h>
#include<LiquidCrystal_I2C.h>
#include<Wire.h>
#include <utility/w5100.h>
//********** SETUP **********
const IPAddress server(1, 1, 1, 1);//IP SERVER, NON IL SITO PERCHE E' PIU VELOCE
const int serverPort = 80;//PORTA SERVER
EthernetClient client;
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0xE5, 0x0F };//MAC ADDRESS SCHEDA DI RETE (VEDI ETICHETTA SUL RETRO)
byte ip[] = {192, 168, 0, 121};//INDIRIZZO IPV4
byte subnet[] = {255, 255, 255, 0};//INDIRIZZO SUBNET
byte gateway[] = {192, 168, 0, 1};//INDIRIZZO GATEWAY
const String gate = "frosinone";//LOCAZIONE
//master card
const String master0 = "706736a2";//MASTER CARD, IN CASO DI ASSENZA DI LINEA QUESTA CARTA PUO ACCEDERE UGUALMENTE
const String master1 = "xxxxxxxx";//SE OCCORE
LiquidCrystal_I2C lcd(0x27, 20, 4);//(A0, A1, A2, A3, A4, A5);
#define SS_PIN 8// //PIN SDA SULLASCHEDA RFID
#define RST_PIN 9//PIN RESET (RST) SULLA SCHEDA RFID
MFRC522 mfrc522(SS_PIN, RST_PIN);// CREO ISTANZA MFRC522.
String ID = "";//Codice ID-RFID IN HEX
const int chipSelectPinETH = 10;//SS SU SCHEDA ETHERNET SHIELD
const int chipBuzzerPin = 3;//USCITA BUZZER
const int chipRelayPin = 4;//USCITA RELE'
const int activateTime = 1000;//TEMPO ATTIVAZIONE RELE'
const int chipLedPin = 5;//USCITA LED
//********** END SETUP **********
void setup() {
Serial.begin(9600);
SPI.begin();
//SPI.setClockDivider(SPI_CLOCK_DIV128); //2, 4, 8, 16, 32, 64 or 128.//SE ATTIVATO, ABBASSO IL CLOCK PER SUPPORTARE LUNGHEZZE MAGGIORI DEI CAVI
while (!Serial) {
; //ATTENDI LA CONNESSIONE DELLA PORTA SERIALE. SOLO PER LEONARDO
}
lcd.begin(20, 4);
lcd.init();
lcd.backlight();
pinMode(chipSelectPinETH, OUTPUT);//PIN 10 CONTRALLA LE ETHERNET, HIGH=DISATTIVATA , LOW=ATTIVATA
pinMode(SS_PIN, OUTPUT);//PIN 8 CONTROLLO RFID, HIGH=DISATTIVATA , LOW=ATTIVATA
setupRelay();
setupBuzzer();
setupLed();
digitalWrite(chipSelectPinETH, HIGH);//DISABILITO LA ETHERNET
digitalWrite(SS_PIN, HIGH); //DISABILITO RFID
delay(250);
Ethernet.begin(mac, ip);
lcd.setCursor(0,0);
lcd.print(" ATTESA DHCP ");
lcd.setCursor(0,0);
lcd.print(" MAGAZZINO ");
delay(1000);
lcd.setCursor(0,1);
lcd.print(" INGRESSO VIETATO ");
delay(1000);
digitalWrite(chipSelectPinETH, HIGH);//DISABILITO LA ETHERNET
mfrc522.PCD_Init(); //INIZIALIZZO RFID
beep();//SEGNALO CHE E' ATTIVO
W5100.setRetransmissionTime(0x1388);//CAMBIO IL TIMEOUT DELLA LAN
W5100.setRetransmissionCount(3);
}
void loop()
{
lcd.setCursor(0,2);
lcd.print("* AVVICINARE CARTA *");
lcd.setCursor(0,3);
lcd.print("********************");
setLed(HIGH);
delay(50);
setLed(LOW);
delay(450);
ID = getCard();
if (ID != "")
{
beep();
connectOnHttp(ID);
}
setLed(HIGH);
delay(50);
setLed(LOW);
delay(450);
ID = getCard();
if (ID != "")
{
beep();
connectOnHttp(ID);
}
delay(200);
}
//BUZZER
void beep()
{
digitalWrite(chipBuzzerPin, HIGH);
delay(120);
digitalWrite(chipBuzzerPin, LOW);
delay(120);
}
void beepLong()
{
digitalWrite(chipBuzzerPin, HIGH);
delay(5000);
digitalWrite(chipBuzzerPin, LOW);
delay(120);
}
void setupBuzzer()
{
pinMode(chipBuzzerPin, OUTPUT);
digitalWrite(chipBuzzerPin, LOW);
}
//HTTP
void connectOnHttp(String mynum)//CONTROLLO VIA HTTP SE ID E' ABILITATO
{
if (mynum == master0 ||
mynum == master1
)
{
lcd.setCursor(0,3);
lcd.print(" MASTER CARD "); //ATTIVO RELE'
activate();
return;
}
String returnWebStr = "";
digitalWrite(SS_PIN, HIGH);//DISABILITO RFID
digitalWrite(chipSelectPinETH, LOW);//ABILITO LA ETHERNET
lcd.setCursor(0,2);
lcd.print(" COLLEGAMENTO >>> ");
delay (1000);
if (client.connect(server, serverPort))
{
lcd.setCursor(0,2);
lcd.print(" COLLEGATO ");
delay (1000);
client.println("GET http://xxxxx.it/arduino.php?idcardnfc=" + ID + "&gate=" + gate );
client.print(" ");
client.println("Connection: close");
client.println();
}
else {
lcd.setCursor(0,3);
lcd.print("COLLEGAMENTO FALLITO");
delay (1000);
}
while (client.connected())
{
if (client.available())
{
char c = client.read();
returnWebStr += c;
}
}//SE IL SERVER E' DISCONNESSO, FERMA IL CLIENT
if (!client.connected()) {
client.stop();
if (returnWebStr.substring(0, 2) == "ok" )
{
lcd.setCursor(0,3);
lcd.print("ACCESSO AUTORIZZATO");
delay (1000);
beep();
activate();
}
else
{
lcd.setCursor(0,3);
lcd.print(" ACCESSO NEGATO ");
delay (1000);
setLed(HIGH);
beepLong();
setLed(LOW);
}
}
delay(1000);
returnWebStr = "";
digitalWrite(chipSelectPinETH, HIGH);//DISABILITO LA ETHERNET
digitalWrite(SS_PIN, LOW);//ABILITO RFID
}
//LED
void setupLed()
{
pinMode(chipLedPin, OUTPUT);
digitalWrite(chipLedPin, LOW);
}
void setLed(boolean state)
{
digitalWrite(chipLedPin, state);
}
//RELE
void setupRelay()
{
pinMode(chipRelayPin, OUTPUT);
digitalWrite(chipRelayPin, HIGH);
}
void activate()
{
beep();
setLed(HIGH);
digitalWrite(chipRelayPin, LOW);
delay(activateTime);
digitalWrite(chipRelayPin, HIGH);
setLed(LOW);
delay(500);
}
//RFID
String getCard()
{
if ( ! mfrc522.PICC_IsNewCardPresent()) {//CREO NUOVA CARTA
return "";
}
if ( ! mfrc522.PICC_ReadCardSerial()) {//SELEZIONA UNA DELLE CARTE
return "";
}
String uid_s = "";
if (!mfrc522.PICC_IsNewCardPresent() && !mfrc522.PICC_ReadCardSerial()) {
for (byte i = 0; i < mfrc522.uid.size; i++) {
String uid_a = String(mfrc522.uid.uidByte[i] < 0x10 ? "0" : "");
String uid_b = String(mfrc522.uid.uidByte[i], HEX);
uid_s = uid_s + uid_a + uid_b;
}
}
return uid_s;
}
ma la sezione di codice che mi ha fatto di più elencare il calendario sono state queste 4 rige:
if (client.connect(server, serverPort))
{
lcd.setCursor(0,2);
lcd.print(" COLLEGATO ");
delay (1000);
client.println("GET http://xxxxx.it/arduino.php?idcardnfc=" + ID + "&gate=" + gate );
client.print(" ");
client.println("Connection: close");
client.println();
non capisco esattamente il motivo ma sia sui sketch esempio e sia sul web, ho trovato sempre il codice scritto cosi, e dava sempre errore "pagina non trovata" il che era impossibile.
client.println("GET /arduino.php?idcardnfc=" + id);
Serial.println("GET /arduino.php?idcardnfc=" + id); //Test
client.print(" "); //SPACE BEFORE HTTP/1.1
client.println("HTTP/1.0");
client.println("Host: www.innet.it");
client.println();
//client.stop();
Ma eliminando il "client.println("HTTP/1.1 o 1.0"); client.println(host: "www.ilmiosito.it"); e inserendo direttamente nel GET /www.ilmiosito.it/arduino.php?idcardnfc=" + id;
Ha funzionato.