• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Делюсь опытом Библиотека для работы с погодой

H`UGO

New member
А как можно подобным способом запросить курс валют например с сайта ЦБ Центральный банк Российской Федерации, или, точнее а также, цену на нефть?
Перековырял весь интернет, не нашёл даже близко ничего. Может есть ссылка или совет в каком направлении идти.
Или хотя бы поясните как вообще может выглядеть обращение ESP8266 - 12 на сайт, и прочитать данные с него, в порт, для начала.
 

enjoynering

Well-known member
открываете хром в режиме разработчика и смотрите запросы-ответы или ставите wireshark
 

fps

Active member
Перековырял весь интернет, не нашёл даже близко ничего
У меня, похоже, какой-то другой интернет.
google.com/search?q=курс+валют+json+api - сходу выдает просто море ссылок

Про нефть не так много но, тоже вроде аналогично есть.
 

H`UGO

New member
Я вроде бы как понятно сформулировал вопрос. Зайти в интернет с ноута или смартфона, наконец установить соответствующее приложение можно и без помощи ESP8266 да и зачем она вообще нужна!?
Я интересуюсь как это сделать только при помощь ESP?
Запросить данные на сайте (с ESP8266) и постлать в порт полученный ответ.
Если он будет внятный, я отфильтрую лишнее и выведу на экран то, что мне надо.
А ссылки на сайты с курсами валют мне не надо, типа я поисковиком не умею пользоваться.
 

p-a-h-a

Member
А как можно подобным способом запросить курс валют например с сайта ЦБ Центральный банк Российской Федерации, или, точнее а также, цену на нефть?
Перековырял весь интернет, не нашёл даже близко ничего. Может есть ссылка или совет в каком направлении идти.
Или хотя бы поясните как вообще может выглядеть обращение ESP8266 - 12 на сайт, и прочитать данные с него, в порт, для начала.
ищите "API Центральный банк " и разбираетесь в нем. Кусок кода (на ESP32 отлажен) для получения курса валют Приватбанка:
C:
#include <HTTPClient.h>
#include <ArduinoJson.h>
struct {
  float USD[2], EURO[2];
} LCD;

void Privat24() {
  HTTPClient http;
  http.begin("https://api.privatbank.ua/p24api/pubinfo?json&exchange&coursid=5");
  http.GET();
  DynamicJsonDocument Answer(1200);                                 // Инициализируем буфер под JSON // Эта константа определяет размер буфера под содержимое JSON 8ми датчиков (расчитывается тут https://arduinojson.org/v5/assistant/)
  deserializeJson(Answer, http.getString());                     // Парсим JSON-содержимое ответа сервера
  http.end();
  //Serial.println(Answer.as<String>()); //Выводим содержимое что прислал сервер
  if (debug) {
    serializeJsonPretty(Answer, Serial); Serial.println(); //Выводим содержимое что прислал сервер красиво по строчкам
    Serial.print(String(Answer[0]["buy"].as<String>().substring(0, 5)) + " USD "); // Покупка USD
    Serial.println(Answer[0]["sale"].as<String>().substring(0, 5)); // Продажа USD
    Serial.print(String(Answer[1]["buy"].as<String>().substring(0, 5)) + " EUR "); // Покупка EUR
    Serial.println(Answer[1]["sale"].as<String>().substring(0, 5)); //Продажа EUR
  }
  boolean data_ok = true;
  if (Answer[0]["buy"] == "null" || Answer[1]["buy"] == "null") {
    esp_sleep_enable_timer_wakeup(60e6);
    data_ok = false;
  }
// Дальше заполняются глобальные переменные
  if (data_ok) { //Только если получили данные - обновляем их в переменных отображения на дисплее
    LCD.USD[0] = Answer[0]["buy"];
    LCD.USD[1] = Answer[0]["sale"];
    LCD.EURO[0] = Answer[1]["buy"];
    LCD.EURO[1] = Answer[1]["sale"];
    Answer.clear();
  }
}
 

p-a-h-a

Member
изображение_viber_2021-02-11_23-41-47.jpg
Вот функция Openweather c прогнозом (ESP32), оперативку кушает дай бог, не уверен что на 8266 заведется.
Код:
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <TimeLib.h>
#define debug true
#define openweatheGET "https://api.openweathermap.org/data/2.5/onecall?lat=47.010042&lon=35.950216&units=metric&lang=ru&exclude=minutely,hourly&appid=тут_apikey_свой_нужно_писать_"
struct {
  float temp;
  int temp_day[5], temp_night[5];
  byte wind_speed[5];
  int wind_deg[5]; 
  byte icon[5],icon_now;
  int pressure;
  byte humidity;
  float battary_voltage = 3.31;
  float USD[2], EURO[2];
  int ID[5],ID_now;
  String wind[5];
} LCD;

