Requête HTTP API ESP8266

Bonjour, je souhaite créer un programme qui m'alerte sur le temps restant avant le prochain lancement Spacex pour cela j'utilise une ESP8266. Je prends les informations API à partir de cet URL: https://api.spacexdata.com/v4/launches/next.
Mais je ne parviens pas à me mais la requête http ne marche pas.
Quelqu'un pourrait m'aider?
PS: je démarre avec ESP8266 je je ne sais pas si j'ai utilisé les bons termes
Merci d'avance

Capture d’écran 2020-11-08 à 11.45.21.png

Lancement_spacex.ino (1.27 KB)

Capture d’écran 2020-11-08 à 11.45.21.png

Lorsque le code n’est pas trop long, autant le mettre dans le corps du message (entre balises) afin qu’il soit plus lisible pour tous :

#include <ESP8266WiFiGratuitous.h>
#include <WiFiServerSecure.h>
#include <WiFiClientSecure.h>
#include <WiFiClientSecureBearSSL.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <WiFiUdp.h>
#include <ESP8266WiFiType.h>
#include <CertStoreBearSSL.h>
#include <ESP8266WiFiAP.h>
#include <WiFiClient.h>
#include <BearSSLHelpers.h>
#include <WiFiServer.h>
#include <ESP8266WiFiScan.h>
#include <WiFiServerSecureBearSSL.h>
#include <ESP8266WiFiGeneric.h>
#include <ESP8266WiFiSTA.h>
#include <WiFiClientSecureAxTLS.h>
#include <WiFiServerSecureAxTLS.h>
#include <ESP8266HTTPClient.h>



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

void setup() 
{
  Serial.begin(115200);
  delay(4000);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connection...");
  }
  Serial.println("Connecté au réseaux WiFi");
}

void loop() {
  
 if ((WiFi.status() == WL_CONNECTED)) {
  HTTPClient http;
  http.begin("https://api.spacexdata.com/v4/launches/next");
  int httpCode = http.GET();

  if (httpCode > 0) {

    String payload = http.getString();
    Serial.println(httpCode);
    Serial.println(payload);
    }
  else {
    Serial.println("Erreur dans la requet HTTPS");
  }
  http.end();
 }
 delay(10000);
}

En allant sur le site que tu indiques, j’obtiens ceci :

{"fairings":null,"links":{"patch":{"small":null,"large":null},"reddit":{"campaign":"https://www.reddit.com/r/spacex/comments/iwb8bl/crew1_launch_campaign_thread/","launch":null,"media":null,"recovery":null},"flickr":{"small":[],"original":[]},"presskit":null,"webcast":null,"youtube_id":null,"article":null,"wikipedia":"https://en.wikipedia.org/wiki/SpaceX_Crew-1"},"static_fire_date_utc":null,"static_fire_date_unix":null,"tbd":false,"net":false,"window":null,"rocket":"5e9d0d95eda69973a809d1ec","success":null,"details":"SpaceX will launch the first operational mission of its Crew Dragon vehicle as part of NASA's Commercial Crew Transportation Capability Program (CCtCap), carrying 3 NASA astronauts and 1 JAXA astronaut to the International Space Station. This mission will be the second crewed flight to launch from the United States since the end of the Space Shuttle program in 2011.","crew":["5f7f1543bf32c864a529b23e","5f7f158bbf32c864a529b23f","5f7f15d5bf32c864a529b240","5f7f1614bf32c864a529b241"],"ships":["5ea6ed30080df4000697c913"],"capsules":["5f6f99fddcfdf403df379709"],"payloads":["5eb0e4d2b6c3bb0006eeb25f"],"launchpad":"5e9e4502f509094188566f88","auto_update":true,"failures":[],"flight_number":107,"name":"Crew-1","date_utc":"2020-11-15T00:49:00.000Z","date_unix":1605401340,"date_local":"2020-11-14T19:49:00-05:00","date_precision":"hour","upcoming":true,"cores":[{"core":"5f57c53d0622a6330279009f","flight":1,"gridfins":true,"legs":true,"reused":false,"landing_attempt":true,"landing_success":null,"landing_type":"ASDS","landpad":"5e9e3032383ecb6bb234e7ca"}],"id":"5eb87d4dffd86e000604b38e"}

Pour le parser et obtenir les infos que tu souhaites, je te conseille d’utiliser la bibliothèque ArduinoJSON. Elle dispose en plus d’un assistant de programmation en ligne.
Je pense que ce qui t’intéresse c’est uniquement la date Unix, à partir de laquelle tu peux calculer le temps restant avant le lancement. Tu peux donc fortement simplifier le code :

