Récuperation couleur tempo esp8266

Bonjour à vous tous,
je sais qu'il existe plusieurs programmes qui réalisent cette fonction, mais l'avantage de ce programme, c'est qu'il est "normalement" simple ? ? ?

il va chercher la couleur du jour et du lendemain avec une URL de ce type
=> https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant=2024-02-15
en format jonson et le tour est joué. ( le retour est couleur jour j : TEMPO_BLEU et couleur j+1 : TEMPO_BLEU

C'est un programme qui fonctionne normalement ( je l'ai repris tel quel ) mais il tourne sur un esp 32 et je n'ai que des esp8266

pouvez-vous m'aider à le convertir pour un esp8266 ( merci )
==> déjà l'esp8266 n'accepte pas ==> #include <HTTPClient.h> ? ? ? du moins, je ne vois pas cette bibliothèque à installer ? comment faire ? merci => celle que j'ai à disposition est HTTpClient.h ? ? ? est-ce-que cela est la même chose ? ? ?

voici le programme :

/*
*****************************************************************************
*
*                        Tempo EDF ESP32 LED
*
*****************************************************************************

Il vous faut : 6 led pour le projet (2 bleu, 2 blanches, 2 rouges),
               2 résistances de 220 ohms,
               1 ESP32 S1,
               1 breadboard,
               des fils de connexion.

Change ton mot de passe wifi et ton ssid dans le code( ligne 32 et 33).

Vous pouvez aussi passer par un écran LCD pour afficher la couleur du jour et de demain.
Deux leds RGB ca ferais aussi bien le job.
Merci de regarder ma petite chaine =)

* Web : https://www.makertronic-yt.com
* version : 1.2 
* Copyright 2024
*/

// include des librairies
#include <Arduino.h>
#include <WiFi.h>
#include "time.h"
#include <HTTPClient.h>
#include <ArduinoJson.h>

// connexion wifi
const char* ssid = "xxxxxxxxxxxxxx";
const char* password = "xxxxxxxxxxxxx";

// serveur NTP
const char* ntpServer = "pool.ntp.org";
const long  gmtOffset_sec = 3600 * 1;
const int   daylightOffset_sec = 3600 * 0;

// leds
const int ledJourBleu = 4;
const int ledJourBlanc = 16;
const int ledJourRouge = 17;
const int ledDemainBleu = 25;
const int ledDemainBlanc = 26;
const int ledDemainRouge = 27;

void setup(){
    Serial.begin(9600);
    delay(1000);

    WiFi.mode(WIFI_STA); //Optional
    WiFi.begin(ssid, password);
    Serial.println("\nConnection Wifi ...");

    while(WiFi.status() != WL_CONNECTED){
        Serial.print(".");
        delay(100);
    }

    Serial.println("\nConnecté au réseau Wifi !");
    Serial.print("IP locale: ");
    Serial.println(WiFi.localIP());

    // On configure le seveur NTP
    configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);

    // leds en sortie
    pinMode(ledJourBleu, OUTPUT);
    pinMode(ledJourBlanc, OUTPUT);
    pinMode(ledJourRouge, OUTPUT);
    pinMode(ledDemainBleu, OUTPUT);
    pinMode(ledDemainBlanc, OUTPUT);
    pinMode(ledDemainRouge, OUTPUT);
}


