#1 02-10-2021 22:19:56

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,586

Получаем прогноз погоды от openweathermap.org на ESP32.

https://openweathermap.org/
https://github.com/Bodmer/OpenWeather
Требуется библиотека синтаксического анализа JSON здесь: https://github.com/Bodmer/JSON_Decoder

Не в сети

#2 02-10-2021 22:26:41

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,586

Re: Получаем прогноз погоды от openweathermap.org на ESP32.

Прогноз бесплатный на 5 дней приходит нормально. Теперь осталось его транслировать на некий монитор/дисплей. Это будет VGA монитор с библиотекой fabgl или или светодиодная матрица P3.

Не в сети

#3 02-10-2021 22:33:24

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,586

Re: Получаем прогноз погоды от openweathermap.org на ESP32.

// Sketch for ESP32 to fetch the Weather Forecast from OpenWeather
// an example from the library here:
// https://github.com/Bodmer/OpenWeather

// Sign up for a key and read API configuration info here:
// https://openweathermap.org/

// You can change the number of hours and days for the forecast in the
// "User_Setup.h" file inside the OpenWeather library folder.
// By default this is 6 hours (can be up to 48) and 5 days
// (can be up to 8 days = today plus 7 days)

// Choose library to load
#ifdef ESP8266
  #include <ESP8266WiFi.h>
  #include <WiFiClientSecure.h>
#else // ESP32
  #include <WiFi.h>
#endif

#include <JSON_Decoder.h>

#include <OpenWeather.h>

// Just using this library for unix time conversion
#include <Time.h>

// =====================================================
// ========= User configured stuff starts here =========
// Further configuration settings can be found in the
// OpenWeather library "User_Setup.h" file

#define TIME_OFFSET 1UL * 3600UL // UTC + 0 hour

// Change to suit your WiFi router

#define WIFI_SSID     "ИМЯ ВАШЕЙ WIFI СЕТИ"
#define WIFI_PASSWORD "ПАРОЛЬ ВАШЕГО WIFI"

// OpenWeather API Details, replace x's with your API key
String api_key = "c8305109b351fabf446282b3feae0ee7"; // Ключ для получения прогноза. Можете использовать мой.

// Set both your longitude and latitude to at least 4 decimal places
String latitude =  "52.53639"; // Широта г.Бийска
String longitude = "85.2072200"; // Долгота г.Бийска
String units = "metric";  // Метрическая система
String language = "ru";   // Язык

// =========  User configured stuff ends here  =========
// =====================================================

OW_Weather ow; // Weather forecast library instance

void setup() { 
  Serial.begin(250000); // Fast to stop it holding up the stream

  Serial.printf("\n\nConnecting to %s\n", WIFI_SSID);

  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
   
  while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
  }

  Serial.println();
  Serial.print("Connected\n");
}

void loop() {

  printCurrentWeather();

  // We can make 1000 requests a day
  delay(5 * 60 * 1000); // Every 5 minutes = 288 requests per day
}

