🛠 Client HTTPS/TLS : interroger une API sécurisée via le Murata 1DX
Objetivos
Pasar del Wi-Fi « conectado » al Wi-Fi « útil »: hablar con un servidor en TLS (HTTPS). El core de Mbed proporciona WiFiSSLClient, un socket TCP que negocia automáticamente el cifrado TLS — los certificados de confianza se almacenan en la flash de la placa, lo que evita la necesidad de un reloj en tiempo real para el handshake. Vas a construir una solicitud HTTP/1.1 a mano sobre este cliente, el patrón básico para consumir cualquier API.
Material
- 1 × Arduino Portenta H7 + cable USB-C de datos
- Punto de acceso Wi-Fi con acceso a Internet
- Core « Arduino Mbed OS Portenta Boards »; pestaña Secrets rellenada (
SECRET_SSID,SECRET_PASS) - Consola serie a 115200 baudios
Código completo
// client_tls.ino — modele l'exemple WiFiSSLClient du core
#include <WiFi.h>
#include "arduino_secrets.h"
char ssid[] = SECRET_SSID;
char pass[] = SECRET_PASS;
int status = WL_IDLE_STATUS;
WiFiSSLClient client; // TLS : pas d'RTC necessaire,
// le certificat est en flash
void setup {
Serial.begin(9600);
while (!Serial) {}
if (WiFi.status == WL_NO_MODULE) {
Serial.println("Module Murata 1DX non detecte !");
while (true) {}
}
while (status != WL_CONNECTED) {
Serial.print("Connexion a "); Serial.println(ssid);
status = WiFi.begin(ssid, pass);
delay(3000);
}
Serial.print("IP : "); Serial.println(WiFi.localIP);
if (client.connect("www.google.com", 443)) {
client.println("GET / HTTP/1.1");
client.println("Host: www.google.com");
client.println("Connection: close");
client.println;
while (client.available) Serial.write(client.read);
client.stop;
} else {
Serial.println("Poignee de main TLS echouee");
}
}
void loop {}
Verificación esperada
Tras la conexión Wi-Fi, se ejecuta el handshake TLS (algunos cientos de ms — la máquina de 480 MHz realiza los cálculos de criptografía), y luego el HTML de la página se muestra en la consola. Reemplaza el host por una API JSON para un uso real: mismas líneas, encabezado Host adaptado, y luego parseo del cuerpo de la respuesta.
Errores frecuentes
- Servidor con certificado autofirmado o cadena incompleta: la validación falla y
connectdevuelve falso sin muchos detalles — prueba primero con un sitio público con certificado válido. - >
- Respuesta en chunked/gzip: este ejemplo lee los bytes en bruto; algunas APIs comprimen — añade
Accept-Encoding: identitypara mantenerlo en texto plano. - Olvidar el encabezado
Hosten HTTP/1.1: los alojamientos virtuales devuelven un error 400 o el sitio incorrecto. - No llamar nunca a
client.stop: el servidor remoto mantiene la conexión abierta y puede rechazar las siguientes. - Confundirlo con BLE: el Murata 1DX también hace Bluetooth 5.1 (Classic + LE, tutorial oficial
ble-connectivity) — pero para una API web, es definitivamente Wi-Fi +WiFiSSLClient. - Redes cautivas (hoteles, Wi-Fi corporativo):
WiFi.begin«conecta» pero el TLS falla hasta que el navegador no ha validado el portal.
Otros tutoriales para esta placa
- Premier programme : installer le core et faire clignoter la LED (M7 à 480 MHz !)
- Se connecter au Wi-Fi avec le module Murata 1DX (station WPA2)
- Apprivoiser les connecteurs 80 broches : bouton, LED et entrée analogique
- Dual-core M7 ↔ M4 : appels de fonctions distants avec la bibliothèque RPC
- Serveur web sur le port Ethernet 10/100 embarqué
- MicroPython + machine vision : le firmware OpenMV sur un cœur, C++ sur l'autre
Ejemplos de código para esta placa
clignotante.inoArduinobouton-poussoir.inoArduinopwm-respiration.inoArduinoentree-analogique.inoArduinomulti-uart.inoArduinocapteur-i2c-bmp280.inoArduino