void loop() {
 
  // recup du jour de l'année format AAAA/MM/JJ
  struct tm timeinfo;
  if (!getLocalTime(&timeinfo)) {
    Serial.println("Erreur de recup de l'heure");
  }

  char strftime_buf[20];
  strftime(strftime_buf, sizeof(strftime_buf), "%Y-%m-%d", &timeinfo);
  //Serial.println(strftime_buf); // debug date du jour

  // Construire l'URL avec la date formatée
  String url = "https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant=" + String(strftime_buf);
  Serial.println(url); // debug url

  // Effectuer la requête HTTP
  HTTPClient http;
  http.begin(url);

  int httpCode = http.GET();
  if (httpCode > 0) {
    if (httpCode == HTTP_CODE_OK) {
      String payload = http.getString();

      // Parse JSON avec ArduinoJSON
      const size_t capacity = JSON_OBJECT_SIZE(2) + 100;
      DynamicJsonDocument doc(capacity);
      deserializeJson(doc, payload);

      // Extraire les valeurs
      const char* couleurJourJ = doc["couleurJourJ"];
      const char* couleurJourJ1 = doc["couleurJourJ1"];

      // DEBUG
      //Serial.print("CouleurJourJ: ");
      //Serial.println(couleurJourJ);
      //Serial.print("CouleurJourJ1: ");
      //Serial.println(couleurJourJ1);

      // Affichage des LEDs du jour
      Serial.print("CouleurJourJ: ");
      if (strcmp(couleurJourJ, "TEMPO_BLEU") == 0) {
        Serial.println("bleu");
        digitalWrite(ledJourBleu, HIGH);
        digitalWrite(ledJourBlanc, LOW);
        digitalWrite(ledJourRouge, LOW);
      }
      if (strcmp(couleurJourJ, "TEMPO_BLANC") == 0) {
        Serial.println("blanc");
        digitalWrite(ledJourBleu, LOW);
        digitalWrite(ledJourBlanc, HIGH);
        digitalWrite(ledJourRouge, LOW);
      }
      if (strcmp(couleurJourJ, "TEMPO_ROUGE") == 0) {
        Serial.println("rouge");
        digitalWrite(ledJourBleu, LOW);
        digitalWrite(ledJourBlanc, LOW);
        digitalWrite(ledJourRouge, HIGH);
      }

      // Affichage des LEDs du lendemain
      Serial.print("CouleurJourJ1: ");
      if (strcmp(couleurJourJ1, "TEMPO_BLEU") == 0) {
        Serial.println("bleu");
        digitalWrite(ledDemainBleu, HIGH);
        digitalWrite(ledDemainBlanc, LOW);
        digitalWrite(ledDemainRouge, LOW);
      }
      if (strcmp(couleurJourJ1, "TEMPO_BLANC") == 0) {
        Serial.println("blanc");
        digitalWrite(ledDemainBleu, LOW);
        digitalWrite(ledDemainBlanc, HIGH);
        digitalWrite(ledDemainRouge, LOW);
      }
      if (strcmp(couleurJourJ1, "TEMPO_ROUGE") == 0) {
        Serial.println("rouge");
        digitalWrite(ledDemainBleu, LOW);
        digitalWrite(ledDemainBlanc, LOW);
        digitalWrite(ledDemainRouge, HIGH);
      }
     
    } // fin if (httpCode == HTTP_CODE_OK) {

  } else {
    Serial.println("Erreur de connexion au serveur EDF");
  } //if (httpCode > 0) {

  http.end();

  delay(300000); // Attendre 5 minutes avant de recommencer
  //delay(10000); // Attendre 10 secondes avant de recommencer (pour debug)

}

Alors j'ai essayé de remplacer la library HTTpClient.h par HTTPClient.h (que je suis allé chercher sur internet)
cela va un peu plus loin sur la compilation, mais j'ai une multitude d'erreurs
( je ne sais pas si cela peut vous aider pour me dépanner ? )

In file included from C:\Users\phili\Documents\ArduinoData\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src/WiFiClientSecure.h:23,
                 from C:\Users\phili\Documents\Arduino\libraries\HttpClient/HTTPClient.h:37,
                 from C:\Users\phili\Documents\Arduino\temporaire2\temporaire2.ino:29:
C:\Users\phili\Documents\ArduinoData\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:206:38: error: expected ')' before '*' token
  206 |     WiFiClientSecureCtx(ClientContext *client, const X509List *chain, unsigned cert_issuer_key_type,
      |                        ~             ^~
      |                                      )