/***************************************************************************************
**                          Send weather info to serial port
***************************************************************************************/
void printCurrentWeather()
{
  // Create the structures that hold the retrieved weather
  OW_current *current = new OW_current;
  OW_hourly *hourly = new OW_hourly;
  OW_daily  *daily = new OW_daily;

  Serial.print("\nRequesting weather information from OpenWeather... ");

  //On the ESP8266 (only) the library by default uses BearSSL, another option is to use AXTLS
  //For problems with ESP8266 stability, use AXTLS by adding a false parameter thus       vvvvv
  //ow.getForecast(current, hourly, daily, api_key, latitude, longitude, units, language, false);

  ow.getForecast(current, hourly, daily, api_key, latitude, longitude, units, language);

  Serial.println("Weather from Open Weather\n");

  // Position as reported by Open Weather
  Serial.print("Latitude            : "); Serial.println(ow.lat);
  Serial.print("Longitude           : "); Serial.println(ow.lon);
  // We can use the timezone to set the offset eventually...
  Serial.print("Timezone            : "); Serial.println(ow.timezone);
  Serial.println();

  if (current)
  {
    Serial.println("############### Current weather ###############\n");
    Serial.print("dt (time)        : "); Serial.print(strTime(current->dt));
    Serial.print("sunrise          : "); Serial.print(strTime(current->sunrise));
    Serial.print("sunset           : "); Serial.print(strTime(current->sunset));
    Serial.print("temp             : "); Serial.println(current->temp);
    Serial.print("feels_like       : "); Serial.println(current->feels_like);
    Serial.print("pressure         : "); Serial.println(current->pressure);
    Serial.print("humidity         : "); Serial.println(current->humidity);
    Serial.print("dew_point        : "); Serial.println(current->dew_point);
    Serial.print("uvi              : "); Serial.println(current->uvi);
    Serial.print("clouds           : "); Serial.println(current->clouds);
    Serial.print("visibility       : "); Serial.println(current->visibility);
    Serial.print("wind_speed       : "); Serial.println(current->wind_speed);
    Serial.print("wind_gust        : "); Serial.println(current->wind_gust);
    Serial.print("wind_deg         : "); Serial.println(current->wind_deg);
    Serial.print("rain             : "); Serial.println(current->rain);
    Serial.print("snow             : "); Serial.println(current->snow);
    Serial.println();
    Serial.print("id               : "); Serial.println(current->id);
    Serial.print("main             : "); Serial.println(current->main);
    Serial.print("description      : "); Serial.println(current->description);
    Serial.print("icon             : "); Serial.println(current->icon);

    Serial.println();
  }

  if (hourly)
  {
    Serial.println("############### Hourly weather  ###############\n");
    for (int i = 0; i < MAX_HOURS; i++)
    {
      Serial.print("Hourly summary  "); if (i < 10) Serial.print(" "); Serial.print(i);
      Serial.println();
      Serial.print("dt (time)        : "); Serial.print(strTime(hourly->dt[i]));
      Serial.print("temp             : "); Serial.println(hourly->temp[i]);
      Serial.print("feels_like       : "); Serial.println(hourly->feels_like[i]);
      Serial.print("pressure         : "); Serial.println(hourly->pressure[i]);
      Serial.print("humidity         : "); Serial.println(hourly->humidity[i]);
      Serial.print("dew_point        : "); Serial.println(hourly->dew_point[i]);
      Serial.print("clouds           : "); Serial.println(hourly->clouds[i]);
      Serial.print("wind_speed       : "); Serial.println(hourly->wind_speed[i]);
      Serial.print("wind_gust        : "); Serial.println(hourly->wind_gust[i]);
      Serial.print("wind_deg         : "); Serial.println(hourly->wind_deg[i]);
      Serial.print("rain             : "); Serial.println(hourly->rain[i]);
      Serial.print("snow             : "); Serial.println(hourly->snow[i]);
      Serial.println();
      Serial.print("id               : "); Serial.println(hourly->id[i]);
      Serial.print("main             : "); Serial.println(hourly->main[i]);
      Serial.print("description      : "); Serial.println(hourly->description[i]);
      Serial.print("icon             : "); Serial.println(hourly->icon[i]);
      Serial.print("pop              : "); Serial.println(hourly->pop[i]);

      Serial.println();
    }
  }

  if (daily)
  {
    Serial.println("###############  Daily weather  ###############\n");
    for (int i = 0; i < MAX_DAYS; i++)
    {
      Serial.print("Daily summary   "); if (i < 10) Serial.print(" "); Serial.print(i);
      Serial.println();
      Serial.print("dt (time)        : "); Serial.print(strTime(daily->dt[i]));
      Serial.print("sunrise          : "); Serial.print(strTime(daily->sunrise[i]));
      Serial.print("sunset           : "); Serial.print(strTime(daily->sunset[i]));

      Serial.print("temp.morn        : "); Serial.println(daily->temp_morn[i]);
      Serial.print("temp.day         : "); Serial.println(daily->temp_day[i]);
      Serial.print("temp.eve         : "); Serial.println(daily->temp_eve[i]);
      Serial.print("temp.night       : "); Serial.println(daily->temp_night[i]);
      Serial.print("temp.min         : "); Serial.println(daily->temp_min[i]);
      Serial.print("temp.max         : "); Serial.println(daily->temp_max[i]);

      Serial.print("feels_like.morn  : "); Serial.println(daily->feels_like_morn[i]);
      Serial.print("feels_like.day   : "); Serial.println(daily->feels_like_day[i]);
      Serial.print("feels_like.eve   : "); Serial.println(daily->feels_like_eve[i]);
      Serial.print("feels_like.night : "); Serial.println(daily->feels_like_night[i]);

      Serial.print("pressure         : "); Serial.println(daily->pressure[i]);
      Serial.print("humidity         : "); Serial.println(daily->humidity[i]);
      Serial.print("dew_point        : "); Serial.println(daily->dew_point[i]);
      Serial.print("uvi              : "); Serial.println(daily->uvi[i]);
      Serial.print("clouds           : "); Serial.println(daily->clouds[i]);
      Serial.print("visibility       : "); Serial.println(daily->visibility[i]);
      Serial.print("wind_speed       : "); Serial.println(daily->wind_speed[i]);
      Serial.print("wind_gust        : "); Serial.println(daily->wind_gust[i]);
      Serial.print("wind_deg         : "); Serial.println(daily->wind_deg[i]);
      Serial.print("rain             : "); Serial.println(daily->rain[i]);
      Serial.print("snow             : "); Serial.println(daily->snow[i]);
      Serial.println();
      Serial.print("id               : "); Serial.println(daily->id[i]);
      Serial.print("main             : "); Serial.println(daily->main[i]);
      Serial.print("description      : "); Serial.println(daily->description[i]);
      Serial.print("icon             : "); Serial.println(daily->icon[i]);
      Serial.print("pop              : "); Serial.println(daily->pop[i]);

      Serial.println();
    }
  }

  // Delete to free up space and prevent fragmentation as strings change in length
  delete current;
  delete hourly;
  delete daily;
}

