Tutoriel - STM32_WifiESP
Librairie C pour STM32 permettant de piloter un module ESP01 (ESP8266 AT) via USART DMA. Elle facilite la connexion WiFi, le serveur web embarqué, le MQTT et la synchronisation NTP, avec une API simple et modulaire.
Code source sur GitHub
- 1. Introduction
- 2. Architecture détaillée du driver
- 3. Prérequis et compatibilité
- 4. Configuration de la communication avec l'ESP01
- 5. Montage matériel STM32 & ESP01
- 6. Fichiers de la librairie
- 7. Installation et intégration
- 8. Fonctionnalités par module
- 9. Debug et bonnes pratiques
- 10. Exemples et tests fournis
- 11. Fonctions du cœur du driver
- 12. Détail des modules fonctionnels
1. Introduction
STM32_WifiESP permet d’ajouter facilement une connectivité WiFi, un serveur web, du MQTT et la synchronisation NTP à n’importe quel projet STM32, en utilisant un module ESP01 (ESP8266 en mode AT) et l’USART DMA. La librairie est conçue pour être simple à intégrer et modulaire.
2. Architecture détaillée du driver STM32_WifiESP
Le driver STM32_WifiESP est organisé en modules indépendants : chaque fonctionnalité (WiFi, HTTP,
MQTT, NTP) possède son propre fichier source et header. Le module principal (STM32_WifiESP
)
gère l’initialisation, la communication bas niveau (USART/DMA) et les utilitaires communs. Vous pouvez
n’inclure que les modules nécessaires à votre application.
Exemple d’utilisation typique
- Initialisation : Appel à
esp01_init()
pour initialiser le driver avec l’USART, le DMA et les buffers. - Connexion WiFi : Utilisation des fonctions du module WIFI pour se connecter à un réseau.
- Serveur web ou MQTT : Démarrage du serveur HTTP ou du client MQTT selon le besoin.
- Ajout de routes ou de callbacks : Ajout de routes HTTP personnalisées ou de callbacks MQTT pour gérer les interactions.
3. Prérequis et compatibilité
Compatibilité Matérielle
- Toutes les familles de microcontrôleurs STM32 supportant HAL et disposant d'un USART + DMA.
- Module ESP01 (ESP8266) avec firmware AT officiel (Celui installé par défaut sur l'ESP01).
Prérequis Logiciels
- STM32CubeIDE.
- HAL STM32 configuré pour l’USART utilisé.
- La librairie
STM32_WifiESP
présente dans le répertoire STM32_WIFI-WEB-MQTT-NTP_BY_ESP.
4. Configuration de la communication avec l'ESP01
Pour utiliser le module ESP01, il faut configurer l'USART et le DMA dans STM32CubeMX (fichier .ioc).
Voici les paramètres recommandés pour l'USART :
Si on souhaite modifier les pins par défaut de l'USART, il faut le faire avant d'activer l'USART dans CubeMX.

On active ensuite l'USART dans CubeMX, on laisse les paramètres par défaut.
- Baudrate : 115200
- Data bits : 8
- Stop bits : 1
- Parity : None
- Flow control : None

Pour le DMA, on configure l'USART1 RX avec les paramètres suivants :
- DMA Request : RX
- Mode : Circular
- Data width : Byte
- Priority : Medium
- Direction : Peripheral to Memory
5. Montage matériel STM32 & ESP01
Le module ESP01 fonctionne en 3,3V et n’est pas tolérant au 5V. Il est donc indispensable d’utiliser un STM32 en 3,3V. Voici deux exemples de montage :


Vérifiez toujours la tension de fonctionnement de votre carte STM32 : un branchement direct en 5V sur l’ESP01 l'endommagerait définitivement.
6. Fichiers de la librairie
STM32_WifiESP.h/.c
: Driver bas niveau (USART, AT, debug, reset, helpers génériques)STM32_WifiESP_WIFI.h/.c
: Fonctions WiFi haut niveau (scan, connexion, DHCP, IP, etc.)STM32_WifiESP_HTTP.h/.c
: Serveur web HTTP, parsing, routage, réponsesSTM32_WifiESP_MQTT.h/.c
: Client MQTT (connexion, publish, subscribe, callback)STM32_WifiESP_NTP.h/.c
: Synchronisation NTP, gestion date/heure
7. Installation et Intégration
- Créez un dossier nommé
STM32_WifiESP
dans le répertoireDrivers
de votre projet STM32 et copiez-y les fichiersSTM32_WifiESP.h
etSTM32_WifiESP.c
. - Ajoutez les chemins d'inclusion : dans les propriétés de votre projet STM32CubeIDE, dans C/C++ General,
> Paths and Symbols > Onglet Includes, dans GNU ajoutez le chemin vers le dossier
STM32_WifiESP
.
N'oublier pas d'activer le float dans les propriétés du projet pour afficher le nombres flottants dans le printf et scanf si besoin.
8. Fonctionnalités par module
- Bas niveau : Initialisation, reset, logs, gestion du buffer DMA, envoi de commandes AT, helpers de parsing et conversion.
- WiFi : Scan réseaux, connexion/déconnexion, DHCP, IP, MAC, RSSI, hostname, ping, état TCP/IP.
- HTTP : Serveur web multi-route, parsing requêtes, routage, réponses HTML/JSON, statistiques, gestion des connexions.
- MQTT : Connexion broker, publication, abonnement, ping, callback messages, gestion du client MQTT.
- NTP : Configuration serveur NTP, synchronisation automatique, parsing date/heure, gestion DST.
9. Debug et bonnes pratiques
- Activez
#define ESP01_DEBUG 1
dans STM32_WifiESP.h pour les logs USART - Libérez toujours les buffers alloués par
esp01_send_raw_command_dma
(sauf si la fonction s’en occupe déjà) - Utilisez les fonctions de parsing fournies pour éviter les erreurs de formatage
- Testez les fonctions de base avant d’intégrer des fonctionnalités avancées
10. Exemples et tests fournis
Test_Driver.c
: Test des fonctions bas niveau (AT, reset, logs, RAM, etc.).Test_Module_WIFI_(AP).c
: Test complet du mode Point d’Accès WiFi.Test_Module_WIFI_(STA).c
: Test complet du mode Station WiFi.Test_Serveur_WEB.c
: Démonstration serveur web multi-route.Test_Send_MQTT.c
: Publication MQTT.Test_Receive_MQTT.c
: Réception MQTT (abonnement/callback).Test_NTP.c
: Synchronisation NTP.Test_Terminal AT.c
: Terminal AT interactif.
- Ouvrez le fichier de test souhaité (ex :
Test_Serveur_WEB.c
). - Copiez tout son contenu dans votre
main.c
(remplacez le contenu existant). - Adaptez les
#define
(SSID, mot de passe WiFi, broche LED, etc.) en haut du fichier selon votre configuration matérielle. - Configurez vos USART dans STM32CubeMX (USART pour l'ESP01 et éventuellement pour la console série), puis générez le code.
- Compilez et flashez votre carte STM32 : le programme de test sera alors fonctionnel et prêt à l'emploi.
11. Liste des fonctions utilisateurs du cœur du driver
11.1. Fonctions principales (initialisation, gestion du module, buffer, etc.)
Prototype | Explication détaillée |
---|---|
|
Initialise le driver ESP01 : configure l’UART, le DMA, les buffers et
vérifie la communication avec le module. À appeler en tout premier dans le
main() . Retourne un statut d’erreur précis si un problème matériel ou
de communication est détecté.
|
|
Vide le buffer RX UART (DMA) pour éviter de traiter d’anciennes données. À utiliser avant d’envoyer une nouvelle commande AT ou après un reset. |
|
Envoie une commande AT brute via DMA et attend une réponse contenant un motif donné (ex : "OK"). Permet d’envoyer n’importe quelle commande AT personnalisée et de récupérer la réponse complète. |
11.2. Wrappers exposant une commande AT à l’utilisateur (et helpers associés)
Chaque wrapper correspond à une commande AT ou à une fonctionnalité du module ESP01, et dispose d’un
programme de test dédié dans Test_Driver.c
. Ce fichier permet de valider individuellement
chaque commande, de visualiser les réponses et de s’assurer du bon fonctionnement du driver sur votre
matériel.
Commande AT | Global | Get | Set | Exe | Description | Fonction du driver | Helper associé |
---|---|---|---|---|---|---|---|
AT | 0 | 0 | 0 | 1 | Teste la communication AT | esp01_test_at | |
ATE0 | 0 | 0 | 0 | 1 | Désactive l’écho | ||
ATE1 | 0 | 0 | 0 | 1 | Active l’écho | ||
AT+RST | 0 | 0 | 0 | 1 | Redémarre le module | esp01_reset | |
AT+GMR | 0 | 0 | 0 | 1 | Informations de version | esp01_get_at_version | esp01_display_firmware_info |
AT+CMD | 0 | 1 | 0 | 0 | Liste les commandes AT supportées | esp01_get_cmd_list | |
AT+GSLP | 0 | 0 | 1 | 0 | Entre en mode deep sleep | esp01_deep_sleep | |
AT+SYSTIMESTAMP | 0 | 1 | 1 | 0 | Horodatage système | ||
AT+SLEEP | 0 | 1 | 1 | 0 | Mode de sommeil | esp01_get_sleep_mode / esp01_set_sleep_mode | esp01_sleep_mode_to_string |
AT+RESTORE | 0 | 0 | 0 | 1 | Restaure les paramètres par défaut | esp01_restore | |
AT+SYSRAM | 0 | 1 | 0 | 0 | Utilisation actuelle de la RAM | esp01_get_sysram | esp01_sysram_to_string |
AT+SYSFLASH | 0 | 1 | 1 | 0 | Paramètres de partition flash utilisateur | esp01_get_sysflash | esp01_sysflash_to_string / esp01_display_sysflash_partitions |
AT+RFPOWER | 0 | 1 | 1 | 0 | Puissance RF maximum | esp01_get_rf_power / esp01_set_rf_power | esp01_rf_power_to_string |
AT+USEROTA | 0 | 0 | 1 | 0 | Mise à jour OTA utilisateur | esp01_user_ota | |
AT+USERWKMCUCFG | 0 | 0 | 1 | 0 | Configure le wakeup MCU utilisateur | esp01_set_user_wkmcucfg | |
AT+USERMCUSLEEP | 0 | 0 | 1 | 0 | Met le MCU utilisateur en veille | esp01_set_user_mcusleep | |
AT+SYSMSG | 0 | 1 | 1 | 0 | Affichage des messages système | ||
AT+SYSROLLBACK | 0 | 0 | 0 | 1 | Rollback firmware | ||
AT+SYSLOG | 0 | 1 | 1 | 0 | Journaux de débogage AT | esp01_get_syslog / esp01_set_syslog | esp01_syslog_to_string |
AT+SYSSTORE | 0 | 1 | 1 | 0 | Mode de stockage des paramètres | esp01_get_sysstore | esp01_sysstore_to_string |
AT+SLEEPWKCFG | 0 | 0 | 1 | 0 | Sources de réveil du sleep | ||
AT+SYSREG | 0 | 0 | 1 | 0 | Lit/écrit les registres système | ||
AT+USERRAM | 0 | 1 | 1 | 0 | RAM utilisateur | esp01_get_userram | esp01_userram_to_string |
AT+UART | 0 | 1 | 1 | 0 | Paramètres UART | esp01_get_uart_config / esp01_set_uart_config | esp01_uart_config_to_string |
11.3. Terminal / console AT
Le programme de test Test_Terminal AT.c
permet d’interagir en direct avec le module ESP01 : il
est idéal pour tester manuellement n’importe quelle commande AT, observer le retour brut du module, et ainsi
affiner ou développer les fonctions de parsing adaptées. C’est un outil précieux pour le debug,
l’exploration des réponses et la validation des nouveaux wrappers ou helpers.
Prototype | Explication détaillée |
---|---|
|
Initialise le terminal AT interactif : configure l’interface console sur l’UART de debug (généralement reliée au PC), et lance l’interruption de réception (IT RX) pour permettre la saisie en temps réel. L’utilisateur peut alors envoyer des commandes AT depuis un terminal série (ex : PuTTY, TeraTerm) et voir les réponses de l’ESP01 instantanément. |
|
Callback de réception console : à appeler dans l’interruption RX de l’UART console (HAL_UART_RxCpltCallback ou équivalent). Cette fonction récupère chaque caractère tapé sur le terminal PC, le stocke dans un buffer local, gère l’édition de la ligne (effacement, retour chariot, etc.), et déclenche l’envoi de la commande AT complète à l’ESP01 lorsque l’utilisateur valide (Entrée). Elle assure aussi l’écho des caractères sur le terminal, la gestion des touches spéciales (Backspace, etc.), et relance l’IT RX pour le caractère suivant. C’est le cœur de l’interactivité du terminal AT. |
|
Tâche principale du terminal : à placer dans la boucle principale du programme. Cette fonction surveille l’état du terminal : elle vérifie si une commande AT complète a été saisie et envoyée, attend la réponse de l’ESP01, puis affiche la réponse sur le terminal PC. Elle gère aussi les timeouts, les erreurs de communication, l’affichage des messages d’état, et réinitialise le buffer de saisie pour la commande suivante. Elle permet ainsi une expérience utilisateur fluide et réactive lors de l’utilisation du terminal AT. |
11.4. Helpers (conversion, affichage, formatage humain)
Ces fonctions utilitaires facilitent la conversion, l’affichage ou le formatage des données (par exemple : taille mémoire, valeurs numériques, etc.). Elles évitent de réécrire du code déjà existant et permettent de garder une cohérence dans la présentation des informations, tout en respectant la philosophie DRY (Don’t Repeat Yourself) de la librairie.
char *esp01_format_size(size_t bytes, char *output, size_t size);
11.5. Outils de parsing
Ces fonctions servent à extraire facilement des valeurs (entiers, chaînes, booléens) depuis les réponses AT ou les buffers. Elles sont conçues pour éviter les erreurs de parsing et accélérer le développement, en réutilisant des routines fiables et testées.
ESP01_Status_t esp01_parse_int_after(const char *text, const char *pattern, int32_t *result);
ESP01_Status_t esp01_parse_string_after(const char *text, const char *pattern, char *output, size_t size);
bool esp01_extract_quoted_value(const char *src, const char *motif, char *out, size_t out_len);
ESP01_Status_t esp01_parse_bool_after(const char *resp, const char *tag, bool *out);
uint8_t esp01_split_response_lines(const char *input_str, char *lines[], uint8_t max_lines, char *lines_buffer, size_t buffer_size, bool skip_empty);
11.6. Outils utilitaires (buffer, inline, validation)
Ces utilitaires regroupent des fonctions d’aide pour la gestion des buffers, la validation des pointeurs, la copie sécurisée de chaînes, etc. Leur usage permet d’éviter les bugs classiques (dépassement de buffer, pointeur NULL…) et d’écrire un code plus sûr et maintenable, toujours dans l’esprit de réutilisation et de robustesse de la librairie.
const char *esp01_get_error_string(ESP01_Status_t status);
ESP01_Status_t esp01_wait_for_pattern(const char *pattern, uint32_t timeout_ms);
void _esp_trim_string(char *str);
static inline ESP01_Status_t esp01_safe_strcpy(char *dst, size_t dst_size, const char *src);
static inline ESP01_Status_t esp01_check_buffer_size(size_t needed, size_t avail);
static inline bool esp01_is_valid_ptr(const void *ptr);
static inline ESP01_Status_t esp01_safe_strcat(char *dst, size_t dst_size, const char *src);
12. Détail des modules fonctionnels
12.1. Module WIFI
Le module WIFI fournit toutes les fonctions haut niveau pour gérer la connexion réseau de l’ESP01 : scan des réseaux, gestion des modes (station, point d’accès, mixte), configuration DHCP/IP, connexion/déconnexion, gestion du hostname, ping, récupération d’IP/MAC, etc. Il s’appuie sur le driver bas niveau et expose une API claire, inspirée des commandes AT, pour piloter le WiFi depuis le STM32.
Tableau des wrappers et helpers (commandes AT)
Commande AT | Wrapper principal | Helper associé | Description |
---|---|---|---|
AT+CWMODE? | esp01_get_wifi_mode | esp01_wifi_mode_to_string | Récupère le mode WiFi courant |
AT+CWMODE= | esp01_set_wifi_mode | esp01_wifi_mode_to_string | Définit le mode WiFi |
AT+CWLAP | esp01_scan_networks | esp01_parse_cwlap_line, esp01_network_to_string | Scan des réseaux WiFi à proximité |
AT+CWJAP= | esp01_connect_wifi, esp01_connect_wifi_config | - | Connexion à un réseau WiFi (simple/avancé) |
AT+CWQAP | esp01_disconnect_wifi | esp01_cwqap_to_string | Déconnexion du WiFi |
AT+CWDHCP= | esp01_set_dhcp | - | Active/désactive le DHCP |
AT+CWDHCP? | esp01_get_dhcp | - | Récupère l’état du DHCP |
AT+CIPSTA? | esp01_get_current_ip, esp01_get_ip_config | - | Récupère l’adresse IP/config IP |
AT+CIPSTAMAC? | esp01_get_mac | - | Récupère l’adresse MAC |
AT+CWHOSTNAME= | esp01_set_hostname | - | Définit le hostname |
AT+CWHOSTNAME? | esp01_get_hostname | - | Récupère le hostname |
AT+PING | esp01_ping | - | Ping une adresse réseau |
AT+CIPSTATUS | esp01_get_tcp_status | esp01_tcp_status_to_string | Statut TCP |
AT+CWSTATE? | esp01_get_wifi_state | esp01_cwstate_to_string | État WiFi |
AT+CIPAP? | esp01_get_ap_config | esp01_ap_config_to_string | Config AP |
AT+CWSAP= | esp01_start_ap_config, esp01_set_ap_config | - | Configure un AP (simple/complet) |
AT+CWJAP? | esp01_get_connection_info | esp01_parse_cwjap_response | Infos connexion WiFi |
AT+CWJAP? | esp01_get_wifi_connection | - | État de connexion WiFi (brut) |
AT+CWJAP? | esp01_get_connection_status | esp01_connection_status_to_string | Statut connexion WiFi |
AT+CIPMUX? | esp01_get_connection_mode | - | Mode de connexion (simple/multi) |
AT+CWJAP_CUR? | esp01_get_connected_ap_info | - | Infos AP connecté |
AT+CWLIF | esp01_list_ap_stations | esp01_ap_station_to_string | Liste stations connectées à l’AP |
AT+CWQIF | esp01_ap_disconnect_all, esp01_ap_disconnect_station | - | Déconnexion stations AP |
Fonctions avancées et utilitaires détaillées
Prototype | Explication détaillée |
---|---|
|
Connexion avancée à un réseau WiFi : permet de choisir le mode (STA, AP, mixte), d’activer/désactiver le DHCP ou de configurer une IP statique, gateway et masque réseau. Idéal pour les applications industrielles ou embarquées nécessitant une configuration réseau précise. |
|
Récupère la configuration IP complète : IP, gateway, masque. Utile pour vérifier la configuration réseau après connexion ou pour debug. |
|
Configure un point d’accès (SoftAP) complet : SSID, mot de passe, canal, type d’encryptage, nombre max de connexions, visibilité du SSID. Permet de transformer l’ESP01 en hotspot WiFi avancé. |
|
Liste les stations connectées à l’AP (SoftAP) : remplit un tableau de structures avec l’IP et la MAC de chaque client connecté. |
|
Déconnecte toutes les stations de l’AP, ou une station spécifique (par MAC). Pratique pour gérer dynamiquement les accès au réseau local créé par l’ESP01. |
|
Récupère le niveau de signal WiFi (RSSI) : utile pour surveiller la qualité de la connexion ou pour des applications de diagnostic réseau. |
|
Helpers pour parser et afficher les résultats de scan WiFi : extraction des infos d’une ligne brute AT+CWLAP, formatage lisible pour affichage/log. |
|
Helper pour extraire toutes les infos d’une connexion WiFi à partir de la réponse brute du module (SSID, BSSID, canal, RSSI, encryption…) |
|
Helpers pour convertir les codes d’encryptage ou la puissance RF en chaînes lisibles (pour logs, debug, affichage utilisateur). |
Structures et types principaux
esp01_network_t
: décrit un réseau WiFi détecté (SSID, MAC, RSSI, canal, encryption…)ESP01_WifiMode_t
: mode WiFi (STA, AP, STA+AP)esp01_ap_station_t
: station connectée à l’AP (IP, MAC)
Conseils d’intégration et tests
- Initialisez toujours le module ESP01 avec
esp01_init()
avant d’utiliser les fonctions WiFi. - Utilisez
Test_Module_WIFI_(STA).c
pour valider la connexion en mode station, etTest_Module_WIFI_(AP).c
pour tester le mode point d’accès. - En cas de problème, vérifiez le câblage (voir section montage) et le terminal AT (section 10.3).
- Pour des usages avancés (IP statique, hostname, multi-connexions), reportez-vous aux fonctions avancées de l’API ci-dessus.
Pour aller plus loin
- Voir les helpers de parsing et d’affichage pour exploiter les résultats des scans et des statuts.
- Consultez le code source et les headers pour la liste exhaustive des fonctions et options.
12.2. Module HTTP (serveur web)
Le module HTTP transforme l’ESP01 en serveur web embarqué : il permet d’écouter sur un port TCP, de parser les requêtes HTTP, de router les URLs vers des handlers C, et de générer dynamiquement des réponses HTML, JSON ou texte. Il gère les connexions multiples, le décodage des headers, la gestion des routes, et facilite la création d’interfaces web pour piloter ou superviser votre STM32 à distance.
Tableau des wrappers et helpers (commandes AT)
Commande AT | Wrapper principal | Helper associé | Description |
---|---|---|---|
AT+CIPSERVER | esp01_http_start_server | - | Démarre le serveur HTTP |
AT+CIPSERVER=0 | esp01_http_stop_server | - | Arrête le serveur HTTP |
AT+CIPMUX | esp01_set_multiple_connections | - | Active/désactive multi-connexion |
AT+CIPSTATUS | esp01_http_get_server_status | - | Statut du serveur HTTP |
AT+CIPCLOSE | esp01_http_close_connection | - | Ferme une connexion HTTP |
AT+CIPSEND | esp01_send_http_response | - | Envoie une réponse HTTP |
Fonctions avancées et utilitaires détaillées
Prototype | Explication détaillée |
---|---|
|
Initialise le module HTTP : efface les routes, réinitialise les stats et les connexions. À appeler au démarrage. |
|
Boucle principale de gestion HTTP : à appeler régulièrement dans la boucle principale pour traiter les requêtes entrantes et gérer les connexions. |
|
Ajoute une route HTTP (URL) et associe un handler C appelé à chaque requête correspondante. Permet de créer des pages dynamiques ou des API REST. |
|
Parse une requête HTTP brute reçue sur le port TCP : extrait la méthode,
l’URL, la query string, etc. Remplit une structure http_parsed_request_t pour
un traitement facile côté application. |
|
Envoie une réponse HTTP complète (code, headers, body) sur une connexion donnée. Permet de générer dynamiquement des pages HTML, JSON, etc. |
|
Envoie une réponse JSON sur la connexion demandée (Content-Type: application/json). |
|
Envoie une réponse 404 Not Found sur la connexion demandée. |
|
Efface toutes les routes HTTP enregistrées (utile pour reconfigurer dynamiquement le serveur). |
|
Permet de surveiller et gérer les connexions actives côté serveur. |
Structures et types principaux
http_parsed_request_t
: requête HTTP parsée (méthode, chemin, query string, validité…)esp01_route_t
: route HTTP (chemin + handler associé)connection_info_t
: informations sur une connexion HTTP activehttp_request_t
: requête HTTP brute reçue (conn_id, IP, port, validité…)esp01_stats_t
: statistiques HTTP (requêtes, réponses, temps…)
Conseils d’intégration et tests
- Utilisez
Test_Serveur_WEB.c
pour valider la configuration et le routage HTTP. - Adaptez les routes et handlers à vos besoins (API REST, pages HTML, etc.).
- Surveillez le nombre de connexions simultanées : l’ESP01 a une limite (voir
ESP01_MAX_CONNECTIONS
). - Pour le debug, affichez les requêtes reçues et les réponses envoyées côté STM32.
Pour aller plus loin
- Consultez le code source pour les options avancées (authentification, CORS, POST multipart…)
- Vous pouvez servir des pages statiques ou générer dynamiquement du contenu (JSON, HTML, etc.).
12.3. Module MQTT
Le module MQTT permet à l’ESP01 de se connecter à un broker MQTT, de publier des messages, de s’abonner à des topics, de recevoir des messages via callback, et de gérer le polling/ping. Il expose une API haut niveau pour la communication IoT, compatible avec la plupart des brokers (Mosquitto, HiveMQ, etc.), et gère la QoS, le keepalive, et la gestion des topics.
Tableau des wrappers et helpers (commandes AT)
Commande AT | Wrapper principal | Helper associé | Description |
---|---|---|---|
AT+MQTTCONN | esp01_mqtt_connect | - | Connexion au broker MQTT |
AT+MQTTPUB | esp01_mqtt_publish | - | Publication d’un message |
AT+MQTTSUB | esp01_mqtt_subscribe | - | Souscription à un topic |
AT+MQTTPING | esp01_mqtt_ping | - | Ping MQTT (keepalive) |
AT+MQTTDISC | esp01_mqtt_disconnect | - | Déconnexion du broker |
Fonctions avancées et utilitaires détaillées
Prototype | Explication détaillée |
---|---|
|
Connexion au broker MQTT avec gestion du client ID, des identifiants et du port. Supporte l’authentification si besoin. |
|
Publication d’un message sur un topic : supporte la QoS (0/1/2) et le flag retain. |
|
Souscription à un topic MQTT avec gestion de la QoS. |
|
Définit le callback utilisateur appelé à chaque réception de message MQTT (topic, message). |
|
Fonction de polling à appeler régulièrement pour traiter les messages entrants et maintenir la connexion. |
|
Envoie un ping MQTT (PINGREQ) pour maintenir la connexion active (keepalive). |
|
Déconnexion propre du broker MQTT. |
Structures et types principaux
mqtt_client_t
: structure du client MQTT (statut, IP broker, port, client ID, keepalive…)mqtt_message_callback_t
: prototype de callback pour la réception de messages
Conseils d’intégration et tests
- Utilisez
Test_Send_MQTT.c
etTest_Receive_MQTT.c
pour valider la publication et la réception. - Adaptez le client ID et les topics à votre application.
- Appelez
esp01_mqtt_poll()
régulièrement pour garantir la réception des messages et le maintien de la connexion. - Surveillez le statut de connexion (
g_mqtt_client.connected
) pour gérer les reconnexions.
Pour aller plus loin
- Consultez le code source pour les options avancées (QoS 1/2, gestion des erreurs, reconnexion automatique…)
- Compatible avec la plupart des brokers MQTT standards (Mosquitto, HiveMQ, etc.).
12.4. Module NTP
Le module NTP permet à l’ESP01 de synchroniser automatiquement l’horloge du STM32 avec un serveur de temps NTP (Network Time Protocol) sur Internet ou le réseau local. Il facilite la récupération de la date et de l’heure précises, la gestion du fuseau horaire, du passage à l’heure d’été/hiver (DST), et l’intégration d’une horloge temps réel fiable dans les applications embarquées.
Tableau des wrappers et helpers (commandes AT)
Commande AT | Wrapper principal | Helper associé | Description |
---|---|---|---|
AT+CNTP | esp01_set_ntp_server | - | Configure le serveur NTP (adresse, fuseau, DST) |
AT+CNTP? | esp01_get_ntp_config | esp01_ntp_config_to_string | Récupère la configuration NTP courante |
AT+SYNCTIME | esp01_sync_time | - | Déclenche une synchronisation NTP immédiate |
AT+TIME? | esp01_get_time | esp01_parse_time_response | Récupère la date/heure courante (UTC ou locale) |
Fonctions avancées et utilitaires détaillées
Prototype | Explication détaillée |
---|---|
|
Configure le serveur NTP, le fuseau horaire (timezone, en heures) et l’activation du passage à l’heure d’été/hiver (DST). À appeler au démarrage ou pour changer de serveur. |
|
Récupère la configuration NTP courante : adresse du serveur, fuseau horaire, état DST. Permet de vérifier ou d’afficher la config active. |
|
Déclenche une synchronisation immédiate avec le serveur NTP configuré. Utile pour forcer la mise à jour de l’horloge à tout moment. |
|
Récupère la date et l’heure courante depuis l’ESP01 : remplit une
structure esp01_time_t (année, mois, jour, heure, minute, seconde, etc.). Le
paramètre local_time permet d’obtenir l’heure locale ou UTC. |
|
Helper pour parser la réponse brute AT+TIME? et remplir la structure
esp01_time_t avec les champs date/heure extraits.
|
|
Formate la configuration NTP courante en chaîne lisible (pour logs, debug, affichage utilisateur). |
Structures et types principaux
esp01_time_t
: structure date/heure complète (année, mois, jour, heure, minute, seconde, jour semaine, validité…)
Conseils d’intégration et tests
- Appelez
esp01_set_ntp_server()
au démarrage pour configurer le serveur, le fuseau et le DST selon votre région. - Utilisez
esp01_sync_time()
après la connexion WiFi pour garantir une horloge à jour. - Testez la synchronisation et la récupération de l’heure avec
Test_NTP.c
. - Pour des applications critiques, vérifiez la validité du champ
valid
dansesp01_time_t
après chaque synchronisation.
Pour aller plus loin
- Vous pouvez utiliser plusieurs serveurs NTP pour la redondance (voir
pool.ntp.org
). - Adaptez le fuseau horaire dynamiquement selon la localisation de l’appareil.
- Consultez le code source pour des helpers de parsing ou de conversion supplémentaires.