C:\Users\phili\Documents\ArduinoData\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:209:38: error: expected ')' before '*' token
  209 |     WiFiClientSecureCtx(ClientContext* client, const X509List *chain, const PrivateKey *sk,
      |                        ~             ^
      |                                      )
C:\Users\phili\Documents\ArduinoData\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:38:5: error: 'BearSSL::WiFiClientSecureCtx::~WiFiClientSecureCtx()' marked 'override', but does not override
   38 |     ~WiFiClientSecureCtx() override;
      |     ^
C:\Users\phili\Documents\ArduinoData\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:43:9: error: 'int BearSSL::WiFiClientSecureCtx::connect(const String&, uint16_t)' marked 'override', but does not override
   43 |     int connect(const String& host, uint16_t port) override;
      |         ^~~~~~~
C:\Users\phili\Documents\ArduinoData\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:48:12: error: 'size_t BearSSL::WiFiClientSecureCtx::write_P(const char*, size_t)' marked 'override', but does not override
   48 |     size_t write_P(PGM_P buf, size_t size) override;
      |            ^~~~~~~
C:\Users\phili\Documents\ArduinoData\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:55:12: error: 'size_t BearSSL::WiFiClientSecureCtx::peekBytes(uint8_t*, size_t)' marked 'override', but does not override
   55 |     size_t peekBytes(uint8_t *buffer, size_t length) override;
      |            ^~~~~~~~~
C:\Users\phili\Documents\ArduinoData\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:338:35: error: expected ')' before '*' token
  338 |     WiFiClientSecure(ClientContext *client, const X509List *chain, unsigned cert_issuer_key_type,
      |                     ~             ^~
      |                                   )
In file included from C:\Users\phili\Documents\ArduinoData\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src/WiFiClientSecure.h:23,
                 from C:\Users\phili\Documents\Arduino\libraries\HttpClient/HTTPClient.h:37,
                 from C:\Users\phili\Documents\Arduino\temporaire2\temporaire2.ino:29:
C:\Users\phili\Documents\ArduinoData\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:344:35: error: expected ')' before '*' token
  344 |     WiFiClientSecure(ClientContext* client, const X509List *chain, const PrivateKey *sk,
      |                     ~             ^
      |                                   )
In file included from C:\Users\phili\Documents\ArduinoData\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src/WiFiClientSecure.h:23,
                 from C:\Users\phili\Documents\Arduino\libraries\HttpClient/HTTPClient.h:37,
                 from C:\Users\phili\Documents\Arduino\temporaire2\temporaire2.ino:29:
C:\Users\phili\Documents\ArduinoData\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:238:5: error: 'BearSSL::WiFiClientSecure::~WiFiClientSecure()' marked 'override', but does not override
  238 |     ~WiFiClientSecure() override { _ctx = nullptr; }
      |     ^
C:\Users\phili\Documents\ArduinoData\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:242:13: error: 'uint8_t BearSSL::WiFiClientSecure::status()' marked 'override', but does not override
  242 |     uint8_t status() override { return _ctx->status(); }
      |             ^~~~~~
C:\Users\phili\Documents\ArduinoData\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:244:9: error: 'int BearSSL::WiFiClientSecure::connect(const String&, uint16_t)' marked 'override', but does not override
  244 |     int connect(const String& host, uint16_t port) override { return _ctx->connect(host, port); }
      |         ^~~~~~~
C:\Users\phili\Documents\ArduinoData\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:249:12: error: 'size_t BearSSL::WiFiClientSecure::write_P(const char*, size_t)' marked 'override', but does not override
  249 |     size_t write_P(PGM_P buf, size_t size) override { return _ctx->write_P(buf, size); }
      |            ^~~~~~~
C:\Users\phili\Documents\ArduinoData\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:258:12: error: 'size_t BearSSL::WiFiClientSecure::peekBytes(uint8_t*, size_t)' marked 'override', but does not override
  258 |     size_t peekBytes(uint8_t *buffer, size_t length) override { return _ctx->peekBytes(buffer, length); }
      |            ^~~~~~~~~