/***************************************************************************************
**                          Convert unix time to a time string
***************************************************************************************/
String strTime(time_t unixTime)
{
  unixTime += TIME_OFFSET;
  return ctime(&unixTime);
}

Не в сети

#4 02-10-2021 22:41:55

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,586

Re: Получаем прогноз погоды от openweathermap.org на ESP32.

Ответ ESP32 в серийный порт на запрос прогноза погоды. Для города Бийска.

Connected

Requesting weather information from OpenWeather...

The connection to server is secure (https). Certificate not checked.
Sending GET request to api.openweathermap.org port 443
Header end found

Parsing JSON

Done in 2713 ms
Weather from Open Weather

Latitude            : 52.54
Longitude           : 85.21
Timezone            : Asia/Barnaul

############### Current weather ###############

dt (time)        : Sat Oct  2 16:40:22 2021
sunrise          : Sat Oct  2 01:21:37 2021
sunset           : Sat Oct  2 12:55:20 2021
temp             : 1.15
feels_like       : -3.33
pressure         : 1028.00
humidity         : 87
dew_point        : -0.68
uvi              : 0.00
clouds           : 82
visibility       : 10000
wind_speed       : 4.73
wind_gust        : 10.65
wind_deg         : 245
rain             : 0.00
snow             : 0.00

id               : 803
main             : Clouds
description      : облачно с прояснениями
icon             : 04n

############### Hourly weather  ###############

Hourly summary   0
dt (time)        : Sat Oct  2 16:00:00 2021
temp             : 1.16
feels_like       : -3.60
pressure         : 1028.00
humidity         : 88
dew_point        : -0.53
clouds           : 81
wind_speed       : 5.24
wind_gust        : 11.39
wind_deg         : 246
rain             : 0.00
snow             : 0.00

id               : 803
main             : Clouds
description      : облачно с прояснениями
icon             : 04n
pop              : 0.00

Hourly summary   1
dt (time)        : Sat Oct  2 17:00:00 2021
temp             : 1.15
feels_like       : -3.33
pressure         : 1028.00
humidity         : 87
dew_point        : -0.68
clouds           : 82
wind_speed       : 4.73
wind_gust        : 10.65
wind_deg         : 245
rain             : 0.00
snow             : 0.00

id               : 803
main             : Clouds
description      : облачно с прояснениями
icon             : 04n
pop              : 0.00

Hourly summary   2
dt (time)        : Sat Oct  2 18:00:00 2021
temp             : 1.09
feels_like       : -3.18
pressure         : 1028.00
humidity         : 88
dew_point        : -0.59
clouds           : 83
wind_speed       : 4.36
wind_gust        : 10.01
wind_deg         : 240
rain             : 0.00
snow             : 0.00

id               : 803
main             : Clouds
description      : облачно с прояснениями
icon             : 04n
pop              : 0.00

Hourly summary   3
dt (time)        : Sat Oct  2 19:00:00 2021
temp             : 0.87
feels_like       : -3.35
pressure         : 1028.00
humidity         : 89
dew_point        : -0.65
clouds           : 84
wind_speed       : 4.20
wind_gust        : 9.60
wind_deg         : 239
rain             : 0.00
snow             : 0.00

id               : 803
main             : Clouds
description      : облачно с прояснениями
icon             : 04n
pop              : 0.00

Hourly summary   4
dt (time)        : Sat Oct  2 20:00:00 2021
temp             : 0.21
feels_like       : -3.50
pressure         : 1029.00
humidity         : 91
dew_point        : -0.96
clouds           : 86
wind_speed       : 3.30
wind_gust        : 8.37
wind_deg         : 234
rain             : 0.00
snow             : 0.00

id               : 804
main             : Clouds
description      : пасмурно
icon             : 04n
pop              : 0.00

Hourly summary   5
dt (time)        : Sat Oct  2 21:00:00 2021
temp             : -0.54
feels_like       : -4.08
pressure         : 1030.00
humidity         : 93
dew_point        : -1.41
clouds           : 89
wind_speed       : 2.92
wind_gust        : 6.93
wind_deg         : 228
rain             : 0.00
snow             : 0.00

