• Post category:NodeMcu v3 – ESP-12
  • Commentaires de la publication :0 commentaire
  • Dernière modification de la publication :janvier 8, 2023
  • Temps de lecture :9 min de lecture

Récupération des infos météo en temps réel avec openweather gratuitement

Niveau APPRENTISSAGE :   ► Fort

 

    Prérequis :

Matériel :

  • 1 x NodeMCU Microcontroller Board
  • 1 x Breadboard

 (gratuit) Obtenir une clé API en vous inscrivant:

Version IDE :

Bibliothèque :

 

Vidéo de démonstration :

 

Schéma de câblage :

 

Code :

const char* ssid = "-----";
const char* password = "-----";

// ApiKey
//https://docs.thingpulse.com/how-tos/openweathermap-key/
String openWeatherMapApiKey = "-----";
//https://openweathermap.org/city/
String ville = "-----";
String Payscode = "-----";

String jsonBuffer;
int httpCode;

bool LoadingBoot;
unsigned long currentTime = 0;
unsigned long previousTime = 0;

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

void setup(void) {
Serial.begin(9600);
Serial.println();
Serial.print("Connexion Wi-Fi à ");
Serial.println(ssid);
WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("Wi-Fi Connecté avec Succès ! ");
Serial.print("Ip Local : ");
Serial.println(WiFi.localIP());
}

void loop(void) {
currentTime = millis();
if (WiFi.status() == WL_CONNECTED) //Check WiFi connection status
{
WiFiClient client;
if (((currentTime - previousTime) > 10000) || LoadingBoot == 0 ){
LoadingBoot = 1;
previousTime = currentTime;
HTTPClient http; //Déclarer un objet de classe HTTPClient
//Appelle les données météorologiques actuelles.
http.begin(client, "http://api.openweathermap.org/data/2.5/weather?q=" + ville + "," + Payscode + "&lang=fr&APPID=" + openWeatherMapApiKey + "&units=metric"); // !!
httpCode = http.GET(); //Envoyer la demande
if (httpCode > 0) // Vérifie le code de retour
{
String payload = http.getString(); //Obtenir la réponse à la demande
Serial.println("--- Données recu de openweathermap ---");
Serial.println(payload);
Serial.println("-----------------------------------------");
Serial.println("");
// Use https://arduinojson.org/v6/assistant to compute the capacity.
const size_t capacity = JSON_OBJECT_SIZE(544) + JSON_ARRAY_SIZE(239) + 60;
DynamicJsonDocument infosOP(capacity);
// Parse JSON object
DeserializationError error = deserializeJson(infosOP, payload);

if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
client.stop();
return;
}
//https://openweathermap.org/current
const char* OPVille = infosOP["name"]; // Ville
float OPCoordLon = infosOP["coord"]["lon"]; //Coordonnées géographiques (longitude).
float OPCoordLat = infosOP["coord"]["lat"];//Coordonnées géographiques (latitude).
JsonObject weather = infosOP["weather"][0];
int OPIdMeteo = weather["id"];// Identifiant de la condition météo
const char* OPCondMeteo = weather["main"];//Groupe de paramètres météorologiques (pluie, neige, extrême, etc.).
const char* OPDescrMeteo = weather["description"];//Description ciel.
const char* OPIdentIconeMeteo = weather["icon"];//Identifiant de l'icône météo.
float OPTempExt = infosOP["main"]["temp"];//Température °C.
float OPTempRessenti = infosOP["main"]["feels_like"];//Température Ressenti °C.
float OPTempExtMini = infosOP["main"]["temp_min"];//Température Mini °C.
float OPTempExtMax = infosOP["main"]["temp_max"];//Température Max °C.
float OPPression = infosOP["main"]["pressure"];//Pression atmosphérique au niveau de la mer, hPa.
int OPHumExt = infosOP["main"]["humidity"];// Humidité, %.
int OPvisibility = infosOP["visibility"];//Visibilité, mètre. La valeur maximale de la visibilité est de 10 km
float OPVitesseVent = infosOP["wind"]["speed"];//Vitesse du vent, Unité par défaut : mètre/sec.
int OPDirectionVent = infosOP["wind"]["deg"];//Direction du vent, degrés (météorologiques).
int OPRafaleVent = infosOP["wind"]["gust"];//Rafale de vent. Unité par défaut : mètre/sec.
int OPNebulosite = infosOP["clouds"]["all"];//Nébulosité, %.
unsigned long OPHeuredonnees = infosOP["dt"];//Heure de calcul des données, unix, UTC.
unsigned long OPSunrise = infosOP["sys"]["sunrise"];//Heure du lever du soleil, unix, UTC.
unsigned long OPSunset = infosOP["sys"]["sunset"];//Heure de coucher du soleil, unix, UTC.
const char* OPPays = infosOP["sys"]["country"]; // Indicatif du pays (GB, FR, etc.).

Serial.println("--- Details de l'ensemble des donnees ---");
Serial.printf("Ville = %s\r\n", OPVille);
Serial.printf("Coordonnees geographiques (longitude) : %.4f\r\n", OPCoordLon);
Serial.printf("Coordonnees geographiques (latitude) : %.4f\r\n", OPCoordLat);
Serial.printf("Identifiant de la condition meteo : %d\r\n", OPIdMeteo);
Serial.printf("Conditions météorologiques : %s\r\n", OPCondMeteo);
Serial.printf("Description ciel : %s\r\n", OPDescrMeteo);
Serial.printf("Identifiant de l'icône météo : %s\r\n", OPIdentIconeMeteo);
Serial.printf("Température : %.2f °C\r\n", OPTempExt);
Serial.printf("Température Ressenti : %.2f °C\r\n", OPTempRessenti);
Serial.printf("Température Mini : %.2f °C\r\n", OPTempExtMini);
Serial.printf("Température Max : %.2f °C\r\n", OPTempExtMax);
Serial.printf("Pression atmosphérique au niveau de la mer, hPa : %.2f hPa\r\n", OPPression);
Serial.printf("Humidité : %d %%\r\n", OPHumExt);
Serial.printf("Visibilité : %d m\r\n", OPvisibility);
Serial.printf("Vitesse du vent : %.2f mètre/sec\r\n", OPVitesseVent);
Serial.printf("Direction du vent : %d °\r\n", OPDirectionVent);
Serial.printf("Rafale de vent : %d mètre/sec\r\n", OPRafaleVent);
Serial.printf("Nébulosité : %d %%\r\n", OPNebulosite);
Serial.printf("Heure de calcul des données : %02d:%02d:%02d\n", hour(OPHeuredonnees), minute(OPHeuredonnees), second(OPHeuredonnees));
Serial.printf("Heure du lever du soleil : %02d:%02d:%02d\n", hour(OPSunrise), minute(OPSunrise), second(OPSunrise));
Serial.printf("Heure de coucher du soleil : %02d:%02d:%02d\n", hour(OPSunset), minute(OPSunset), second(OPSunset));
Serial.printf("Pays = %s\r\n", OPPays);
Serial.println("------------------------------------------");
Serial.println("");
Serial.println("");

}
}
}
}

 


 

Laisser un commentaire