const size_t capacity = 3*JSON_ARRAY_SIZE(0) + 4*JSON_ARRAY_SIZE(1) + JSON_ARRAY_SIZE(4) + 2*JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(4) + JSON_OBJECT_SIZE(8) + JSON_OBJECT_SIZE(9) + JSON_OBJECT_SIZE(26) + 1450;
DynamicJsonDocument doc(capacity);
//
// Remplacer la ligne ci-dessous par la réponse du site
const char* payload= "{\"fairings\":null,\"links\":{\"patch\":{\"small\":null,\"large\":null},\"reddit\":{\"campaign\":\"https://www.reddit.com/r/spacex/comments/iwb8bl/crew1_launch_campaign_thread/\",\"launch\":null,\"media\":null,\"recovery\":null},\"flickr\":{\"small\":[],\"original\":[]},\"presskit\":null,\"webcast\":null,\"youtube_id\":null,\"article\":null,\"wikipedia\":\"https://en.wikipedia.org/wiki/SpaceX_Crew-1\"},\"static_fire_date_utc\":null,\"static_fire_date_unix\":null,\"tbd\":false,\"net\":false,\"window\":null,\"rocket\":\"5e9d0d95eda69973a809d1ec\",\"success\":null,\"details\":\"SpaceX will launch the first operational mission of its Crew Dragon vehicle as part of NASA's Commercial Crew Transportation Capability Program (CCtCap), carrying 3 NASA astronauts and 1 JAXA astronaut to the International Space Station. This mission will be the second crewed flight to launch from the United States since the end of the Space Shuttle program in 2011.\",\"crew\":[\"5f7f1543bf32c864a529b23e\",\"5f7f158bbf32c864a529b23f\",\"5f7f15d5bf32c864a529b240\",\"5f7f1614bf32c864a529b241\"],\"ships\":[\"5ea6ed30080df4000697c913\"],\"capsules\":[\"5f6f99fddcfdf403df379709\"],\"payloads\":[\"5eb0e4d2b6c3bb0006eeb25f\"],\"launchpad\":\"5e9e4502f509094188566f88\",\"auto_update\":true,\"failures\":[],\"flight_number\":107,\"name\":\"Crew-1\",\"date_utc\":\"2020-11-15T00:49:00.000Z\",\"date_unix\":1605401340,\"date_local\":\"2020-11-14T19:49:00-05:00\",\"date_precision\":\"hour\",\"upcoming\":true,\"cores\":[{\"core\":\"5f57c53d0622a6330279009f\",\"flight\":1,\"gridfins\":true,\"legs\":true,\"reused\":false,\"landing_attempt\":true,\"landing_success\":null,\"landing_type\":\"ASDS\",\"landpad\":\"5e9e3032383ecb6bb234e7ca\"}],\"id\":\"5eb87d4dffd86e000604b38e\"}";
//
deserializeJson(doc, payload);
long date_unix = doc["date_unix"]; // 1605401340

Sinon, ton code déclare beaucoup trop de bibliothèques dont tu n’as pas besoin. Voici un exemple plus simple, extrait de ce tuto:

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>
 
const char* ssid = "yourNetworkName";
const char* password = "yourNetworkPassword";
 
void setup () {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print("Connecting..");
  }
}
 
void loop() {
  if (WiFi.status() == WL_CONNECTED) { //Check WiFi connection status
    HTTPClient http;  //Declare an object of class HTTPClient
    http.begin("http://jsonplaceholder.typicode.com/users/1");  //Specify request destination
    int httpCode = http.GET();                                  //Send the request
    if (httpCode > 0) { //Check the returning code
      String payload = http.getString();   //Get the request response payload
      Serial.println(payload);             //Print the response payload
      const size_t capacity = 3*JSON_ARRAY_SIZE(0) + 4*JSON_ARRAY_SIZE(1) + JSON_ARRAY_SIZE(4) + 2*JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(4) + JSON_OBJECT_SIZE(8) + JSON_OBJECT_SIZE(9) + JSON_OBJECT_SIZE(26) + 1450;
      DynamicJsonDocument doc(capacity);
      deserializeJson(doc, payload);
      long date_unix = doc["date_unix"]; // 1605401340
      Serial.print ("Date Unix : ");
      Serial.println (date_unix);
    }
    http.end();   //Close connection
  }
  delay(30000);    //Send a request every 30 seconds
}

A tester…

Merci pour ta réponse mon programme fonctionne maintenant. Il me reste plus que à trouver un moyen d'avoir le unix à l'instant où l'on lance le programme pour le comparer au temps récupéré grace à l'API tu aurais une idée de bibliothèque pour faire ça?

Bonsoir

Voir l’exemple :
Fichier/Exemples/ESP8266WiFi/NTPClient
ça pourrait servir