C:\Users\phili\Documents\ArduinoData\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h: In constructor 'BearSSL::WiFiClientSecure::WiFiClientSecure()':
C:\Users\phili\Documents\ArduinoData\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:236:58: error: '_owned' was not declared in this scope
  236 |     WiFiClientSecure():_ctx(new WiFiClientSecureCtx()) { _owned = _ctx.get(); }
      |                                                          ^~~~~~
C:\Users\phili\Documents\ArduinoData\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h: In copy constructor 'BearSSL::WiFiClientSecure::WiFiClientSecure(const BearSSL::WiFiClientSecure&)':
C:\Users\phili\Documents\ArduinoData\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:237:93: error: '_owned' was not declared in this scope
  237 |     WiFiClientSecure(const WiFiClientSecure &rhs): WiFiClient(), _ctx(rhs._ctx) { if (_ctx) _owned = _ctx.get(); }
      |                                                                                             ^~~~~~
C:\Users\phili\Documents\Arduino\temporaire2\temporaire2.ino: In function 'void setup()':
temporaire2:53:10: error: 'class WiFiClass' has no member named 'mode'
   53 |     WiFi.mode(WIFI_STA); //Optional
      |          ^~~~
temporaire2:53:15: error: 'WIFI_STA' was not declared in this scope
   53 |     WiFi.mode(WIFI_STA); //Optional
      |               ^~~~~~~~
temporaire2:54:16: error: invalid conversion from 'const char*' to 'char*' [-fpermissive]
   54 |     WiFi.begin(ssid, password);
      |                ^~~~
      |                |
      |                const char*
In file included from C:\Users\phili\Documents\Arduino\temporaire2\temporaire2.ino:27:
C:\Users\phili\Documents\Arduino\libraries\WiFi\src/WiFi.h:79:21: note:   initializing argument 1 of 'int WiFiClass::begin(char*, const char*)'
   79 |     int begin(char* ssid, const char *passphrase);
      |               ~~~~~~^~~~
