Salut tout le monde, je souhaite calculer la puissance actuelle fournis par toutes les éoliennes présentes sur le territoire marocain en fonction de la vitesse du vent à chaque parc éolienne, du coup j'utilise un esp 8266 connecté à un arduino mega qui récupère ces données via un API, je dois donc me connecter 10 fois à L'API pour récupérer la donnée à 10 endroits différents, cependant il arrive que la connexion à open weather map échou à l'une des 10 connexions et fausse l'intégralité du calcul,
Y'a-t-il un moyen pour réessayer de se connecter au cas ou ça échou à l'une des 10 reprises, voici mon programme actuel
#include <ArduinoJson.h>
#define DST_IP "api.openweathermap.org"
String NomduRéseauWifi "xxxxxxxxxxxxx" ; // Garder les guillements
String MotDePasse = "xxxxxxxxx"; // Garder les guillements
DynamicJsonDocument doc(64);
/****************************************************************/
/* INIT */
/****************************************************************/
void setup()
{
Serial.begin(9600);
Serial1.begin(115200);
initESP8266();
}
/****************************************************************/
/* BOUCLE INFINIE */
/****************************************************************/
void loop()
{
/* while(Serial1.available())
{
Serial.println(Serial1.readString());
} */
}
/****************************************************************/
/* Fonction qui initialise l'ESP8266 */
/****************************************************************/
void initESP8266()
{
Serial.println("**********************************************************");
Serial.println("**************** DEBUT DE L'INITIALISATION ***************");
Serial.println("**********************************************************");
envoieAuESP8266("AT+RST");
recoitDuESP8266(2000);
Serial.println("**********************************************************");
/*envoieAuESP8266("AT+CWMODE=1");
recoitDuESP8266(5000);
Serial.println("**********************************************************");*/
envoieAuESP8266("AT+CWJAP=\""+ NomduReseauWifi + "\",\"" + MotDePasse +"\"");
recoitDuESP8266(20000);
Serial.println("**********************************************************");
envoieAuESP8266("AT+CIPMUX=0");
recoitDuESP8266(1000);
Serial.println("**********************************************************");
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += DST_IP;
cmd += "\",80";
envoieAuESP8266(cmd);
recoitDuESP8266(10000);
if(Serial.find("ERROR")) return;
Serial.println("**********************************************************");
envoieAuESP8266("AT+CIPSEND=72");
//recoitDuESP8266(2000);
cmd ="GET /data/2.5/weather?q=Tangier&appid=XXXXXXXXXXXXXXXXXXX";
recoitDuESP8266(2000);
envoieAuESP8266(cmd);
unsigned int i = 0; //timeout counter
int n = 1; // char counter
String json="{";
size_t inputLength=22;
while (!Serial1.find("\"wind\":{")){}
while (i<60000) {
if(Serial1.available()) {
char c = Serial1.read();
json=json+c;
Serial.print(c);
if(c=='}'){
Serial.println ("fichier json trouvé");
break;}
n++;
i=0;
}
i++;
}
Serial.println(n);
DeserializationError error = deserializeJson(doc, json);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
float vent_parcs_tanger = doc["speed"];
Serial.print("la vitesse du vent en m/s est de l'ordre de: ");
Serial.print((float)vent_parcs_tanger);
recoitDuESP8266(40000);
Serial.println("**********************************************************");
envoieAuESP8266("AT+CIPMUX=0");
recoitDuESP8266(1000);
Serial.println("**********************************************************");
cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += DST_IP;
cmd += "\",80";
envoieAuESP8266(cmd);
recoitDuESP8266(10000);
if(Serial.find("ERROR")) return;
Serial.println("**********************************************************");
envoieAuESP8266("AT+CIPSEND=83");
//recoitDuESP8266(2000);
cmd ="GET /data/2.5/weather?q=Sakia%20El%20Hamra&appid=XXXXXXXXXXXXXXXXXXXXXXXXXXXX";
recoitDuESP8266(2000);
envoieAuESP8266(cmd);
i = 0; //timeout counter
n = 1; // char counter
json="{";
inputLength=22;
while (!Serial1.find("\"wind\":{")){}
while (i<60000) {
if(Serial1.available()) {
char c = Serial1.read();
json=json+c;
Serial.print(c);
if(c=='}'){
Serial.println ("fichier json trouvé");
break;}
n++;
i=0;
}
i++;
}
Serial.println(n);
error = deserializeJson(doc, json);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
float vent_parc_aftissat = doc["speed"];
Serial.print("la vitesse du vent en m/s est de l'ordre de: ");
Serial.print((float)vent_parc_aftissat);
recoitDuESP8266(40000);
Serial.println("**********************************************************");
envoieAuESP8266("AT+CIPMUX=0");
recoitDuESP8266(1000);
Serial.println("**********************************************************");
cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += DST_IP;
cmd += "\",80";
envoieAuESP8266(cmd);
recoitDuESP8266(10000);
if(Serial.find("ERROR")) return;
Serial.println("**********************************************************");
envoieAuESP8266("AT+CIPSEND=72");
//recoitDuESP8266(2000);
cmd ="GET /data/2.5/weather?q=Tarfaya&appid=XXXXXXXXXXXXXXXXXX";
recoitDuESP8266(2000);
envoieAuESP8266(cmd);
i = 0; //timeout counter
n = 1; // char counter
json="{";
inputLength=22;
while (!Serial1.find("\"wind\":{")){}
while (i<60000) {
if(Serial1.available()) {
char c = Serial1.read();
json=json+c;
Serial.print(c);
if(c=='}'){
Serial.println ("fichier json trouvé");
break;}
n++;
i=0;
}
i++;
}
Serial.println(n);
error = deserializeJson(doc, json);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
float vent_parc_akhfenir = doc["speed"];
Serial.print("la vitesse du vent en m/s est de l'ordre de: ");
Serial.print((float)vent_parc_akhfenir);
recoitDuESP8266(40000);
Serial.println("**********************************************************");
envoieAuESP8266("AT+CIPMUX=0");
recoitDuESP8266(1000);
Serial.println("**********************************************************");
cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += DST_IP;
cmd += "\",80";
envoieAuESP8266(cmd);
recoitDuESP8266(10000);
if(Serial.find("ERROR")) return;
Serial.println("**********************************************************");
envoieAuESP8266("AT+CIPSEND=73");
//recoitDuESP8266(2000);
cmd ="GET /data/2.5/weather?q=Laayoune&appid=XXXXXXXXXXXXXXX";
recoitDuESP8266(2000);
envoieAuESP8266(cmd);
i = 0; //timeout counter
n = 1; // char counter
json="{";
inputLength=22;
while (!Serial1.find("\"wind\":{")){}
while (i<60000) {
if(Serial1.available()) {
char c = Serial1.read();
json=json+c;
Serial.print(c);
if(c=='}'){
Serial.println ("fichier json trouvé");
break;}
n++;
i=0;
}
i++;
}
Serial.println(n);
error = deserializeJson(doc, json);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
float vent_parcs_laayoune = doc["speed"];
Serial.print("la vitesse du vent en m/s est de l'ordre de: ");
Serial.print((float)vent_parcs_laayoune);
recoitDuESP8266(40000);
Serial.println("**********************************************************");
envoieAuESP8266("AT+CIPMUX=0");
recoitDuESP8266(1000);
Serial.println("**********************************************************");
cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += DST_IP;
cmd += "\",80";
envoieAuESP8266(cmd);
recoitDuESP8266(10000);
if(Serial.find("ERROR")) return;
Serial.println("**********************************************************");
envoieAuESP8266("AT+CIPSEND=70");
//recoitDuESP8266(2000);
cmd ="GET /data/2.5/weather?q=Ceuta&appid=XXXXXXXXXXXXXXXXXXXX";
recoitDuESP8266(2000);
envoieAuESP8266(cmd);
i = 0; //timeout counter
n = 1; // char counter
json="{";
inputLength=22;
while (!Serial1.find("\"wind\":{")){}
while (i<60000) {
if(Serial1.available()) {
char c = Serial1.read();
json=json+c;
Serial.print(c);
if(c=='}'){
Serial.println ("fichier json trouvé");
break;}
n++;
i=0;
}
i++;
}
Serial.println(n);
error = deserializeJson(doc, json);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
float vent_parc_haouma = doc["speed"];
Serial.print("la vitesse du vent en m/s est de l'ordre de: ");
Serial.print((float)vent_parc_haouma);
recoitDuESP8266(40000);
Serial.println("**********************************************************");
envoieAuESP8266("AT+CIPMUX=0");
recoitDuESP8266(1000);
Serial.println("**********************************************************");
cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += DST_IP;
cmd += "\",80";
envoieAuESP8266(cmd);
recoitDuESP8266(10000);
if(Serial.find("ERROR")) return;
Serial.println("**********************************************************");
envoieAuESP8266("AT+CIPSEND=71");
//recoitDuESP8266(2000);
cmd ="GET /data/2.5/weather?q=Midelt&appid=XXXXXXXXXXXXXXXXXXXXXXX";
recoitDuESP8266(2000);
envoieAuESP8266(cmd);
i = 0; //timeout counter
n = 1; // char counter
json="{";
inputLength=22;
while (!Serial1.find("\"wind\":{")){}
while (i<60000) {
if(Serial1.available()) {
char c = Serial1.read();
json=json+c;
Serial.print(c);
if(c=='}'){
Serial.println ("fichier json trouvé");
break;}
n++;
i=0;
}
i++;
}
Serial.println(n);
error = deserializeJson(doc, json);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
float vent_parc_midelt = doc["speed"];
Serial.print("la vitesse du vent en m/s est de l'ordre de: ");
Serial.print((float)vent_parc_midelt);
recoitDuESP8266(40000);
Serial.println("**********************************************************");
envoieAuESP8266("AT+CIPMUX=0");
recoitDuESP8266(1000);
Serial.println("**********************************************************");
cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += DST_IP;
cmd += "\",80";
envoieAuESP8266(cmd);
recoitDuESP8266(10000);
if(Serial.find("ERROR")) return;
Serial.println("**********************************************************");
envoieAuESP8266("AT+CIPMUX=0");
recoitDuESP8266(1000);
Serial.println("**********************************************************");
cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += DST_IP;
cmd += "\",80";
envoieAuESP8266(cmd);
recoitDuESP8266(10000);
if(Serial.find("ERROR")) return;
Serial.println("**********************************************************");
envoieAuESP8266("AT+CIPSEND=75");
//recoitDuESP8266(2000);
cmd ="GET /data/2.5/weather?q=Benslimane&appid=XXXXXXXXXXXXXXXXXXXXX";
recoitDuESP8266(2000);
envoieAuESP8266(cmd);
i = 0; //timeout counter
n = 1; // char counter
json="{";
inputLength=22;
while (!Serial1.find("\"wind\":{")){}
while (i<60000) {
if(Serial1.available()) {
char c = Serial1.read();
json=json+c;
Serial.print(c);
if(c=='}'){
Serial.println ("fichier json trouvé");
break;}
n++;
i=0;
}
i++;
}
Serial.println(n);
error = deserializeJson(doc, json);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
float vent_parc_soulmanya = doc["speed"];
Serial.print("la vitesse du vent en m/s est de l'ordre de: ");
Serial.print((float)vent_parc_soulmanya);
recoitDuESP8266(40000);
Serial.println("**********************************************************");
envoieAuESP8266("AT+CIPMUX=0");
recoitDuESP8266(1000);
Serial.println("**********************************************************");
cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += DST_IP;
cmd += "\",80";
envoieAuESP8266(cmd);
recoitDuESP8266(10000);
if(Serial.find("ERROR")) return;
Serial.println("**********************************************************");
envoieAuESP8266("AT+CIPSEND=69");
//recoitDuESP8266(2000);
cmd ="GET /data/2.5/weather?q=Safi&appid=XXXXXXXXXXXXXXXXXXXX";
recoitDuESP8266(2000);
envoieAuESP8266(cmd);
i = 0; //timeout counter
n = 1; // char counter
json="{";
inputLength=22;
while (!Serial1.find("\"wind\":{")){}
while (i<60000) {
if(Serial1.available()) {
char c = Serial1.read();
json=json+c;
Serial.print(c);
if(c=='}'){
Serial.println ("fichier json trouvé");
break;}
n++;
i=0;
}
i++;
}
Serial.println(n);
error = deserializeJson(doc, json);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
float vent_parc_oualidiya = doc["speed"];
Serial.print("la vitesse du vent en m/s est de l'ordre de: ");
Serial.print((float)vent_parc_oualidiya);
recoitDuESP8266(40000);
Serial.println("**********************************************************");
envoieAuESP8266("AT+CIPMUX=0");
recoitDuESP8266(1000);
Serial.println("**********************************************************");
cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += DST_IP;
cmd += "\",80";
envoieAuESP8266(cmd);
recoitDuESP8266(10000);
if(Serial.find("ERROR")) return;
Serial.println("**********************************************************");
envoieAuESP8266("AT+CIPSEND=74");
//recoitDuESP8266(2000);
cmd ="GET /data/2.5/weather?q=Essaouira&appid=XXXXXXXXXXXXXXXXXXXX";
recoitDuESP8266(2000);
envoieAuESP8266(cmd);
i = 0; //timeout counter
n = 1; // char counter
json="{";
inputLength=22;
while (!Serial1.find("\"wind\":{")){}
while (i<60000) {
if(Serial1.available()) {
char c = Serial1.read();
json=json+c;
Serial.print(c);
if(c=='}'){
Serial.println ("fichier json trouvé");
break;}
n++;
i=0;
}
i++;
}
Serial.println(n);
error = deserializeJson(doc, json);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
float vent_parc_tarfayer = doc["speed"];
Serial.print("la vitesse du vent en m/s est de l'ordre de: ");
Serial.print((float)vent_parc_tarfayer);
recoitDuESP8266(40000);
Serial.println("**********************************************************");
envoieAuESP8266("AT+CIPMUX=0");
recoitDuESP8266(1000);
Serial.println("**********************************************************");
cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += DST_IP;
cmd += "\",80";
envoieAuESP8266(cmd);
recoitDuESP8266(10000);
if(Serial.find("ERROR")) return;
Serial.println("**********************************************************");
envoieAuESP8266("AT+CIPSEND=72");
//recoitDuESP8266(2000);
cmd ="GET /data/2.5/weather?q=Tetouan&appid=XXXXXXXXXXXXXXXXX";
recoitDuESP8266(2000);
envoieAuESP8266(cmd);
i = 0; //timeout counter
n = 1; // char counter
json="{";
inputLength=22;
while (!Serial1.find("\"wind\":{")){}
while (i<60000) {
if(Serial1.available()) {
char c = Serial1.read();
json=json+c;
Serial.print(c);
if(c=='}'){
Serial.println ("fichier json trouvé");
break;}
n++;
i=0;
}
i++;
}
Serial.println(n);
error = deserializeJson(doc, json);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
float vent_parcs_tetouan = doc["speed"];
Serial.print("la vitesse du vent en m/s est de l'ordre de: ");
Serial.print((float)vent_parcs_tetouan);
recoitDuESP8266(40000);
Serial.println("**********************************************************");
Serial.println("***************** INITIALISATION TERMINEE ****************");
Serial.println("**********************************************************");
Serial.println("");
}
/****************************************************************/
/* Fonction qui envoie une commande à l'ESP8266 */
/****************************************************************/
void envoieAuESP8266(String commande)
{
Serial1.println(commande);
}
/****************************************************************/
/*Fonction qui lit et affiche les messages envoyés par l'ESP8266*/
/****************************************************************/
void recoitDuESP8266(const int timeout)
{
String reponse = "";
long int time = millis();
while( (time+timeout) > millis())
{
while(Serial1.available())
{
char c = Serial1.read();
reponse+=c;
}
}
Serial.print(reponse);
}