void Openweather() {
  HTTPClient http;
  if (debug) Serial.println(openweatheGET);
  http.begin(openweatheGET); //http://api.openweathermap.org/data/2.5/weather?lat=47.810042&lon=35.050216&units=metric&lang=ru&appid=&appid=80b41293c19a2c505d3b05d42f22bc8e
  http.GET();
  DynamicJsonDocument Answer(8000);                                 // Инициализируем буфер под JSON // Эта константа определяет размер буфера под содержимое JSON 8ми датчиков (расчитывается тут https://arduinojson.org/v5/assistant/)
  deserializeJson(Answer, http.getString());                     // Парсим JSON-содержимое ответа сервера
  http.end();
  //Serial.println(Answer.as<String>()); //Выводим содержимое что прислал сервер
  if (debug) serializeJsonPretty(Answer, Serial); Serial.println(); //Выводим содержимое что прислал сервер красиво по строчкам

  if (Answer["current"]["weather"][0]["description"].as<String>() == "null") {
    Serial.println("Данные openweathermap.org не получены. Перезагрузка.");
    ESP.restart();
  }
  boolean data_ok = true;
  if (Answer["current"]["temp"] == "null" || Answer["current"]["wind_speed"] == "null") {
    esp_sleep_enable_timer_wakeup(60e6);
    data_ok = false;
  }

  if (data_ok) { //Только если получили данные - обновляем их в переменных отображения на дисплее
    //Забиваем структуру вывода на дисплей текущей погодой
    LCD.temp = Answer["current"]["temp"]; //Температура
    LCD.icon_now = Answer["current"]["weather"][0]["icon"].as<String>().substring(0, 2).toInt(); //Иконка. Берем от начала два знака и переводим их в числовое значение
    LCD.wind_speed[0] = Answer["current"]["wind_speed"]; //Скорость ветра
    LCD.pressure = Answer["current"]["pressure"]; //Давление мПа
    LCD.pressure = LCD.pressure * 100 / 133; //Переводим в мм.рт.ст
    LCD.humidity = Answer["current"]["humidity"]; //Влажность
    LCD.wind_deg[0] = Answer["current"]["wind_deg"]; //Направление ветра
    LCD.ID_now= Answer["current"]["weather"][0]["id"].as<String>().toInt(); // id погоды
    //Забиваем структуру вывода на дисплей прогнозом на 4 дня
    for (int Day = 0; Day < 4; Day++) {
      LCD.temp_day[Day] = Answer["daily"][Day]["temp"]["day"];
      LCD.temp_night[Day] = Answer["daily"][Day]["temp"]["night"];
      LCD.icon[Day] = Answer["daily"][Day]["weather"][0]["icon"].as<String>().substring(0, 2).toInt();
      LCD.ID[Day]=Answer["daily"][Day]["weather"][0]["id"].as<String>().toInt();
      LCD.wind_speed[Day] = Answer["daily"][Day]["wind_speed"];
      LCD.wind_deg[Day] = Answer["daily"][Day]["wind_deg"];
      LCD.wind[Day]=wind_deg_to_Word(Answer["daily"][Day]["wind_deg"]);
    }
  }

  if (debug) {
    //// Погода сейчас
    Serial.println("Данные openweathermap.org " + Answer["timezone"].as<String>());//город
    Serial.println("Погода за окном:");
    Serial.println(Answer["current"]["weather"][0]["description"].as<String>());// Явление погоды
    Serial.println("Иконка " + Answer["current"]["weather"][0]["icon"].as<String>());// Иконка
    Serial.println("ID " + Answer["current"]["weather"][0]["id"].as<String>());// Иконка
    Serial.println("Температура " + Answer["current"]["temp"].as<String>() + " ощущается как " + Answer["current"]["feels_like"].as<String>()); // Температура

    Serial.println("Облачность " + Answer["current"]["clouds"].as<String>() + " %"); // Облачность
    Serial.println("Скорость ветра " + Answer["current"]["wind_speed"].as<String>() + " м/с"); // Скорость ветра
    Serial.println("Давление " + Answer["current"]["pressure"].as<String>() + " Па");
    Serial.println("Влажность " + Answer["current"]["humidity"].as<String>() + " %");
    Serial.println("Точка росы " + Answer["current"]["dew_point"].as<String>() + " 'С");
    Serial.println("Ультрафиолетовый индекс " + Answer["current"]["uvi"].as<String>());
    Serial.println("Видимость " + Answer["current"]["visibility"].as<String>() + " м");
    Serial.println("Направление ветра " + Answer["current"]["wind_deg"].as<String>() + " градусов метеорологических\r\n");
    ////Прогноз наперед
    time_t unix;
    time_t timezone = Answer["timezone_offset"].as<time_t>();
    for (byte Day = 1; Day < 8; Day++) {
      Serial.println(Day);
      unix = Answer["daily"][Day]["dt"].as<time_t>() + timezone;
      Serial.printf("Прогноз на %02d.%02d.%4d\r\n", day(unix), month(unix), year(unix));
      unix = Answer["daily"][Day]["sunrise"].as<time_t>() + timezone;
      Serial.printf("Восход в %02d:%02d\r\n", hour(unix), minute(unix));
      unix = Answer["daily"][Day]["sunset"].as<time_t>() + timezone;
      Serial.printf("Закат в %02d:%02d\r\n", hour(unix), minute(unix));
      Serial.println(Answer["daily"][Day]["weather"][0]["description"].as<String>() + "."); //Погодное явление
      Serial.println("Температура утром " + Answer["daily"][Day]["temp"]["morn"].as<String>() + " 'С");
      Serial.println("Температура днем " + Answer["daily"][Day]["temp"]["day"].as<String>() + " 'С");
      Serial.println("Температура вечером " + Answer["daily"][Day]["temp"]["eve"].as<String>() + " 'С");
      Serial.println("Температура ночью " + Answer["daily"][Day]["temp"]["night"].as<String>() + " 'С");
      Serial.println("Давление " + Answer["daily"][Day]["pressure"].as<String>() + " Па");
      Serial.println("Влажность " + Answer["daily"][Day]["humidity"].as<String>() + " %");
      Serial.println("Точка росы " + Answer["daily"][Day]["dew_point"].as<String>() + " 'С");
      Serial.println("Ветер " + Answer["daily"][Day]["wind_speed"].as<String>() + " м/с");
      Serial.println("Направление ветра " + Answer["daily"][Day]["wind_deg"].as<String>() + " градусов метеорологических");
      Serial.println("Облачность " + Answer["daily"][Day]["clouds"].as<String>() + " %");
      Serial.println("Вероятность осадков " + Answer["daily"][Day]["pop"].as<String>() + " %");
      Serial.println("Ультрафиолетовый индекс  " + Answer["daily"][Day]["uvi"].as<String>() + " %");
      Serial.println("Иконка " + Answer["daily"][Day]["weather"][0]["icon"].as<String>() );
      Serial.println("Иконка " + Answer["daily"][Day]["weather"][0]["id"].as<String>() + "\r\n");
    }
  }
  Answer.clear();
}

