esp8266: wifi client parsen mit json

Gast #5699118
Lesenswert?

Hallo

mal abgesehen von einer "exeption (28)" des ESP 8266 blicke ich noch 
nicht ganz durch, wie ich aus dem wifi Modul die Antworten des Host 
heraus kriege.

Aber von vorne, einfach nur das Wetter abholen mit
[c]
    if (!client.connect(server, httpsPort)) {
     Serial.println(F("Keine Verbindung zu Openweather.map!"));
     client.stop();
    }

   // Sende den HTTP GET request:
    client.println("GET /data/2.5/forecast?q=" + nameOfCity + "&APPID=" 
+ apiKey + "&lang=de&mode=json&units=metric&cnt=1 HTTP/1.1");
    client.println(F("Host: api.openweathermap.org"));
    client.println(F("User-Agent: ESP8266"));
    client.println(F("Connection: close"));
    client.println();
[c]

Ich versuche ein Beispiel aus dem Netz zu verstehen:
https://www.arduinoslovakia.eu/blog/2018/5/ziskanie-udajov-o-pocasi-pomocou-esp8266?lang=en

aber das läuft auch nicht durch, ist vermutlich zu alt, sowhl der JSON 
Parser als auch die API von Openweather haben sich inzwischen geändert. 
Ich kann mich nur noch über eine https Verbindung dort einloggen, 
unverschlüsselt klappt nicht mehr. Und eine Exeption 28 wird auch 
erzeugt.

Wo liegt die Antwort des Hosts wenn das wifi Modul diesen GET ausgeführt 
hat? Wie kriege ich das zu verarbeiten, was der Host mir schickt?

Später dann zu solchen Ausdrücken

DynamicJsonBuffer jsonBuffer(4096);
JsonObject& root = jsonBuffer.parseObject(client);

Aber eines nach dem anderen.....

Gruss,
Christian
Gast #5699299
Lesenswert?

Hi,

danke für den Link..... habs aber für meine paar LEDs schon. Der ESP 
8266 hat Bugs, soviel ist klar. Diese JSON Lib verlangt String.h, alles 
läuft damit. Und mit der Sequenz kriege ich jetzt auch ein paar Infos 
raus, die ich benutzen kann. Mehr brauhce ich nicht. Inzwischen hat 
jemand eine ganze Lib geschrieben für openweathermap.org aber das ist zu 
aufgeblasen für meine kleine Spielerei.

Die Daten des Host werden per Int wohl empfangen und können mit 
client.read und client.find etc geholt und durchsucht werden. Was 
passiert, wenn der Puffer voll ist weiss ich noch nicht. Auch blöd, dass 
der esp8266 das gleiche PROGMEM Thema hat, wie der AVR. Auch hier werden 
alle Strings im Ram abgelegt und man muss wieder diese Konstrukte mit 
PTSR bauen und _P Funktionen benutzen. Sonst ist das RAM sehr schnell 
voll.

Dann doch lieber Cortex...

Gruss,
Christian

JsonArray& list = root["list"];
JsonObject& nowT = list[0];
JsonObject& later = list[1];

String city = root["city"]["name"];
String weatherID = nowT["weather"][0]["id"];
String weatherMain = nowT["weather"][0]["main"];
String weatherNow = nowT["weather"][0]["description"];

String weatherIDLater = later["weather"][0]["id"];
String weatherMainLater = later["weather"][0]["main"];
String weatherLater = later["weather"][0]["description"];

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren