Урок 4. Получение погоды с сайта OpenWeatherMap.

  • Просмотры Просмотры: 1.950
  • Последнее обновление Последнее обновление:
  • В этом уроке мы будем получать данные о погоде с сайта OpenWeatherMap и выводить в serial порт.
    Схемы для данного проекта нет.

    Регистрация на OpenWeatherMap и получения API ключа
    Для начала необходимо зарегистрироваться на OpenWeatherMap и получить API ключ для получения погоды.

    Сначала перейдите на OpenWeatherMap и нажмите "Sign Up"
    1546380748062.png


    После этого заполните все поля, поставьте галочки и нажмите "Create Account"
    Далее на email который вы указали придет письмо со ссылкой для подтверждения аккаунта.

    Перейдите на home.openweathermap.org и перейдите на вкладку "API keys"
    1546380804051.png


    Скопируйте Ваш API ключ, он понадобится далее.
    1546380814621.png


    Программа
    В ESP8266 загрузите код ниже, но перед загрузкой в строке 7 напишите cвой API ключ, в строке 8 id вашего города (его можно узнать введя Ваш почтовый индекс на главной сайта OpenWeatherMap в поле "Weather in you city"), а в строках 5 и 6 напишите данные для подключения к Вашему WiFi.
    C++:

    #include <ArduinoJson.h> //Подключаем библиотеку для работы с данными в формате JSON
    #include <ESP8266WiFi.h> //Подключаем библиотеку для работы с WiFi на ESP8266

    const char* ssid = "ssid"; //Имя вашей сети WiFi
    const char* password = "password"; //Пароль вашей сети WiFi
    const char* api = "api"; //Ваш API ключ
    const char* city = "id"; //ID вашего города
    const char* host = "api.openweathermap.org";

    String line; //Строка с JSON ответом OpenWeatherMap

    void setup() {
    Serial.begin(9600); //Инициализируем Serial на скорости 9600 бод
    delay(10);
    WiFi.begin(ssid, password); //Подключаемся к сети WiFi
    while (WiFi.status() != WL_CONNECTED) {}//Ждем пока не подключимся к WiFi

    jsonGet(); //Запускаем функцию получения данных в формате JSON
    }

    void loop() {
    StaticJsonBuffer<2000> jsonBuffer; //Создаем буфер на 2000 символов
    JsonObject& root = jsonBuffer.parseObject(line); //Передаем строку с данными для обработки
    if (!root.success()) {
    Serial.println("parseObject() failed"); //Если ошибка, сообщаем об этом
    jsonGet(); //Получаем данные от сервера снова
    return; //И начинаем заново
    }

    Serial.println(); //В serial переходим на новую строку
    String name = root["name"]; //Получаем имя
    Serial.println("name:" + name); //И выводим в Serial

    float tempK = root["main"]["temp"]; //Получаем температуру из структуры main
    float tempC = tempK - 273.15; //Переводим кельвины в цельси
    Serial.println("temp: " + String(tempC) + " C"); //Выводим данные в Serial

    //Далее: то-же самое, но другие данные

    float tempKmin = root["main"]["temp_min"]; //Минимальная температура
    float tempCmin = tempKmin - 273.15;
    Serial.println("temp min: " + String(tempCmin) + " C");

    float tempKmax = root["main"]["temp_max"]; //Максимальная температура
    float tempCmax = tempKmax - 273.15;
    Serial.println("temp max: " + String(tempCmax) + " C");

    int pressurehPa = root["main"]["pressure"]; //Давление
    float pressure = pressurehPa/1.333;
    Serial.println("pressure: " + String(pressure) + " mmHc");

    int humidity = root["main"]["humidity"]; //Влажность
    Serial.println("humidity: " + String(humidity) + " %");

    float windspeed = root["wind"]["speed"]; //Скорость ветра
    Serial.println("wind speed: " + String(windspeed) + " m/s");

    int winddeg = root["wind"]["deg"]; //Температура ветра
    Serial.println("wind deg :" + String(winddeg));

    Serial.println();
    Serial.println();
    delay(50000); //Ждем 50 секунд и начинаем заново(чаще нельзя, если вы на бесплатном тарифе)
    }


    void jsonGet() {
    WiFiClient client; //Инициализируем клиента WiFi
    if (!client.connect(host, 80)) { //Подключаемся к серверу
    Serial.println("connection failed"); //Если ошибка, пишем в serial
    return; //И пробуем снова
    }

    //Делаем GET запрос на сервер:
    client.println("GET /data/2.5/weather?id=" + String(city) + "&appid=" + String(api) + " HTTP/1.1");
    client.println("Host: api.openweathermap.org");
    client.println("Connection: close");
    client.println();

    delay(1500);
    while(client.available()){ //Если получили ответ от сервера...
    line = client.readStringUntil('\r'); //Добавляем полученные данные в строку line
    }
    }
  • Загрузка…
Сверху