String wind_deg_to_Word(int wind_deg){
if (wind_deg<22) return "с"; // Инфа по переводу градусов в направление ветра тут https://studopedia.org/11-92976.html
if (wind_deg<45) return "ссв";
if (wind_deg<67) return "св";
if (wind_deg<90) return "всв";
if (wind_deg<112) return "в";
if (wind_deg<135) return "вюв";
if (wind_deg<157) return "юв";
if (wind_deg<180) return "ююв";
if (wind_deg<202) return "ю";
if (wind_deg<225) return "ююз";
if (wind_deg<247) return "юз";
if (wind_deg<270) return "зюз";
if (wind_deg<292) return "з";
if (wind_deg<315) return "зсз";
if (wind_deg<337) return "сз";//сз
if (wind_deg<361) return "с";
return "--";
}
Вот это бы запихнуть в библиотеку...
 

p-a-h-a

Member
И собственно что функция в Serial пишет:
Код:
https://api.openweathermap.org/data/2.5/onecall?lat=47.010042&lon=35.950216&units=metric&lang=ru&exclude=minutely,hourly&appid=_Ваш_ipi_key
{
  "lat": 47.81,
  "lon": 35.0502,
  "timezone": "Europe/Zaporozhye",
  "timezone_offset": 7200,
  "current": {
    "dt": 1613079371,
    "sunrise": 1613019158,
    "sunset": 1613055337,
    "temp": 6.84,
    "feels_like": 3.08,
    "pressure": 1005,
    "humidity": 93,
    "dew_point": 5.79,
    "uvi": 0,
    "clouds": 75,
    "visibility": 10000,
    "wind_speed": 4,
    "wind_deg": 130,
    "weather": [
      {
        "id": 803,
        "main": "Clouds",
        "description": "облачно с прояснениями",
        "icon": "04n"
      }
    ]
  },
  "daily": [
    {
      "dt": 1613034000,
      "sunrise": 1613019158,
      "sunset": 1613055337,
      "temp": {
        "day": 4.22,
        "min": -1.15,
        "max": 7.2,
        "night": 6.84,
        "eve": 6.57,
        "morn": -0.97
      },
      "feels_like": {
        "day": -0.65,
        "night": 1.47,
        "eve": 1.79,
        "morn": -4.1
      },
      "pressure": 1013,
      "humidity": 82,
      "dew_point": 1.52,
      "wind_speed": 4.43,
      "wind_deg": 122,
      "weather": [
        {
          "id": 803,
          "main": "Clouds",
          "description": "облачно с прояснениями",
          "icon": "04d"
        }
      ],
      "clouds": 72,
      "pop": 0,
      "uvi": 1.24
    },
    {
      "dt": 1613120400,
      "sunrise": 1613105462,
      "sunset": 1613141832,
      "temp": {
        "day": 4.55,
        "min": -10.07,
        "max": 7.11,
        "night": -10.07,
        "eve": -6.96,
        "morn": 5.97
      },
      "feels_like": {
        "day": 0.09,
        "night": -18.74,
        "eve": -16.14,
        "morn": 0.84
      },
      "pressure": 1002,
      "humidity": 87,
      "dew_point": 2.65,
      "wind_speed": 4.12,
      "wind_deg": 275,
      "weather": [
        {
          "id": 616,
          "main": "Snow",
          "description": "снег с дождём",
          "icon": "13d"
        }
      ],
      "clouds": 100,
      "pop": 1,
      "rain": 0.79,
      "snow": 4.52,
      "uvi": 0.56
    },
    {
      "dt": 1613206800,
      "sunrise": 1613191766,
      "sunset": 1613228328,
      "temp": {
        "day": -8.83,
        "min": -10.38,
        "max": -8.400001,
        "night": -9.8,
        "eve": -8.87,
        "morn": -10.28
      },
      "feels_like": {
        "day": -19.05,
        "night": -17.98,
        "eve": -18.03,
        "morn": -19.23
      },
      "pressure": 1014,
      "humidity": 88,
      "dew_point": -14.05,
      "wind_speed": 10.18,
      "wind_deg": 251,
      "weather": [
        {
          "id": 804,
          "main": "Clouds",
          "description": "пасмурно",
          "icon": "04d"
        }
      ],
      "clouds": 100,
      "pop": 0.05,
      "uvi": 1.46
    },
    {
      "dt": 1613293200,
      "sunrise": 1613278067,
      "sunset": 1613314824,
      "temp": {
        "day": -8.63,
        "min": -10.51,
        "max": -7.75,
        "night": -9.82,
        "eve": -8.52,
        "morn": -10.22
      },
      "feels_like": {
        "day": -15.73,
        "night": -15.57,
        "eve": -14.47,
        "morn": -17.7
      },
      "pressure": 1023,
      "humidity": 89,
      "dew_point": -13.26,
      "wind_speed": 5.77,
      "wind_deg": 291,
      "weather": [
        {
          "id": 804,
          "main": "Clouds",
          "description": "пасмурно",
          "icon": "04d"
        }
      ],
      "clouds": 100,
      "pop": 0.15,
      "uvi": 1.57
    },
    {
      "dt": 1613379600,
      "sunrise": 1613364368,
      "sunset": 1613401319,
      "temp": {
        "day": -7.35,
        "min": -11.59,
        "max": -4.82,
        "night": -5.78,
        "eve": -6.69,
        "morn": -11.59
      },
      "feels_like": {
        "day": -11.64,
        "night": -10.32,
        "eve": -11.09,
        "morn": -16.38
      },
      "pressure": 1026,
      "humidity": 86,
      "dew_point": -13.67,
      "wind_speed": 1.84,
      "wind_deg": 263,
      "weather": [
        {
          "id": 600,
          "main": "Snow",
          "description": "небольшой снег",
          "icon": "13d"
        }
      ],
      "clouds": 0,
      "pop": 0.3,
      "snow": 0.21,
      "uvi": 1.53
    },
    {
      "dt": 1613466000,
      "sunrise": 1613450667,
      "sunset": 1613487814,
      "temp": {
        "day": -5.81,
        "min": -8.24,
        "max": -4.88,
        "night": -8.24,
        "eve": -6.41,
        "morn": -7.34
      },
      "feels_like": {
        "day": -11.15,
        "night": -15.54,
        "eve": -12.8,
        "morn": -12.07
      },
      "pressure": 1023,
      "humidity": 93,
      "dew_point": -9.16,
      "wind_speed": 3.65,
      "wind_deg": 6,
      "weather": [
        {
          "id": 600,
          "main": "Snow",
          "description": "небольшой снег",
          "icon": "13d"
        }
      ],
      "clouds": 88,
      "pop": 0.28,
      "snow": 0.14,
      "uvi": 1.48
    },
    {
      "dt": 1613552400,
      "sunrise": 1613536965,
      "sunset": 1613574309,
      "temp": {
        "day": -5.91,
        "min": -9.09,
        "max": -5.01,
        "night": -9.09,
        "eve": -6.53,
        "morn": -7.1
      },
      "feels_like": {
        "day": -14.61,
        "night": -16.93,
        "eve": -14.68,
        "morn": -14.54
      },
      "pressure": 1021,
      "humidity": 87,
      "dew_point": -11.97,
      "wind_speed": 8.32,
      "wind_deg": 26,
      "weather": [
        {
          "id": 804,
          "main": "Clouds",
          "description": "пасмурно",
          "icon": "04d"
        }
      ],
      "clouds": 100,
      "pop": 0,
      "uvi": 2
    },
    {
      "dt": 1613638800,
      "sunrise": 1613623261,
      "sunset": 1613660804,
      "temp": {
        "day": -8.58,
        "min": -11.84,
        "max": -6.88,
        "night": -11.84,
        "eve": -8.54,
        "morn": -10.81
      },
      "feels_like": {
        "day": -15.4,
        "night": -17.83,
        "eve": -15.04,
        "morn": -18.36
      },
      "pressure": 1027,
      "humidity": 84,
      "dew_point": -15.35,
      "wind_speed": 5.29,
      "wind_deg": 12,
      "weather": [
        {
          "id": 803,
          "main": "Clouds",
          "description": "облачно с прояснениями",
          "icon": "04d"
        }
      ],
      "clouds": 76,
      "pop": 0,
      "uvi": 2
    }
  ]
}
Данные openweathermap.org Europe/Zaporozhye
Погода за окном:
облачно с прояснениями
Иконка 04n
ID 803
Температура 6.84 ощущается как 3.08
Облачность 75 %
Скорость ветра 4 м/с
Давление 1005 Па
Влажность 93 %
Точка росы 5.79 'С
Ультрафиолетовый индекс 0
Видимость 10000 м
Направление ветра 130 градусов метеорологических

