Datei von einem externen WEB- Server (URL) laden

Hallo,

ich google seid langem nach einem Weg, wo ich mit einem ESP32 von einer externen URL (https:\www.domain.de\testdaten)
eine Datei einlesen kann und die Werte dann entsprechend im ESP weiter verarbeiten kann.

In der URL liegt dann eine Datei (daten.txt) mit dem Inhalt: wert=1

Geht das überhaupt?

Ich habe mal das Beispiel von "system" aus dem Jahre 2013 gefunden, aber leider kommt da bei mir connection failed disconnecting. (Firewall und Scan = aus, WiFi connected)

Die URL- Angabe sind korrekt und der Zugriff sollte gegeben sein, da ich in einem anderen Sketch erfolgreich Daten an diese URL sende (http.POST(Data))

https://forum.arduino.cc/t/mit-wifi-shield-textdatei-von-webserver-laden-und-wert-in-variablen-speichern/177672?u=falke07

#include <SPI.h>
#include <WiFi.h>

const char* ssid     = "xxxxx";
const char* pass = "xxxx";

//int status = WL_IDLE_STATUS;
WiFiClient client;
char server[] = "https://www.domain.de/testdaten";


unsigned long lastConnectionTime = 0;           // last time you connected to the server, in milliseconds
boolean lastConnected = false;                  // state of the connection last time through the main loop
const unsigned long postingInterval = 10*1000;  // delay between updates, in milliseconds

void setup() {
  
  Serial.begin(115200);

  WiFi.begin(ssid, pass);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".1");
  }

  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
} 


void loop() {
 while (client.available()) {
    char c = client.read();
    Serial.write(c);
  }

  // if there's no net connection, but there was one last time
  // through the loop, then stop the client:
  if (!client.connected() && lastConnected) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
  }
  
  // Wenn nicht verbunden und 10 Sekunden vergagen seit letzter Verbindung, neue Verbindung
  if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) {
    httpRequest();
  }
  // Da nun verbunden: lastConnect
  lastConnected = client.connected();
}

// HTTP Verbindung zu Server:
void httpRequest() {
  // Wenn Verbindung zu Client besteht:
  if (client.connect(server, 80)) {
    
    // Get Request an TXT Datei
    client.println("GET /daten.txt HTTP/1.1");
    client.println("Host: Internetadresse der Website"); 
    client.println();
  
    lastConnectionTime = millis();
  } 
  else {
    // if you couldn't make a connection:
    Serial.println("connection failed");
    Serial.println("disconnecting.");
    client.stop();
  }

  delay(300);
}

Wäre super, wenn ich hier weiter kommen würde.

Gruß
Falke07

WiFiClient kann kein HTTPS. Du musst WiFiClientSecure benutzen.
Ich habe hier mal ein Tutorial für HTTPS mit dem ESP8266 und eingeschränkt dem ESP32 (der kann nicht alles, was der ESP8266 kann) geschrieben.
Evtl. hilft es Dir.
Wenn der Webserver unter Deiner Regie steht, würde ich die Antwort direkt als text/plain senden und nicht als Datei.

Gruß Tommy

Liege ich falsch, oder sollte das bei https nicht Port 443 sein?

Meistens ist 443 richtig. Das kann aber der Serveradmin selbst festlegen.

Gruß Tommy

WOW!!

Ihr seid die Besten!!

Ich habe das Beispiel aus Arduino von WiFiClientSecure genommen und siehe da:
die Datei konnte eingelesen werden.

Kleine Ursache, große Wirkung
Thx @Tommy56

Ui, da liegts du richtig. Seltsam, dass er es mit 80 trotzdem an den Server sendet und verarbeitet. Gut, ich habe auf dem Server http => https- Umleitung drin, aber trotzdem komme ich ja mit https auf Port 80. Sehr seltsam, muss ich nochmal nachsehen.

Danke für die schnelle hilfe :+1:

Ok, stimmt. Haste wohl wahr. :wink:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.