C:\Users\phili\Documents\Arduino\temporaire2\temporaire2.ino: In function 'void loop()':
temporaire2:83:8: error: 'getLocalTime' was not declared in this scope
   83 |   if (!getLocalTime(&timeinfo)) {
      |        ^~~~~~~~~~~~
Plusieurs bibliothèque trouvées pour "WiFi.h"
Utilisé : C:\Users\phili\Documents\Arduino\libraries\WiFi
Non utilisé : C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\libraries\WiFi
Non utilisé : C:\Users\phili\Documents\Arduino\libraries\WiFiEspAT
exit status 1
'class WiFiClass' has no member named 'mode'

Je ne sais plus où chercher ?
Je n'arrive pas à trouver des exemples qui utilisent la bibliothèque HTTPClient.h avec le esp8266 ? ( est-il exclusivement pour esp32 ? ? ? )

Faut-il repenser tout le programme ? ? ?

J'espère que pour le week-end, quelqu'un pourra m'aider.
=> j'ai essayé avec une autre bibliothèque que le esp8266 accepte, mais lorsque j'essaie de me connecter au site => plantage . . .
j'attends vos lumières et merci de votre aide car je n'en peux plus ( cela fait des dizaines d'heures que je cherche, mais aucun succès )

Juste un message pour être visible dans les messages . . .

Personne pour me donner une piste ?

J'ai essayé en utilisant des pistes avec cette video ( mais sans succés )

Personne pour m'aider ?

Personnellement, je ne pense pas pouvoir t'aider sur ton problème de librairie qui à priori n'existe pas sur ESP8266.
Mais je ne comprends pas pourquoi tu veux utiliser un code tout fait, mais pas prendre le matériel qui va avec, pour le prix que coûte un ESP32?

Bonjour,

J'ajouterais à la remarque de Terwal, qu'en l'absence de test avec un ESP32, vous ne savez pas si le code fonctionne...

Pour vous aider, voici la démarche à suivre:

Pour le portage sur un ESP8266, il faut d'abord regarder ce que fait le code fait:

  • une requête sur un site en httpS. Ce n'est pas affaire simple, mais une recherche rapide sur Internet donne client https ESP8266
    Essayez en adaptant à votre site, avec une date fixe. Regardez comment les autres ont fait pour choisir la bonne option Couleurs Tempo avec ESP32, puis modifiez votre code en conséquence,

  • Votre acquisition de l'heure NTP est bloquée en heure d'été, voir NTP. Il faut aussi rajouter une boucle d'attente pour donner le temps au serveur NTP de répondre avant d'enchaîner, sinon cela ne marchera pas,

  • Les broches d'entrée/sortie ne sont pas les mêmes sur ESP8266 et ESP32. Il vous faut adapter.

Quand vous aurez fait tout cela, vous devriez avoir un code qui marchotte, de quoi faire vos premiers essais, mais pas trop longs...

Dans son principe, il interroge le serveur toutes les 5 min pour récupérer une info qui ne change que 1 fois toutes les 24h... Si EdF a prévu une protection de son site contre les attaques en déni de service, vous allez vous faire "blacklister" rapidement.

Etudiez tout cela, modifiez votre code, essayez, postez le code avec des questions précises et vous aurez des réponses

Bonne bidouille,

MicroQuettas

Oui c'est possible qu'il se fasse blacklister !
Sur "particulier.edf.fr" l'info est mise à jour vers 11h du matin, on peut par exemple modifier le programme pour qu'il fasse une requête toutes les 5 minutes à partir de 11h, et pour qu'il arrête les requêtes une fois que la couleur du lendemain est connue.

Roland

Merci de vos réponses, je désespérais ! ! !

Alors, "pourquoi utiliser un code tout fait ? " => NON, (j'ai du mal m'exprimer) , je compte juste m'en inspirer, cet à dire lire le contenu de l'adresse HTTP.

"Pourquoi utiliser un ESP8266, au lieu d'un ESP32 ? la raison est simple : je dispose de ESP8266 et pas de ESP32, donc utilisable dès maintenant et je trouve dommage de laisser mes ESP prendre la poussière, surtout qu'utiliser un esp32 pour cette application est largement sur-dimensionnée. (pour moi, c'est comme utiliser un ordinateur dernière génération pour faire des additions) => mon objectif ensuite est d'utiliser un esp01 (j'ai besoin que de 3 sorties)

Alors effectivement, c'était ma 2em piste avec client https ESP8266 ! cette bibliothèque fonctionne ! j'ai fait un essai sur la récupération du cours du BTC bitcon => cela fonctionne, mais avec le site EDF => problème ! ( il faut que je recommence à creuser dans cette voie, je vous posterai mes essais, mais je n'ai malheureusement pas gardé mes programmes, donc à refaire . . .)

Pour la récupération de la date du jour, je l'ai déjà fait une fois, je n'ai pas encore cherché car dans un premier temps, je vais donner une date fixe ( vous avez raison )

Pour les broches, oui ce n'est pas du tout la même chose et je vais utiliser que 3 leds et non 6 => allumage fixe ( couleur du jour ) allumage par clignotement ( couleur du lendemain )

Sur votre dernière remarque (qui est juste !) je ne compte pas réaliser des demandes tous les 5 minutes, on a l'heure ( on connait les horaires approximatives ) donc je ferai des demandes dans ces plages d'horaires, inutile de le faire en milieu de journée.

Encore merci MicroQuettas.

Nota : je vous donne mes programmes dès que j'ai un peu de temps ( en ce moment, je suis malheureusement occupé)

Dans ce cas, il est plus intéressant de partir d'un exemple, dédié pour un ESP8266, de requête HTTPS.
D'ailleurs tu ne veut pas "lire le contenu" de l'adresse HTTP, mais HTTPS.
Je n'ai pas testé, mais ce genre de tutoriel me semble plus indiqué.

Ma remarque étant lié au fait d'utiliser un code tout fait, tu ne peux pas prendre une partie de celle-ci :slight_smile:
Sinon non la comparaison n'est pas juste.
Premièrement il n'y pas une telle différence entre un ESP8266 et un ESP32, un peu considérer que le 8266 et la bêta et le 32 la V1.
Deuxièmes, il n'est pas réellement surdimensionné, un ESP32 est correctement dimensionné pour faire des requêtes HTTPS.
Si tu veux 3 sorties avec le ESP01, je crois que tu devra faire attention, si tu veux pouvoir booter correctement, GPIO0 et GPIO2 devant être à l'état bas.
Il faudra aussi pouvoir le retirer ou faire encore attention car GPIO3 et GPIO1 permettent le téléchargement.

merci terwal de ta réponse ( ton lien, effectivement il peut me servir )

pour la différence entre esp8266 et esp32, tu as surement raison (je ne suis pas un spécialiste) je voulais juste dire que je n'avais que des esp8266 en stock et je désire les utiliser. Pour esp01, je sais que cela ne sera pas simple , mais possible je pense ? (on verra cela après)

J'ai retrouvé le programme qui va chercher le cours du BTC avec esp8266 ( il fonctionne )
cela donne une base :


#include <ArduinoJson.h>
#include <ESP8266WiFi.h>
#include <time.h>
//#include <SPI.h>

char time_value[20];


#define CD_API "/v1/bpi/currentprice.json"
#define CD_URL "api.coindesk.com"
static char respBuffer[4096];
const char* ssid = "Livebox";
const char* password = "mot_de_passe";
WiFiClient client;
String  data;
 
void setup() {
  Serial.begin(115200);

  WiFi.begin(ssid, password);

  //CHANGE THE POOL WITH YOUR CITY. SEARCH AT https://www.ntppool.org/zone/@

  configTime(0 * 3600, 0, "europe.pool.ntp.org", "time.nist.gov");

  setenv("TZ", "GMT-1BST", 1);

}

void loop() {

  time_t now = time(nullptr);
  String time = String(ctime(&now));
  time.trim();
  Serial.println(time);
  delay(5000);

  data = getData();
  Serial.print("cours du BTC : ");
  Serial.println(data);
}

String getData() {
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(CD_URL, httpPort)) {
    Serial.println("Connection failed");
    String result = "Connection failed";
    return result;
  }
  Serial.print("Requesting URL: ");
  Serial.println(CD_URL);
  client.print(String("GET ") + CD_API + " HTTP/1.1\r\n" +
               "Host: " + CD_URL + "\r\n" + 
               "Connection: close\r\n\r\n");
  delay(100);
  String answer;
  while(client.available()){
    String line = client.readStringUntil('\r');
    answer += line;
  }
  
  client.stop();
  Serial.println();
  Serial.println("closing connection");

  String jsonAnswer;
  int jsonIndex;
  for (int i = 0; i < answer.length(); i++) {
    if (answer[i] == '{') {
      jsonIndex = i;
      break;

    }
  }
  jsonAnswer = answer.substring(jsonIndex);
  Serial.println();
  Serial.println("JSON answer: ");
  Serial.println(jsonAnswer);
  jsonAnswer.trim();
  int rateIndex = jsonAnswer.indexOf("rate_float");
  String priceString = jsonAnswer.substring(rateIndex + 12, rateIndex + 18);
  priceString.trim();
  float price = priceString.toFloat();
  String result = (String)(float)price;
  Serial.print("BTC (USD): $");
  Serial.println(result);
  return result;
}

et dans le moniteur série :

Requesting URL: api.coindesk.com

closing connection

JSON answer: 
{"time":{"updated":"Feb 21, 2024 15:38:18 UTC","updatedISO":"2024-02-21T15:38:18+00:00","updateduk":"Feb 21, 2024 at 15:38 GMT"},"disclaimer":"This data was produced from the CoinDesk Bitcoin Price Index (USD). Non-USD currency data converted using hourly conversion rate from openexchangerates.org","chartName":"Bitcoin","bpi":{"USD":{"code":"USD","symbol":"&#36;","rate":"51,375.888","description":"United States Dollar","rate_float":51375.8879},"GBP":{"code":"GBP","symbol":"&pound;","rate":"40,697.101","description":"British Pound Sterling","rate_float":40697.1014},"EUR":{"code":"EUR","symbol":"&euro;","rate":"47,513.346","description":"Euro","rate_float":47513.3459}}}
BTC (USD): $51375.00
cours du BTC : 51375.00
Wed Feb 21 16:38:27 2024
Requesting URL: api.coindesk.com

closing connection

je regarde également dans ton lien terwal, je ne sais pas trop ce que cela fait, mais il y a des programmes qui fonctionnent et ils sont supportés pas esp8266, tel que :

/*
  Complete project details: https://RandomNerdTutorials.com/esp8266-nodemcu-https-requests/ 
  Based on the BasicHTTPSClient.ino Created on: 20.08.2018 (ESP8266 examples)
*/

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClientSecureBearSSL.h>

// Replace with your network credentials
const char* ssid = "Livebox";
const char* password = "mot_de_passe";

void setup() {
  Serial.begin(115200);
  //Serial.setDebugOutput(true);

  Serial.println();
  Serial.println();
  Serial.println();

  //Connect to Wi-Fi
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.print("Connecting to WiFi ..");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    delay(1000);
  }
}

void loop() {
  // wait for WiFi connection
  if ((WiFi.status() == WL_CONNECTED)) {

    std::unique_ptr<BearSSL::WiFiClientSecure>client(new BearSSL::WiFiClientSecure);

    // Ignore SSL certificate validation
    client->setInsecure();
    
    //create an HTTPClient instance
    HTTPClient https;
    
    //Initializing an HTTPS communication using the secure client
    Serial.print("[HTTPS] begin...\n");
    if (https.begin(*client, "https://www.howsmyssl.com/a/check")) {  // HTTPS
      Serial.print("[HTTPS] GET...\n");
      // start connection and send HTTP header
      int httpCode = https.GET();
      // httpCode will be negative on error
      if (httpCode > 0) {
        // HTTP header has been send and Server response header has been handled
        Serial.printf("[HTTPS] GET... code: %d\n", httpCode);
        // file found at server
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
          String payload = https.getString();
          Serial.println(payload);
        }
      } else {
        Serial.printf("[HTTPS] GET... failed, error: %s\n", https.errorToString(httpCode).c_str());
      }

      https.end();
    } else {
      Serial.printf("[HTTPS] Unable to connect\n");
    }
  }
  Serial.println();
  Serial.println("Waiting 2min before the next round...");
  delay(120000);
}