1
Прогноз на 12.02.2021
Восход в 06:51
Закат в 16:57
снег с дождём.
Температура утром 5.97 'С
Температура днем 4.55 'С
Температура вечером -6.96 'С
Температура ночью -10.07 'С
Давление 1002 Па
Влажность 87 %
Точка росы 2.65 'С
Ветер 4.12 м/с
Направление ветра 275 градусов метеорологических
Облачность 100 %
Вероятность осадков 1 %
Ультрафиолетовый индекс  0.56 %
Иконка 13d
Иконка 616

2
Прогноз на 13.02.2021
Восход в 06:49
Закат в 16:58
пасмурно.
Температура утром -10.28 'С
Температура днем -8.83 'С
Температура вечером -8.87 'С
Температура ночью -9.8 'С
Давление 1014 Па
Влажность 88 %
Точка росы -14.05 'С
Ветер 10.18 м/с
Направление ветра 251 градусов метеорологических
Облачность 100 %
Вероятность осадков 0.05 %
Ультрафиолетовый индекс  1.46 %
Иконка 04d
Иконка 804

3
Прогноз на 14.02.2021
Восход в 06:47
Закат в 17:00
пасмурно.
Температура утром -10.22 'С
Температура днем -8.63 'С
Температура вечером -8.52 'С
Температура ночью -9.82 'С
Давление 1023 Па
Влажность 89 %
Точка росы -13.26 'С
Ветер 5.77 м/с
Направление ветра 291 градусов метеорологических
Облачность 100 %
Вероятность осадков 0.15 %
Ультрафиолетовый индекс  1.57 %
Иконка 04d
Иконка 804

