I trying to connect ESP32 to LAN over ethernet using ENC28J60 with UIPEthernet library. I can get ip from DHCP just fine, and the first ever connection works ok. However the next connection doesn't work and simply hangs. What might be the problem?
Code: Select all
#include <UIPEthernet.h>
EthernetClient ethClient;
int maxtry = 0;
uint8_t mac[6] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
void BeginEth(){
Ethernet.init(5);
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// Check for Ethernet hardware present
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :(");
while (true) {
delay(1); // do nothing, no point running without Ethernet hardware
}
}
if (Ethernet.linkStatus() == LinkOFF) {
Serial.println("Ethernet cable is not connected.");
}
// try to configure using IP address instead of DHCP:
//Ethernet.begin(mac, ip, myDns);
} else {
Serial.print("DHCP assigned IP ");
Serial.println(Ethernet.localIP());
}
}
void Test(){
String url = "someurl";
String endpoint = "someendpoint";
String json_body = "AAA";
while (!ethClient.connected() && maxtry < 3) {
if (ethClient.connect(url.c_str(), 80)) {
ethClient.print(F("POST "));
ethClient.print(endpoint);
ethClient.println(F(" HTTP/1.1"));
ethClient.print(F("HOST: "));
ethClient.println(url);
ethClient.println(F("Content-Type: application/json"));
ethClient.print(F("Content-Length: "));
ethClient.println(json_body.length());
ethClient.println();
ethClient.print(json_body);
} else {
Serial.println("No connect");
maxtry++;
delay(1000);
}
}
if (!ethClient.connected()) {
Serial.println("Not connected");
ethClient.stop();
return;
}
unsigned long timeout = millis();
while (ethClient.available() == 0) {
if (millis() - timeout > 5000) {
ethClient.stop();
delay(1000);
Serial.println("Timeout");
}
}
while(ethClient.available())
Serial.print(ethClient.readStringUntil('\n'));
Serial.println();
ethClient.stop();
}
void setup(){
Serial.begin(115200);
BeginEth();
delay(2000);
}
void loop(){
Serial.println("Sending request");
Test();
}