et en retour moniteur série :

Waiting 2min before the next round...
[HTTPS] begin...
[HTTPS] GET...
[HTTPS] GET... code: 200
{"given_cipher_suites":["TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256","TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256","TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256","TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256","TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384","TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384","TLS_ECDHE_ECDSA_WITH_AES_128_CCM","TLS_ECDHE_ECDSA_WITH_AES_256_CCM","TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8","TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8","TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256","TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256","TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384","TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384","TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA","TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA","TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA","TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA","TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256","TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256","TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384","TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384","TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256","TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256","TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384","TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384","TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA","TLS_ECDH_RSA_WITH_AES_128_CBC_SHA","TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA","TLS_ECDH_RSA_WITH_AES_256_CBC_SHA","TLS_RSA_WITH_AES_128_GCM_SHA256","TLS_RSA_WITH_AES_256_GCM_SHA384","TLS_RSA_WITH_AES_128_CCM","TLS_RSA_WITH_AES_256_CCM","TLS_RSA_WITH_AES_128_CCM_8","TLS_RSA_WITH_AES_256_CCM_8","TLS_RSA_WITH_AES_128_CBC_SHA256","TLS_RSA_WITH_AES_256_CBC_SHA256","TLS_RSA_WITH_AES_128_CBC_SHA","TLS_RSA_WITH_AES_256_CBC_SHA","TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA","TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA","TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA","TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA","TLS_RSA_WITH_3DES_EDE_CBC_SHA"],"ephemeral_keys_supported":true,"session_ticket_supported":false,"tls_compression_supported":false,"unknown_cipher_suite_supported":false,"beast_vuln":false,"able_to_detect_n_minus_one_splitting":false,"insecure_cipher_suites":{},"tls_version":"TLS 1.2","rating":"Probably Okay"}

