this is the sketch that i am using:
#include <EthernetENC.h>
#include <ArduinoOTA.h> // only for InternalStorage
#include <Ethernet.h>
#include <ArduinoHttpClient.h>
#include <EthernetClientSecure.h>
const short VERSION = 1;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
#ifdef ARDUINO_SAM_ZERO // M0
#define Serial SerialUSB
#endif
const char* SERVER = "212.24.108.195"; // must be string for HttpClient
const unsigned short SERVER_PORT = 5001;
const char* URL = "https://2ii5.l.time4vps.cloud/webUI/update.bin"; // fixed URL for update file
const unsigned long CHECK_INTERVAL = 5000;
static unsigned long previousMillis;
void handleSketchDownload() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis < CHECK_INTERVAL)
return;
previousMillis = currentMillis;
EthernetClientSecure transport;
transport.setInsecure();
HttpClient client(transport, SERVER, SERVER_PORT);
Serial.print("Check for update file ");
Serial.println(URL);
client.get(URL);
Serial.println(client.get(URL));
Serial.println(client.responseBody());
int statusCode = client.responseStatusCode();
Serial.print("Update status code: ");
Serial.println(statusCode);
if (statusCode != 200) {
client.stop();
return;
}
long length = client.contentLength();
if (length == HttpClient::kNoContentLengthHeader) {
client.stop();
Serial.println("Server didn't provide Content-length header. Can't continue with update.");
return;
}
Serial.print("Server returned update file of size ");
Serial.print(length);
Serial.println(" bytes");
if (!InternalStorage.open(length)) {
client.stop();
Serial.println("There is not enough space to store the update. Can't continue with update.");
return;
}
byte b;
while (length > 0) {
if (!client.readBytes(&b, 1)) // reading a byte with timeout
break;
InternalStorage.write(b);
length--;
}
InternalStorage.close();
client.stop();
if (length > 0) {
Serial.print("Timeout downloading update file at ");
Serial.print(length);
Serial.println(" bytes. Can't continue with update.");
return;
}
Serial.println("Sketch update apply and reset.");
Serial.flush();
InternalStorage.apply(); // this doesn't return
}
void setup() {
Serial.begin(115200);
while (!Serial);
Serial.print("Sketch version ");
Serial.println(VERSION);
Serial.println("Initialize Ethernet with DHCP:");
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
while (true);
}
Serial.println("Ethernet connected");
}
void loop() {
// check for updates
handleSketchDownload();
// add your normal loop code below ...
}