Saludos, estoy iniciando en el mundo del IOT, estoy intentando conectarme a una API con un ESP8266 y leer unos datos para luego mostrarlos en una pantalla de siete segmentos.
Desafortunadamente no logro establecer la conexión con la pagina, comparto el código y la pagina donde lo he descargado:
ESP8266 NodeMCU HTTPS Requests
/*
Complete project details: https://RandomNerdTutorials.com/esp8266-nodemcu-https-requests/
Based on the example created by Ivan Grokhotkov, 2015 (File > Examples > ESP8266WiFi > HTTPSRequests)
*/
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <ESP8266HTTPClient.h>
// Root certificate for howsmyssl.com
const char IRG_Root_X1 [] PROGMEM = R"CERT(
-----BEGIN CERTIFICATE-----
MIIBozCCAUigAwIBAgIQX/0+7/d07u8Ma/QX1oAS5TAKBggqhkjOPQQDAjBgMS0w
KwYDVQQDDCRCaXRkZWZlbmRlciBQZXJzb25hbCBDQS5OZXQtRGVmZW5kZXIxDDAK
BgNVBAsMA0lEUzEUMBIGA1UECgwLQml0ZGVmZW5kZXIxCzAJBgNVBAYTAlVTMB4X
DTI1MDYyNzAwMDAwMFoXDTI2MDYyODIzNTk1OVowGTEXMBUGA1UEAwwOKi5yZWRz
cGlyYS5vcmcwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASXelMyZhH5UP4mt6jq
mTsQucRLXbglJKSZQNZtnHtqdsZnRqyJKXx9Uu3TT9FyKDuKnLXICQfHqhJ49h5o
xk9CoyswKTAnBgNVHREEIDAegg4qLnJlZHNwaXJhLm9yZ4IMcmVkc3BpcmEub3Jn
MAoGCCqGSM49BAMCA0kAMEYCIQC64c34g4eKWuU77PNQ2tC1WScRFUwq7+napuCH
HO2+8wIhAOPYo29LOewEgU7HTrZQDeNqsSLnohPYF09/zBuVtw9u
-----END CERTIFICATE-----
)CERT";
// Replace with your network credentials
const char* ssid = "Departamentos";
const char* password = "Depas2468";
// Create a list of certificates with the server certificate
X509List cert(IRG_Root_X1);
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);
}
// Set time via NTP, as required for x.509 validation
configTime(3 * 3600, 0, "pool.ntp.org", "time.nist.gov");
Serial.print("Waiting for NTP time sync: ");
time_t now = time(nullptr);
while (now < 8 * 3600 * 2) {
delay(500);
Serial.print(".");
now = time(nullptr);
}
Serial.println("");
struct tm timeinfo;
gmtime_r(&now, &timeinfo);
Serial.print("Current time: ");
Serial.print(asctime(&timeinfo));
}
void loop() {
WiFiClientSecure client;
// wait for WiFi connection
if ((WiFi.status() == WL_CONNECTED)) {
client.setTrustAnchors(&cert);
HTTPClient https;
Serial.print("[HTTPS] begin...\n");
if (https.begin(client, "https://app.redspira.org/api/")) { // 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(10000);
}
Cambie la URL de la pagina y el certificado raiz en el codigo, pero aun así no me deja conectarme, cabe mencionar que el codigo original lo cargue y conectó a la pagina ejemplo.
Esto es lo que me arroja en el puerto serial.
Waiting for NTP time sync: .
Current time: Sun Jul 27 01:05:05 2025
[HTTPS] begin...
[HTTPS] GET...
[HTTPS] GET... failed, error: connection failed
Esto es lo que me dio con el ejemplo.
...Waiting for NTP time sync: .
Current time: Sun Jul 27 01:01:39 2025
[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"}
Agradezco cualquier comentario que me guíe para lo que me hace falta.
Saludos.