id               : 804
main             : Clouds
description      : пасмурно
icon             : 04n
pop              : 0.00

###############  Daily weather  ###############

Daily summary    0
dt (time)        : Sat Oct  2 07:00:00 2021
sunrise          : Sat Oct  2 01:21:37 2021
sunset           : Sat Oct  2 12:55:20 2021
temp.morn        : 3.14
temp.day         : 4.24
temp.eve         : 1.73
temp.night       : 1.15
temp.min         : 1.15
temp.max         : 5.34
feels_like.morn  : -0.67
feels_like.day   : -0.25
feels_like.eve   : -3.42
feels_like.night : -3.33
pressure         : 1018.00
humidity         : 90
dew_point        : 2.52
uvi              : 0.00
clouds           : 100
visibility       : 0
wind_speed       : 9.20
wind_gust        : 14.05
wind_deg         : 250
rain             : 2.27
snow             : 0.00

id               : 500
main             : Rain
description      : небольшой дождь
icon             : 10d
pop              : 1.00

Daily summary    1
dt (time)        : Sun Oct  3 07:00:00 2021
sunrise          : Sun Oct  3 01:23:19 2021
sunset           : Sun Oct  3 12:52:59 2021
temp.morn        : 0.36
temp.day         : 5.48
temp.eve         : 4.84
temp.night       : 2.96
temp.min         : -0.89
temp.max         : 6.62
feels_like.morn  : -2.45
feels_like.day   : 1.80
feels_like.eve   : 3.41
feels_like.night : 1.69
pressure         : 1029.00
humidity         : 59
dew_point        : -2.07
uvi              : 0.00
clouds           : 100
visibility       : 0
wind_speed       : 5.48
wind_gust        : 10.01
wind_deg         : 239
rain             : 0.27
snow             : 0.00

id               : 500
main             : Rain
description      : небольшой дождь
icon             : 10d
pop              : 0.60

Daily summary    2
dt (time)        : Mon Oct  4 07:00:00 2021
sunrise          : Mon Oct  4 01:25:01 2021
sunset           : Mon Oct  4 12:50:38 2021
temp.morn        : 1.87
temp.day         : 8.64
temp.eve         : 6.59
temp.night       : 4.67
temp.min         : 1.75
temp.max         : 9.50
feels_like.morn  : -0.48
feels_like.day   : 6.80
feels_like.eve   : 4.00
feels_like.night : 0.70
pressure         : 1026.00
humidity         : 55
dew_point        : -0.09
uvi              : 0.00
clouds           : 91
visibility       : 0
wind_speed       : 5.48
wind_gust        : 11.18
wind_deg         : 73
rain             : 0.00
snow             : 0.26

id               : 600
main             : Snow
description      : небольшой снег
icon             : 13d
pop              : 0.56

Daily summary    3
dt (time)        : Tue Oct  5 07:00:00 2021
sunrise          : Tue Oct  5 01:26:44 2021
sunset           : Tue Oct  5 12:48:17 2021
temp.morn        : 3.52
temp.day         : 8.51
temp.eve         : 6.20
temp.night       : 4.55
temp.min         : 3.52
temp.max         : 8.51
feels_like.morn  : 2.16
feels_like.day   : 5.86
feels_like.eve   : 5.18
feels_like.night : 2.38
pressure         : 1023.00
humidity         : 66
dew_point        : 2.24
uvi              : 0.00
clouds           : 100
visibility       : 0
wind_speed       : 5.29
wind_gust        : 10.43
wind_deg         : 66
rain             : 0.60
snow             : 0.00

id               : 500
main             : Rain
description      : небольшой дождь
icon             : 10d
pop              : 0.45

Daily summary    4
dt (time)        : Wed Oct  6 07:00:00 2021
sunrise          : Wed Oct  6 01:28:27 2021
sunset           : Wed Oct  6 12:45:57 2021
temp.morn        : 4.33
temp.day         : 9.81
temp.eve         : 8.25
temp.night       : 4.61
temp.min         : 4.18
temp.max         : 11.31
feels_like.morn  : 1.58
feels_like.day   : 7.65
feels_like.eve   : 7.20
feels_like.night : 0.07
pressure         : 1021.00
humidity         : 58
dew_point        : 1.78
uvi              : 0.00
clouds           : 80
visibility       : 0
wind_speed       : 6.83
wind_gust        : 10.19
wind_deg         : 250
rain             : 1.18
snow             : 0.00

id               : 500
main             : Rain
description      : небольшой дождь
icon             : 10d
pop              : 0.56

Не в сети

Подвал раздела

Работает на FluxBB (перевод Laravel.ru)