Ciao.
Qualcuno che ha la wiznet W5500 potrebbe provarmi questo sketch scritto "alla veloce" per favore?
Il test consiste nel ripetere il programma facendo un reset o chiudendo ll serial monitor e riaprirlo per più di 4 volte in meno di 60 secondi, le risposte devono essere pressochè immediate e fornire esattamente il dato senza andare in timeout.
Il problema che si riscontra nel W5100 è che i socket interessati o il singolo socket resta freezzato al cod. 0x15 che sarebbe la condizione di ESTABLISHED come da datasheet, trascorso il timeout passa in 0x17 per poi andare in CLOSE a 0x00.
Sembrerebbe che la W5500 avendo una gestione diversa dei socket il software sia stato rifatto e rivisto e che questo non accada.
Il problema non è la mancata risposta del server remoto, ho già appurato che 50 richieste su 50 vengono soddisfatte tutte al 100% in meno di 60 sec da un altro client.
Se effettivamente il software del 5500 non lo fa, me lo vado a spulciare e cerco di adattarlo al W5100.
restando in attesa ... porgo distinti saluti
// 29/10/2016 IDE 1.6.12
#include <SPI.h>
#include <Ethernet.h>
//#include "utility/w5100.h"
//---------------------- ETHERNET variabili -------------------------------------------
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {192,168,2,177}; //IP statico
byte gateway[] = {0,0,0,0};
byte dnss[] = {0,0,0,0};
byte subnet[] = {0,0,0,0};
int serv_port = 80;
byte dhcp = 1; // 0 = IP statico ... 1 IP dinamico restituito da DHCP
EthernetServer server(serv_port);
//http://api.ipify.org //get ip pubblico
//-------------------------------------------------------------------------------------
//---------------------- NPT variabili ------------------------------------------------
const unsigned long interval_c = 60000; // test ogni min
unsigned long previousMillis_c = 0; //contatore millisecondi aggiornamento a NTP
IPAddress ip_ntp_1(193,204,114,232);
//-------------------------------------------------------------------------------------
void setup(){
delay(300);
pinMode(4, OUTPUT); pinMode(10, OUTPUT);
digitalWrite(4, 1); digitalWrite(10, 1);
Serial.begin(115200);
Ip_Dhcp_set();
delay(2);
if(dhcp){
Serial.println("DHCP: Enable");
Ip_Dhcp_set();
}
else Ip_Static_set();
server.begin();
//for (byte i = 0; i < 4; i++) {
//Serial.print(Ethernet.localIP()[i],DEC);
//Serial.print(".");
//}
Serial.print("IP: "); Serial.print(Ethernet.localIP());
Serial.print(":"); Serial.println(serv_port);
Serial.print("SUBNET: "); Serial.println(Ethernet.subnetMask());
Serial.print("GATEWAY: "); Serial.println(Ethernet.gatewayIP());
Serial.print("DNS SERVER: "); Serial.println(Ethernet.dnsServerIP());
//Serial.print("NTP SERVER: "); Serial.print(ip_ntp_1); Serial.println(":8888");
Serial.println();
//--------------------------------------------------------------------
delay(5);
EthernetClient client;
Serial.println("Lettura IP Pubblico ATTENDERE ...");
if (client.connect("api.ipify.org", 80)) {
client.write("GET / HTTP/1.1\r\n");
client.write("Host: api.ipify.org\r\n");
client.write("Connection: close\r\n");
client.println();
} else {
Serial.print("Impossibile determinare IP Pubblico!");
Serial.println(" >> ERRORE DI RETE!");
}
String readString;
int16_t c;
while(client.connected()){
if (client.available()) {
while ((c = client.read())>0){
readString += (char)c;
if((char)c=='\n') readString="";
}
}
}
delay(1);
client.flush();
client.stop();
Serial.print("IP PUBBLICO: ");
Serial.println(readString);
Serial.println();
//--------------------------------------------------------------------
}
void loop(){
if(millis() - previousMillis_c > interval_c) {
previousMillis_c = millis();
//debug socket #0 #1 #2 #3
}
}
void Ip_Dhcp_set(){
Ethernet.begin(mac);
}
void Ip_Static_set(){
Serial.println("DHCP: Disable");
//Serial.print(Ethernet.localIP()[i],DEC);
//ip[3] = Ethernet.localIP()[3],DEC;
Ethernet.begin(mac, ip);
}