4
Прогноз на 15.02.2021
Восход в 06:46
Закат в 17:01
небольшой снег.
Температура утром -11.59 'С
Температура днем -7.35 'С
Температура вечером -6.69 'С
Температура ночью -5.78 'С
Давление 1026 Па
Влажность 86 %
Точка росы -13.67 'С
Ветер 1.84 м/с
Направление ветра 263 градусов метеорологических
Облачность 0 %
Вероятность осадков 0.3 %
Ультрафиолетовый индекс  1.53 %
Иконка 13d
Иконка 600

5
Прогноз на 16.02.2021
Восход в 06:44
Закат в 17:03
небольшой снег.
Температура утром -7.34 'С
Температура днем -5.81 'С
Температура вечером -6.41 'С
Температура ночью -8.24 'С
Давление 1023 Па
Влажность 93 %
Точка росы -9.16 'С
Ветер 3.65 м/с
Направление ветра 6 градусов метеорологических
Облачность 88 %
Вероятность осадков 0.28 %
Ультрафиолетовый индекс  1.48 %
Иконка 13d
Иконка 600

6
Прогноз на 17.02.2021
Восход в 06:42
Закат в 17:05
пасмурно.
Температура утром -7.1 'С
Температура днем -5.91 'С
Температура вечером -6.53 'С
Температура ночью -9.09 'С
Давление 1021 Па
Влажность 87 %
Точка росы -11.97 'С
Ветер 8.32 м/с
Направление ветра 26 градусов метеорологических
Облачность 100 %
Вероятность осадков 0 %
Ультрафиолетовый индекс  2 %
Иконка 04d
Иконка 804

