🛠 Client HTTPS/TLS : interroger une API sécurisée via le Murata 1DX
Objectifs
Passer du Wi-Fi « connecté » au Wi-Fi « utile » : parler à un serveur en TLS (HTTPS). Le core Mbed fournit WiFiSSLClient, une socket TCP qui négocie automatiquement le chiffrement TLS — les certificats de confiance sont stockés dans la flash de la carte, ce qui dispense d'horloge temps réel pour la poignée de main. Tu vas construire une requête HTTP/1.1 à la main sur ce client, le patron de base pour consommer n'importe quelle API.
Matériel
- 1 × Arduino Portenta H7 + câble USB-C data
- Point d'accès Wi-Fi avec accès Internet
- Core « Arduino Mbed OS Portenta Boards » ; onglet Secrets rempli (
SECRET_SSID,SECRET_PASS) - Console série 115200 bauds
Code complet
// client_tls.ino — modèle 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 nécessaire,
// 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 {}
Vérification attendue
Après la connexion Wi-Fi, la poignée de main TLS s'exécute (quelques centaines de ms — la machine à 480 MHz fait les calculs de crypto), puis le HTML de la page s'affiche sur la console. Remplace l'hôte par une API JSON pour un vrai usage : mêmes lignes, en-tête Host adapté, puis parse du corps de réponse.
Erreurs fréquentes
- Serveur avec certificat auto-signé ou chaîne incomplète : la validation échoue et
connectrenvoie faux sans grand détail — teste d'abord avec un site public à certificat valide. - >
- Réponse en chunked/gzip : cet exemple lit les octets bruts ; certaines API compressent — ajoute
Accept-Encoding: identitypour rester en clair. - Oublier l'en-tête
Hosten HTTP/1.1 : les hébergeurs virtuels renvoient une erreur 400 ou le mauvais site. - Ne jamais appeler
client.stop: le serveur distant garde la connexion ouverte et peut refuser les suivantes. - Confondre avec le BLE : le Murata 1DX fait aussi Bluetooth 5.1 (Classic + LE, tuto officiel
ble-connectivity) — mais pour de l'API web, c'est bien Wi-Fi +WiFiSSLClient. - Réseaux captifs (hotels, Wi-Fi d'entreprise) :
WiFi.begin« connecte » mais le TLS échoue tant que le navigateur n'a pas validé le portail.
Autres tutoriels pour cette carte
- 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
Exemples de code pour cette carte
clignotante.inoArduinobouton-poussoir.inoArduinopwm-respiration.inoArduinoentree-analogique.inoArduinomulti-uart.inoArduinocapteur-i2c-bmp280.inoArduino