Forum: Mikrocontroller und Digitale Elektronik Send JSON Data with ESP32 over HTTP by WLAN -> no Answer


von chdaru (Gast)


Lesenswert?

Ich benutze ein Wemos Lolin ESP32 Board welches ich mit Arduino 
programmiere.
Mein Ziel ist es, Json Daten mit HTTP via WLAN zu senden. Die Json Daten 
konnte ich auch korrekt zusammenstellen und ausgeben lassen.
Leider funktioniert es mit dem HTTP noch nicht so ganz. Ich erhalte 
keine Antwort, respektive nur eine leere Zeile. Erwartet wäre ein 200 OK 
ab der 9.Stelle. Daher gehe ich auch davon aus, dass die HTTP Verbindung 
noch nicht ganz korrekt ist. Die WLAN Verbindung hat funktioniert. Ich 
konnte das Gerät im WLAN sehen.
Die client.connect If-Schlaufe habe ich bereits kontrolliert. In diese 
springt er rein.
Ich bin nicht sicher ob ich wirklich direkt die URL gerade zu Beginn 
bereits mit UpdateDataJson senden kann oder ob ich zuerst einmal mit dem 
ServerNamen statt Update... senden muss und danach erneut senden mit 
Update...
Ich weiss dass es bei HTTP etwas gibt bezüglich Cariage Return, Newline, 
Linefeed etc.
Aber so wie ich das sehe ist das korrekt, da ich nach dem Connection 
Close noch ein leeres println sende. Oder nicht?

Ich hoffe Ihr könnt mir weiterhelfen. Vielen Dank!
Btw: Die Forumssuche habe ich natürlich schon fleissig genutzt. Habe 
jedoch keine Lösung zu meinem Problem gefunden.
1
#include <WiFi.h>
2
#include <ArduinoJson.h>
3
#include <ArduinoHttpClient.h>
4
//#include <HTTPClient.h>
5
6
const char* ssid     = "XXXX";
7
const char* password = "XXXX";
8
9
//Create WiFi Object
10
WiFiClient client;
11
const char _ip_Adress[] = "XX.XXX.XXX.XXX";
12
String url = "POST";
13
int Length; 
14
15
16
void setup() 
17
{
18
  // put your setup code here, to run once:
19
  Serial.begin(9600);
20
  WiFi.begin(ssid, password);
21
  while (WiFi.status() != WL_CONNECTED) 
22
  {
23
    delay(500);
24
    Serial.print(".");
25
  }
26
27
  Serial.println("");
28
  Serial.println("WiFi connected");
29
  Serial.println("IP address: ");
30
  Serial.println(WiFi.localIP());
31
} //End Setup
32
33
void loop() {
34
  // put your main code here, to run repeatedly:
35
  
36
    StaticJsonBuffer<300> JSONbuffer;   //Declaring static JSON buffer
37
    JsonObject& JSONencoder = JSONbuffer.createObject(); 
38
 
39
    JSONencoder["DeviceId"] = "113";
40
    JSONencoder["Name"] = "JsonTest";
41
    JSONencoder["Serial"] = "5005191";
42
    JSONencoder["Token"] = "0";
43
44
 
45
    JsonArray& Index = JSONencoder.createNestedArray("Index"); //JSON array
46
    Index.add(1); //Add value to array
47
48
    JsonArray& Typ = JSONencoder.createNestedArray("Typ"); //JSON array
49
    Typ.add(1); //Add value to array
50
   
51
    JsonArray& Unit = JSONencoder.createNestedArray("Unit"); //JSON array
52
    Unit.add("%rh"); //Add value to array
53
54
    JsonArray& Value = JSONencoder.createNestedArray("Value"); //JSON array
55
    Value.add(32.4); //Add value to array
56
57
    char JSONmessageBuffer [512];
58
    JSONencoder.prettyPrintTo(JSONmessageBuffer, sizeof(JSONmessageBuffer));
59
    Serial.println(JSONmessageBuffer);
60
61
    //Create url
62
    url = "POST";
63
    url += " ";
64
    url += "/XXX/XXX.XXX.svc/";
65
    url += "UpdateDataJson";
66
    url += " HTTP/1.1";
67
    Serial.println(url);
68
    //Length output from Body -> used as Content Length
69
    Length = sizeof(JSONmessageBuffer);
70
    
71
    if (client.connect(_ip_Adress, 80))
72
      {
73
        //Send HTTP Header to Server
74
        client.println(url);
75
        client.println("Content-Type: application/json");
76
        client.println("HOST: " + String(_ip_Adress));
77
        client.print("Content-Length: ");
78
        client.println(Length);
79
        client.println("Connection: Close");
80
        client.println();
81
    
82
        //Send Json Data
83
        client.println(JSONmessageBuffer);
84
85
        //Check Answer
86
        String answer = client.readStringUntil('\r');
87
88
        Serial.println("Vor der Antwort");
89
        Serial.println(answer);
90
        Serial.println("Nach der Antwort");
91
92
        if (answer.startsWith("200 OK", 9))
93
        {
94
          Serial.println("HTTP: OK");
95
        }
96
      }
97
98
    delay(1000);  //Send a request every 1 second
99
    
100
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.