7
Прогноз на 18.02.2021
Восход в 06:41
Закат в 17:06
облачно с прояснениями.
Температура утром -10.81 'С
Температура днем -8.58 'С
Температура вечером -8.54 'С
Температура ночью -11.84 'С
Давление 1027 Па
Влажность 84 %
Точка росы -15.35 'С
Ветер 5.29 м/с
Направление ветра 12 градусов метеорологических
Облачность 76 %
Вероятность осадков 0 %
Ультрафиолетовый индекс  2 %
Иконка 04d
Иконка 803
 

p-a-h-a

Member
Немного сейчас поразмыслил и решил сэкономить 5,5 кБ памяти применив фильтр. На 8266 точно заведется.
C++:
#include <ArduinoJson.h>
void setup() {
  Serial.begin(115200);
  //Тут фильтр, который разрешает конкретные параметры только принимать
  static const char filter_arr[] PROGMEM = "{timezone:true,current:{temp:true,pressure:true,wind_speed:true,wind_deg:true,weather:[{id:true}]},daily:[{temp:{day:true,night:true},pressure:true,wind_speed:true,wind_deg:true,weather:[{id:true}]},{temp:{day:true,night:true},pressure:true,wind_speed:true,wind_deg:true,weather:[{id:true}]}]}";// 294 байта
  //Тут прогноз на неделю
  static const char Openweather_arr[] PROGMEM = "{\"lat\":47.81,\"lon\":35.0502,\"timezone\":\"Europe/Zaporozhye\",\"timezone_offset\":7200,\"current\":{\"dt\":1613079371,\"sunrise\":1613019158,\"sunset\":1613055337,\"temp\":6.84,\"feels_like\":3.08,\"pressure\":1005,\"humidity\":93,\"dew_point\":5.79,\"uvi\":0,\"clouds\":75,\"visibility\":10000,\"wind_speed\":4,\"wind_deg\":130,\"weather\":[{\"id\":803,\"main\":\"Clouds\",\"description\":\"облачно с прояснениями\",\"icon\":\"04n\"}]},\"daily\":[{\"dt\":1613034000,\"sunrise\":1613019158,\"sunset\":1613055337,\"temp\":{\"day\":4.22,\"min\":-1.15,\"max\":7.2,\"night\":6.84,\"eve\":6.57,\"morn\":-0.97},\"feels_like\":{\"day\":-0.65,\"night\":1.47,\"eve\":1.79,\"morn\":-4.1},\"pressure\":1013,\"humidity\":82,\"dew_point\":1.52,\"wind_speed\":4.43,\"wind_deg\":122,\"weather\":[{\"id\":803,\"main\":\"Clouds\",\"description\":\"облачно с прояснениями\",\"icon\":\"04d\"}],\"clouds\":72,\"pop\":0,\"uvi\":1.24},{\"dt\":1613120400,\"sunrise\":1613105462,\"sunset\":1613141832,\"temp\":{\"day\":4.55,\"min\":-10.07,\"max\":7.11,\"night\":-10.07,\"eve\":-6.96,\"morn\":5.97},\"feels_like\":{\"day\":0.09,\"night\":-18.74,\"eve\":-16.14,\"morn\":0.84},\"pressure\":1002,\"humidity\":87,\"dew_point\":2.65,\"wind_speed\":4.12,\"wind_deg\":275,\"weather\":[{\"id\":616,\"main\":\"Snow\",\"description\":\"снег с дождём\",\"icon\":\"13d\"}],\"clouds\":100,\"pop\":1,\"rain\":0.79,\"snow\":4.52,\"uvi\":0.56},{\"dt\":1613206800,\"sunrise\":1613191766,\"sunset\":1613228328,\"temp\":{\"day\":-8.83,\"min\":-10.38,\"max\":-8.400001,\"night\":-9.8,\"eve\":-8.87,\"morn\":-10.28},\"feels_like\":{\"day\":-19.05,\"night\":-17.98,\"eve\":-18.03,\"morn\":-19.23},\"pressure\":1014,\"humidity\":88,\"dew_point\":-14.05,\"wind_speed\":10.18,\"wind_deg\":251,\"weather\":[{\"id\":804,\"main\":\"Clouds\",\"description\":\"пасмурно\",\"icon\":\"04d\"}],\"clouds\":100,\"pop\":0.05,\"uvi\":1.46},{\"dt\":1613293200,\"sunrise\":1613278067,\"sunset\":1613314824,\"temp\":{\"day\":-8.63,\"min\":-10.51,\"max\":-7.75,\"night\":-9.82,\"eve\":-8.52,\"morn\":-10.22},\"feels_like\":{\"day\":-15.73,\"night\":-15.57,\"eve\":-14.47,\"morn\":-17.7},\"pressure\":1023,\"humidity\":89,\"dew_point\":-13.26,\"wind_speed\":5.77,\"wind_deg\":291,\"weather\":[{\"id\":804,\"main\":\"Clouds\",\"description\":\"пасмурно\",\"icon\":\"04d\"}],\"clouds\":100,\"pop\":0.15,\"uvi\":1.57},{\"dt\":1613379600,\"sunrise\":1613364368,\"sunset\":1613401319,\"temp\":{\"day\":-7.35,\"min\":-11.59,\"max\":-4.82,\"night\":-5.78,\"eve\":-6.69,\"morn\":-11.59},\"feels_like\":{\"day\":-11.64,\"night\":-10.32,\"eve\":-11.09,\"morn\":-16.38},\"pressure\":1026,\"humidity\":86,\"dew_point\":-13.67,\"wind_speed\":1.84,\"wind_deg\":263,\"weather\":[{\"id\":600,\"main\":\"Snow\",\"description\":\"небольшой снег\",\"icon\":\"13d\"}],\"clouds\":0,\"pop\":0.3,\"snow\":0.21,\"uvi\":1.53},{\"dt\":1613466000,\"sunrise\":1613450667,\"sunset\":1613487814,\"temp\":{\"day\":-5.81,\"min\":-8.24,\"max\":-4.88,\"night\":-8.24,\"eve\":-6.41,\"morn\":-7.34},\"feels_like\":{\"day\":-11.15,\"night\":-15.54,\"eve\":-12.8,\"morn\":-12.07},\"pressure\":1023,\"humidity\":93,\"dew_point\":-9.16,\"wind_speed\":3.65,\"wind_deg\":6,\"weather\":[{\"id\":600,\"main\":\"Snow\",\"description\":\"небольшой снег\",\"icon\":\"13d\"}],\"clouds\":88,\"pop\":0.28,\"snow\":0.14,\"uvi\":1.48},{\"dt\":1613552400,\"sunrise\":1613536965,\"sunset\":1613574309,\"temp\":{\"day\":-5.91,\"min\":-9.09,\"max\":-5.01,\"night\":-9.09,\"eve\":-6.53,\"morn\":-7.1},\"feels_like\":{\"day\":-14.61,\"night\":-16.93,\"eve\":-14.68,\"morn\":-14.54},\"pressure\":1021,\"humidity\":87,\"dew_point\":-11.97,\"wind_speed\":8.32,\"wind_deg\":26,\"weather\":[{\"id\":804,\"main\":\"Clouds\",\"description\":\"пасмурно\",\"icon\":\"04d\"}],\"clouds\":100,\"pop\":0,\"uvi\":2},{\"dt\":1613638800,\"sunrise\":1613623261,\"sunset\":1613660804,\"temp\":{\"day\":-8.58,\"min\":-11.84,\"max\":-6.88,\"night\":-11.84,\"eve\":-8.54,\"morn\":-10.81},\"feels_like\":{\"day\":-15.4,\"night\":-17.83,\"eve\":-15.04,\"morn\":-18.36},\"pressure\":1027,\"humidity\":84,\"dew_point\":-15.35,\"wind_speed\":5.29,\"wind_deg\":12,\"weather\":[{\"id\":803,\"main\":\"Clouds\",\"description\":\"облачно с прояснениями\",\"icon\":\"04d\"}],\"clouds\":76,\"pop\":0,\"uvi\":2}]}";

  StaticJsonDocument<480> filter;
  deserializeJson(filter, filter_arr);
  serializeJsonPretty(filter, Serial); Serial.println("\n\n\n\n\nПогода:\n");

  DynamicJsonDocument Answer(2048);
  deserializeJson(Answer, Openweather_arr, DeserializationOption::Filter(filter));
  serializeJsonPretty(Answer, Serial); Serial.println();

  /*
    const char* timezone = Answer["timezone"]; // "Europe/Zaporozhye"

    JsonObject current = Answer["current"];
    float current_temp = current["temp"]; // 6.84
    int current_pressure = current["pressure"]; // 1005
    int current_wind_speed = current["wind_speed"]; // 4
    int current_wind_deg = current["wind_deg"]; // 130

    int current_weather_0_id = current["weather"][0]["id"]; // 803

    for (JsonObject elem : Answer["daily"].as<JsonArray>()) {

    float temp_day = elem["temp"]["day"]; // 4.22, 4.55, -8.83, -8.63, -7.35, -5.81, -5.91, -8.58
    float temp_night = elem["temp"]["night"]; // 6.84, -10.07, -9.8, -9.82, -5.78, -8.24, -9.09, -11.84

    int pressure = elem["pressure"]; // 1013, 1002, 1014, 1023, 1026, 1023, 1021, 1027
    float wind_speed = elem["wind_speed"]; // 4.43, 4.12, 10.18, 5.77, 1.84, 3.65, 8.32, 5.29
    int wind_deg = elem["wind_deg"]; // 122, 275, 251, 291, 263, 6, 26, 12

    int weather_0_id = elem["weather"][0]["id"]; // 803, 616, 804, 804, 600, 600, 804, 803

    }
  */
}

