we are using Arduino W5100 Ethernet shield. The code is to try DHCP first and if that fails, then try the static IP. we do the Ethernet Initialization and stop every time. The library is Arduino Ethernet library.
- when we try with a wireless router, everything works and we are able to contact our web server.
- Now the wireless router is connected to a switch. switch <======> router <=====> W5100
if we try to send data using the switch directly, DHCP fails, whereas a laptop using the same cable works.
Question is, even Arduino Library has DHCP functionality, why should a laptop work where the shield is failing? The network and topology and rules should be same for both the laptop and W5100 shield. Anything we can do to debug this issue more?
Edit1 : - Switch which we are using is L3 in nature.
Below is the code which we are using at present.
while(1) {
KDEBUG("wait 10 seconds...\r\n");
// wait 10 seconds
for(loop = 10; loop > 0 ; loop--) {
wait_millis(1000);
}
KDEBUG("Try transmitting data on ethernet...\r\n");
transmit_data();
}
return 0 ;
}
void wait_millis(uint16_t num) {
for(; num > 0 ; num-- ) {
_delay_ms(1) ;
}
}
// transmit data using Ethernet
static uint8_t transmit_data() {
char request[256];
uint8_t status = 0 ;
// reset counter
counter = (counter > 254) ? 0 : counter ;
memset(&request[0], 0 , sizeof(request));
memset(&bencode[0], 0 , sizeof(bencode));
wait_millis(5000);
// try DHCP
if (Ethernet.begin(mac_address) == 0) {
KDEBUG("Failed to configure Ethernet using DHCP \r\n");
// use static IP. no return code.
Ethernet.begin(mac_address, ip_address);
} else {
KDEBUG(" Got lease from DHCP \r\n");
}
// wait for ethernet to initialize:
wait_millis(5000);
// we got a connection?
status = client.connect(server, port) ;
KDEBUGF("ethernet client status= %d \r\n", status);
if(!status) {
goto quit ;
}
KDEBUG("connected \n");
// create an HTTP request
strcat(request, "GET /api/gl868.php?data=");
strcat(request,bencode);
// 12 chars
strcat(request," HTTP/1.1 \r\n");
// 25 chars
strcat(request,"Host: ");
strcat(request,server);
strcat(request," \r\n");
// send GET request
client.println(request);
_delay_ms(1);
client.println() ;
wait_millis(1000);
client.stop();
wait_millis(1000);
if(client.connected()) {
client.stop();
}
return 1 ;
quit:
wait_millis(100);
if(client.connected()) {
client.stop();
}
return 0 ;
}