Esp32 + Arduino ide + JSon
- Войдите на сайт для отправки комментариев
Втр, 04/08/2020 - 12:39
Добрый день, помогите понять.
/** BasicHTTPClient.ino Created on: 24.05.2015 */ #include <Arduino.h> #include <ArduinoJson.h> #include <ESP8266WiFi.h> #include <ESP8266WiFiMulti.h> #include <ESP8266HTTPClient.h> #include <WiFiClient.h> ESP8266WiFiMulti WiFiMulti; void handleReceivedMessage(String message) { StaticJsonDocument<1500> doc; //Memory pool. Поставил наугад для демонстрации DeserializationError error = deserializeJson(doc, message); // Test if parsing succeeds. if (error) { Serial.print(F("deserializeJson() failed: ")); Serial.println(error.c_str()); return; } Serial.println(); Serial.println("----- DATA FROM OPENWEATHER ----"); const char* name = doc["name"]; Serial.print("City: "); Serial.println(name); char rain = doc["weather"]["main"]; Serial.print("На небе:"); Serial.println(rain); int viz = doc["visibility"]; Serial.print("Видимость: "); Serial.println(viz); int timezone = doc["timezone"]; Serial.print("Timezone: "); Serial.println(timezone); int humidity = doc["main"]["humidity"]; Serial.print("Humidity: "); Serial.println(humidity); Serial.println("------------------------------"); } void setup() { Serial.begin(115200); // Serial.setDebugOutput(true); Serial.println(); Serial.println(); Serial.println(); for (uint8_t t = 4; t > 0; t--) { Serial.printf("[SETUP] WAIT %d...\n", t); Serial.flush(); delay(1000); } WiFi.mode(WIFI_STA); WiFiMulti.addAP("kirkorov", "kira@kira"); } void loop() { // wait for WiFi connection if ((WiFiMulti.run() == WL_CONNECTED)) { WiFiClient client; HTTPClient http; Serial.print("[HTTP] begin...\n"); if (http.begin(client, "http://api.openweathermap.org/data/2.5/weather?q=Ufa,ru,pt&APPID=Ид")) { // HTTP Serial.print("[HTTP] GET...\n"); // start connection and send HTTP header int httpCode = http.GET(); // httpCode will be negative on error if (httpCode > 0) { // HTTP header has been send and Server response header has been handled Serial.printf("[HTTP] GET... code: %d\n", httpCode); // file found at server if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) { String payload = http.getString(); Serial.println(payload); handleReceivedMessage(payload); } } else { Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str()); } http.end(); } else { Serial.printf("[HTTP} Unable to connect\n"); } } delay(100000); }
Получаю ответ типа:
{"coord":{"lon":55.95,"lat":54.73}, "weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04d"}], "base":"stations", "main":{"temp":296.54,"feels_like":295.02,"temp_min":295.93,"temp_max":297.15,"pressure":1010,"humidity":78}, "visibility":10000, "wind":{"speed":7,"deg":350}, "clouds":{"all":75}, "dt":1596529873, "sys":{"type":1,"id":9050,"country":"RU","sunrise":1596501119,"sunset":1596557552}, "timezone":18000, "id":479561, "name":"Ufa", "cod":200}
и
---- DATA FROM OPENWEATHER ---- City: Ufa На небе: Туман: 10000 Timezone: 18000 Humidity: 78 ------------------------------
Как мне получить переменные из квадратных скобок, mail и diskription?
Так Вы же их уже получаете! Или Вы ... не понимаете, что в этом коде написано?
Как мне в переменную распарсить?
переменная rain пустая
Как мне в переменную распарсить?
Зачем? Вы её уже парсите в строке №21
переменная rain пустая
Ну, а какой её быть? Сами-то Вы чего ожидали? Если чего-то другого, то расположите рядом строки №№ 33 и 37 и внимательно на них смотрите до тех пор, пока не поймёте разницу между ними.
не могу понять где затык... один фиг пустая rain
Ну, тогда придётся подходить правильно и методически.
Выбросьте ВСЁ из кода! Остаьте ТОЛЬКО строку message забитую константой и вызов функции handleReceivedMessage из setup c этим константным параметром. Больше ничего - никаких вай-фай, loop - пустой - всё выбросьте и лишние include тоже - ВСЁ!
Покажите код и что печатает.
Получается так
В строке №5 напишите
const
char
* rain = doc[
"weather"
][0][
"main"
];
у Вас же weather - это массив, так чего Вы его обижаете.
------------------
По поводу строки №2. Ну, зачем так нагло-то "String message"?