void loop() {}
 

enjoynering

Well-known member
кстати в ArduinoJson 6 есть встроенный фильтр. Пробовал и весть ответ, тоже влазит без проблем, но оставил с фильтром тк реально экономит память, так мне весь ответ с Openweather.

Код:
  DeserializationError jsonError = deserializeJson(jsonDoc, http.getStream(), DeserializationOption::Filter(filter));
 

pvvx

Активный участник сообщества

pvvx

Активный участник сообщества
Я даже вас кормить не буду и просто промолчу.
Мне то зачем ваши бинарники?
Такие вещи проще решаются, без всяких роутеров и прочей лабуды показывающей неизвестно что:
Да и история показаний так-же есть на не менее пол года и читается в любом смарте :p
 

enjoynering

Well-known member
Давайте ещё раз с начала. Без инета щас никуда. Инет и электричество наше все.

Энегоэффективный BLE хорош когда он подключен к жрущему не в себя смарту или компьютеру. :)

TLSR8269 сам в интернет выйти и забрать погоду не сможет. Для это его надо сопрягать со смартфоном у которого цена не $3.

А ESP8266 спокойно это делает за $3.


Шах и мат TLSR8269.
 

svs2007m

Active member
Без инета щас никуда. Инет и электричество наше все.
Увы дружище на большинстве территорий России это только мечта. Можно верить что где то там Москве, Питере и ... Сам в живу в этих территориях и унас с этим полная жоп... :)
 

