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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.