Waiting 2min before the next round...

===> je me rends compte que maintenant mon esp8266 accepte la library =>
#include <ESP8266HTTPClient.h>

curieux ? ( suite demain ) et encore merci, vous m'avez donné envie de continuer mes recherches.

nota : excusez, l'ensemble de mes posts sont plus que bazar ! ! ! je note ici, mes pistes de recherches au fil du temps . . .

Oui j'avais bien compris et je ne peux que aller dans ton sens et ferais de même, même si c'est ce "compliquer la vie"

Oui et non ce programme semble faire une requête HTTP et pas HTTPS

Le programme fait exactement la même chose que celui que tu as trouvé pour les bitCoins, mais sur une URL avec du HTTPS.
De plus il utilise dans objet un peu plus haut niveau et simple à utiliser que le tien.
Le moniteur série semble indiquer que cela marche.
As tu essayé de remplacer l'URL par la tienne ?

Pourquoi maintenant ESP8266HTTPClient.h et différent de HTTPClient.h

Effectivement ! il faut que je change de lunette ! ! !

Alors cela se complique . . .

J'ai modifié 1 ligne du programme (le dernier ci-dessus) qui travaille avec https soit

 if (https.begin(*client, "https://www.howsmyssl.com/a/check")) {  // HTTPS

si je vais chercher les infos que cela retourne sur internet cela me donne :

given_cipher_suites	
0	"TLS_AES_128_GCM_SHA256"
1	"TLS_CHACHA20_POLY1305_SHA256"
2	"TLS_AES_256_GCM_SHA384"
3	"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
4	"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
5	"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256"
6	"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256"
7	"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"
8	"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
9	"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"
10	"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"
11	"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
12	"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"
13	"TLS_RSA_WITH_AES_128_GCM_SHA256"
14	"TLS_RSA_WITH_AES_256_GCM_SHA384"
15	"TLS_RSA_WITH_AES_128_CBC_SHA"
16	"TLS_RSA_WITH_AES_256_CBC_SHA"
ephemeral_keys_supported	true
session_ticket_supported	true
tls_compression_supported	false
unknown_cipher_suite_supported	false
beast_vuln	false
able_to_detect_n_minus_one_splitting	false
insecure_cipher_suites	{}
tls_version	"TLS 1.3"
rating	"Probably Okay"

==> celui-ci fonctionne.

par contre si je remplace l'adresse URL par :

if (https.begin(client, "https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant=2024-02-14")) { // HTTPS

dans le moniteur série, j'ai

..Waiting for NTP time sync: .
Current time: Thu Feb 22 08:12:08 2024
[HTTPS] begin...
[HTTPS] GET...
[HTTPS] GET... failed, error: connection failed

Waiting 2min before the next round...
[HTTPS] begin...
[HTTPS] GET...
[HTTPS] GET... failed, error: connection failed

et pourtant si je vais chercher les infos que cela retourne sur internet cela me donne :

couleurJourJ	"TEMPO_BLEU"
couleurJourJ1	"TEMPO_BLEU"

donc là, je cale ? ? ? help me, svp

j'ai relevé le httpCode du programme, il retourne => -1 et non une valeur >0

Pourquoi tu as modifier le premier paramètre ?

j'ai repris un wokwi pour ESP32, puisque wokwi ne supporte plus le ESP8266
Cela marche bien.