enjoynering

Well-known member
Я как бы не говорил о покрытии всей территории. Я про населенный пункт. Электричество и интернет там навсегда. Неужели у вас дома нет инета?
 

enjoynering

Well-known member
нет не надо, верю. вы щас обидитесь, но в том, что у вас нет электричества и инета виноваты вы сами. это раньше без прописки на работу не брали и жить негде. так ее 20 лет назад отменили. я 15 лет назад вышел из зоны комфорта и теперь у меня инет есть всегда. было трудно, но оно того стоило. это раньше государство думало и решало все за нас (где жить, где работать, где отдыхать). эти дни давно прошли, сейчас все решаете вы.
 

pvvx

Активный участник сообщества
Давайте ещё раз с начала. Без инета щас никуда. Инет и электричество наше все.

Энегоэффективный BLE хорош когда он подключен к жрущему не в себя смарту или компьютеру. :)

TLSR8269 сам в интернет выйти и забрать погоду не сможет. Для это его надо сопрягать со смартфоном у которого цена не $3.

А ESP8266 спокойно это делает за $3.


Шах и мат TLSR8269.
У вас что-то плохо с пониманием прочитанного.
Он показывает и "забирает" погоду без Инет, без роутера, без смартфона прямо на индикатор с выводом и домашней температуры и влажности :p
А в инет белиберда - хотя-бы недавно на улице -20С, а ваш любимый инет говорит +1С :)
Мне то из дома на улицу выходить, а не в Инет, как вам :) :)
 
Сверху Снизу