Получаем данные о погоде из интернета, код из видео

Или парсим данные о погоде с сайта openweathermap.org и narodmon.ru при помощи ESP8266

Код:


GET запрос
// GET запрос к http://api.openweathermap.org


#include <ESP8266WiFi.h>

const char* ssid     = "WLAN1";         // тут SSID и пароль к WIFI
const char* password = "1231234123";

const char* host = "api.openweathermap.org";     // тут адрес сервера


void setup() {
  Serial.begin(115200);
  delay(10);
  
  
  // в сетапе как обычно подключаемся к сети

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

 
  Get();        // при  включении выполняем функцию
}
 
void loop() {
  
}
 

void Get() {

   
  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {      /// подключаемся к серверу 
    Serial.println("connection failed");
    return;
  }
   /// если подключились, отправляем чего от сервера хотим
              // сам GET запрос с ID и ключем
    client.println("GET /data/2.5/weather?id=542420&appid=6a4ba421859c9f4166697758b68d889b HTTP/1.1");
              // говорим к какому хосту обращаемся (на сервере может быть несколько сайтов)
    client.println("Host: api.openweathermap.org");
              // говорим что закончили
    client.println("Connection: close");
    client.println();
 
  delay(1000);  // ждем немного 
                // читаем ответ и отправляем его в Serial
  while(client.available()){
   String line = client.readStringUntil('\r'); 
    Serial.print(line);
  }
 
  Serial.println();
  Serial.println("closing connection");
}


парсинг погоды с api.openweathermap.org
// парсинг погоды с http://api.openweathermap.org

// Arduino JSON library
// https://github.com/bblanchon/ArduinoJson
// If you like this project, please add a star!

#include <ArduinoJson.h> 
#include <ESP8266WiFi.h>

const char* ssid     = "WLAN1";
const char* password = "1231234123";


const char* host = "api.openweathermap.org";
String line; 

void setup() {
  Serial.begin(115200);
  delay(10);
  
  
  // We start by connecting to a WiFi network

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

    jsonGet();
}
 
void loop() {
   
   StaticJsonBuffer<2000> jsonBuffer;                   /// буфер на 2000 символов
   JsonObject& root = jsonBuffer.parseObject(line);     // скармиваем String
   if (!root.success()) {
    Serial.println("parseObject() failed");             // если ошибка, сообщаем об этом
     jsonGet();                                         // пинаем сервер еще раз
    return;                                             // и запускаем заного 
  }
  
  
                              /// отправка в Serial
  Serial.println();  
  String name = root["name"];                           // достаем имя, 
  Serial.print("name:");
  Serial.println(name);  
  
  float tempK = root["main"]["temp"];                   // достаем температуру из структуры main
  float tempC = tempK - 273.15;                         // переводим кельвины в цельси
  Serial.print("temp: ");
  Serial.print(tempC);                                  // отправляем значение в сериал
  Serial.println(" C");

  float tempKmin = root["main"]["temp_min"];            // и так далее
  float tempCmin = tempKmin - 273.15;
  Serial.print("temp min: ");
  Serial.print(tempCmin);
  Serial.println(" C");

  float tempKmax = root["main"]["temp_max"];
  float tempCmax = tempKmax - 273.15;
  Serial.print("temp max: ");
  Serial.print(tempCmax);
  Serial.println(" C");
  
  int pressurehPa = root["main"]["pressure"]; 
  float pressure = pressurehPa/1.333;
  Serial.print("pressure: ");
  Serial.print(pressure);
  Serial.println(" mmHc");

  int humidity = root["main"]["humidity"]; 
  Serial.print("humidity: ");
  Serial.print(humidity);  
  Serial.println(" %");

  float windspeed = root["wind"]["speed"]; 
  Serial.print("wind speed: ");
  Serial.print(windspeed);  
  Serial.println(" m/s");

  int winddeg = root["wind"]["deg"]; 
  Serial.print("wind deg :");
  Serial.println(winddeg);  
 

  Serial.println();  
  Serial.println();  
  delay(50000);
}
 

void jsonGet() {
  
  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }
  
    client.println("GET /data/2.5/weather?id=542420&appid=6a4ba421859c9f4166697758b68d889b HTTP/1.1");
    client.println("Host: api.openweathermap.org");
    client.println("Connection: close");
    client.println();
 
  delay(1500);
  // Read all the lines of the reply from server and print them to Serial
  while(client.available()){
    line = client.readStringUntil('\r'); 
  }
  Serial.print(line);
  Serial.println();
  Serial.println("closing connection");
}


парсинг погоды с narodmon.ru
// Arduino JSON library
// https://github.com/bblanchon/ArduinoJson
// If you like this project, please add a star!

#include <ArduinoJson.h> 
#include <ESP8266WiFi.h>

const char* ssid     = "WLAN1";
const char* password = "1231234123";


const char* host = "narodmon.ru";
String line; 

void setup() {
  Serial.begin(115200);
  delay(10);
  
  
  // We start by connecting to a WiFi network

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  jsonGet();
  
}
 
void loop() { 
   
   StaticJsonBuffer<2000> jsonBuffer;
   JsonObject& root = jsonBuffer.parseObject(line);
   if (!root.success()) {
    Serial.println("parseObject() failed"); 
    jsonGet();                                         // пинаем сервер еще раз
    return;                                             // и запускаем заного  
  }
  
  
  Serial.println();  
      /// отправка в Serial
  String owner = root["owner"]; 
  Serial.print("owner: ");
  Serial.println(owner);  
  String name = root["name"]; 
  Serial.print("name: ");
  Serial.println(name);  
  Serial.println();  

  
  int val = 0;
  while(1){ 
    int sensorsID = root["sensors"][val]["id"];  
       if (sensorsID == 0) break; 
    Serial.print("sensorsID: ");
    Serial.println(sensorsID);

    String name = root["sensors"][val]["name"];  
    Serial.print("name: ");
    Serial.println(name);

    float value = root["sensors"][val]["value"];  
    Serial.print("value: ");
    Serial.print(value);

    String unit = root["sensors"][val]["unit"];  
    Serial.println(unit);
 
    Serial.println();  
    val++; 
  } 

  Serial.println();  
  Serial.println();  
  delay(50000);
}
 
    
void jsonGet() {
  
  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }
  
    client.println("GET /api/sensorsOnDevice?id=10705&uuid=4ce0bec67fe735f4997426101dd5292b&api_key=43MGvb.5IUhRE&lang=en HTTP/1.1");
    client.println("Host: narodmon.ru");
    client.println("Connection: close");
    client.println();
 
  delay(1000);
  // Read all the lines of the reply from server and print them to Serial
  while(client.available()){
    line = client.readStringUntil('\r'); 
  }
  Serial.print(line);
  Serial.println();
  Serial.println("closing connection");
}