Forum: Mikrocontroller und Digitale Elektronik esp8266: wifi client parsen mit json


von Christian J. (Gast)


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

von Michael U. (amiga)


Lesenswert?

Hallo,

ich gebe zu, da habe ich selber nichts gemacht, aber vielleicht hilft Di 
irgendwas aus
https://github.com/ThingPulse/esp8266-weather-station-color
weiter. Läuft hier seit Weihnachten, vorher lief die 
Wunderground-Version.
Ich habe da nur den Touch rausgeworfen, weil ich ein Display ohne dran 
hatte und eine Taste dafür eingebuat.

Gruß aus Berlin
Michael

von Christian J. (Gast)


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"];

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.