Rothschopf Werner

rowex ganz privat

Angebote

Der Webclient - Senden mittels POST

Angenommen wir möchten erreichen, dass die Wetterstation Daten an einen zentralen Server sendet. Dann müssen wir den ESP als Webclient arbeiten lassen.

Für das senden der Daten halten wir uns an das Beispiel:

ESP8266HTTPClient | BasicHttpclient

Im konkreten Anwendungsfall möchten wir jedoch nicht eine Seite "abfragen" = GET sondern wir möchten Daten "übertragen" = POST. Der wesentliche Unterschied ist, dass Parameter bei GET an den URI nach einem ? angehängt und mit & verkettet werden, hingegen die Parameter bei einem POST im Message-Body enthalten sind. Ansonsten gleicht sich der Aufbau der Parameterübertragung und folgendes steht beíspielhaft im Message Body:

ParameterName=Wert&weitererParameter=Wert

Wie schon beim Webserver, lege ich auch alle Teile des Webclients in einen eigenen Tab. Für den Webclient heißt der Tab "client". Aktuell besteht der webclient nur aus einer einzigen Funktion zum senden von Daten: sendPost()

void sendPost()
// Variant of https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266HTTPClient
{
Serial.println(F("D050 sendPost()"));
String message="board=";
message += TXT_BOARDID;
message += F("&vcc=");
message += ESP.getVcc();
message += "&output1=";
message += digitalRead(OUTPUT1_PIN);
message += "&button1=";
message += digitalRead(BUTTON1_PIN);

HTTPClient http;
http.begin(sendHttpTo);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
http.POST(message);
http.writeToStream(&Serial);
http.end();
}

Im obigen Beispiel werden 4 Werte übertragen: board, vcc, output1 und button1.

Die Resource an die die Daten übergeben werden,  muss im Deklarationsteil definiert sein. Das kann ein "echter Webserver" oder auch ein anderer ESP8266-Webserver sein.

const char* sendHttpTo = "http://my.server.tld/d.php"; // the module will send information to that server/resource

Auf einem Webserver mit PHP können diese Daten empfangen werden, und die Parameter beispielsweise  mit

if(isset($_POST['vcc'])) {$vcc = $_POST['vcc'];}

ausgelesen werden, wobei hier natürlich sämtliche Absicherungen bezüglich Code Injection zu beachten sind.

Den Empfang dieser Daten auf einem ESP8266 sehen wir uns im nächsten Kapitel an:
"Webserver - Empfangen von sonstigen Daten".


Links

  • Amazon (Suchlink für NodeMCU V2 mit CP2102)
  • Amazon (Alternativ: Wemos D1 pro Mini)

Protokoll

erstellt: 2018-09-02 | Stand: 2018-09-05