Serveur WebSocket ESP32 - Tutoriel sur la communication en temps réel
Exemple de WebServerWithWebSocket - Communication en temps réel
Vue d'ensemble
Cet exemple montre comment créer un serveur web multi-pages avancé avec une communication WebSocket en temps réel sur l'ESP32, permettant un échange bidirectionnel de données entre le navigateur et l'ESP32.
Fonctionnalités
- Communication WebSocket en temps réel pour un échange bidirectionnel instantané
- Commandes simples basées sur des chaînes (ping, hello, time, LED allumée/éteinte)
- Contrôle de la LED via les commandes WebSocket
- Serveur HTTP intégré hébergeant une interface de test WebSocket
- Fonctionnalité d'écho pour tester la transmission de messages
- Surveillance de l'état de la connexion avec reconnexion automatique
Préparation du matériel
Ou vous pouvez acheter les kits suivants:
| 1 | × | Kit de Démarrage DIYables ESP32 (ESP32 inclus) | |
| 1 | × | Kit de Capteurs DIYables (30 capteurs/écrans) | |
| 1 | × | Kit de Capteurs DIYables (18 capteurs/écrans) |
Installation de la bibliothèque
Suivez ces instructions étape par étape :
- Si c'est la première fois que vous utilisez l'ESP32, reportez-vous au tutoriel sur la configuration de l'environnement pour ESP32 dans l'IDE Arduino.
- Connectez la carte ESP32 à votre ordinateur à l'aide d'un câble USB.
- Lancez l'IDE Arduino sur votre ordinateur.
- Sélectionnez la carte ESP32 appropriée (par exemple, ESP32) et le port COM.
- Ouvrez le Gestionnaire de bibliothèques en cliquant sur l'icône Gestionnaire de bibliothèques sur le côté gauche de l'IDE Arduino.
- Recherchez Serveur Web pour ESP32 et localisez la bibliothèque mWebSockets de DIYables.
- Cliquez sur le bouton Install pour ajouter la bibliothèque mWebSockets.

Exemple de WebSocket
- Dans l'IDE Arduino, allez dans Fichier Exemples Serveur Web pour ESP32 WebServerWithWebSocket un exemple pour ouvrir le code d'exemple
Structure du code
Le projet se compose de deux fichiers principaux :
- websocket_html.h:
Contient le code HTML, CSS et JavaScript pour l'interface Web. Ce fichier définit l'interface utilisateur permettant d'interagir avec l'ESP32 via WebSocket, comprenant des boutons pour envoyer des commandes, un journal des messages et des indicateurs d'état de connexion.
- WebServerWithWebSocket.ino:
Implémente la logique principale du serveur sur l'ESP32. Ce fichier configure les serveurs HTTP et WebSocket, gère la connectivité WiFi, traite les messages WebSocket entrants et contrôle le matériel (tel que la LED intégrée) en fonction des commandes reçues.
Connexion du circuit
Aucun composant externe nécessaire - cet exemple utilise la LED intégrée sur la broche 13.
Communication WebSocket
Détails de la connexion
- Port du serveur Web: 80 (HTTP)
- Port du WebSocket: 81 (WebSocket)
- Protocole: WebSocket conforme à la RFC 6455
Types de messages
L'implémentation réelle utilise des commandes de chaînes simples:
- Ping: "ping" → Réponse: "pong"
- Salutation: "hello" → Réponse: "Bonjour de l'ESP32!"
- Temps de fonctionnement: "heure" → Réponse: "Temps de fonctionnement : X secondes"
- Contrôle de LED: "led allumé" / "led éteint" → Réponse: "LED ALLUMÉE" / "LED ÉTEINTE"
- Écho: Tout autre texte → Réponse: "Écho: [votre message]"
Instructions d'installation
1. Configuration du réseau
Modifiez directement les identifiants Wi-Fi dans le fichier WebServerWithWebSocket.ino :
2. Téléverser le code et surveiller la sortie
- Connectez votre ESP32 à votre ordinateur
- Sélectionnez la bonne carte et le port dans l'IDE Arduino
- Téléversez le sketch WebServerWithWebSocket.ino
- Ouvrez le Moniteur Série (9600 bauds)
- Attendez la connexion au Wi‑Fi
- Notez les adresses des serveurs HTTP et WebSocket
- Si vous ne voyez pas l'adresse IP dans le Moniteur Série, appuyez sur le bouton de réinitialisation sur la carte ESP32
- Ouvrez un navigateur Web et saisissez l'adresse IP de l'ESP32 dans la barre d'adresse (par ex., http://192.168.x.x/). Vous verrez l'interface Web ressembler à ce qui suit :

- Cliquez sur le bouton « Connect » pour connecter le Web à l'ESP32 via WebSocket.
- Une fois que l'état de la connexion affiche « Connected », cliquez sur chaque bouton l'un après l'autre pour tester la communication bidirectionnelle entre l'interface Web et l'ESP32 via WebSocket. Le résultat sera le suivant :

Fonctionnalités de l'interface Web
L'interface HTML (à partir de websocket_html.h) fournit :
- Gestion de la connexion WebSocket avec des boutons de connexion/déconnexion
- Boutons de commande simples pour ping, bonjour, heure, LED allumée/éteinte
- Champ de saisie de message pour envoyer des commandes personnalisées
- Historique des messages en temps réel affichant les messages envoyés et reçus
- Indicateur d'état de la connexion montrant l'état du WebSocket
Explication du code
Configuration du serveur WebSocket
Gestion des messages WebSocket
Boucle principale avec traitement WebSocket
Client WebSocket JavaScript
Gestion des connexions
Gestion des messages
Envoi des commandes
Fonctionnalités de l'interface HTML
Interface de test WebSocket
La page HTML incluse fournit une interface complète de test WebSocket :
- Contrôles de connexion avec les fonctions de connexion et de déconnexion
- Boutons de commandes rapides pour des commandes courantes (ping, hello, time, contrôle des LED)
- Champ de saisie de message pour l'envoi de commandes texte personnalisées
- Journal des messages en temps réel affichant toutes les communications
- Affichage de l'état de la connexion avec des indicateurs visuels
Fonctions JavaScript intégrées
L'interface HTML comprend des fonctions JavaScript correspondant à la structure des commandes ESP32 :
Notes d'implémentation
Architecture simplifiée
La mise en œuvre réelle utilise une approche simple :
- Serveurs séparés : WiFiServer pour HTTP et WebSocketServer pour WebSocket
- Connexion WiFi manuelle : Configuration standard WiFi.begin() sans gestion de serveur intégrée
- Messagerie basée sur des chaînes : commandes simples sous forme de chaînes au lieu de protocoles JSON
- Gestionnaires lambda : gestionnaires d'événements WebSocket définis comme des fonctions lambda en ligne
- Service HTML de base : impression directe du contenu HTML avec client.print() à partir du fichier d'en-tête
Limites de l'implémentation actuelle
- Pas de diffusion des données des capteurs (comme indiqué dans les exemples de la documentation)
- Pas d’analyse des messages JSON
- Pas de diffusion vers plusieurs clients
- Pas de gestion de connexion au-delà d'une connexion/déconnexion de base
- Pas de système de heartbeat ni de keepalive
- Pas de mise en queue des messages ni de fonctionnalités de fiabilité
Commandes disponibles
Les commandes qui fonctionnent dans l’implémentation réelle :
- ping → pong
- hello → Bonjour de l'ESP32!
- time → Temps de fonctionnement : X secondes
- led on → LED ALLUMÉE (allume LED_PIN)
- led off → LED ÉTEINTE (éteint LED_PIN)
- Tout autre texte → Écho: [votre message]
Dépannage
Problèmes courants
Échec de la connexion WebSocket
- Vérifier si le port WebSocket (81) est accessible
- Vérifier que les paramètres du pare-feu ne bloquent pas le port 81
- Utiliser les outils de développement du navigateur pour vérifier les erreurs WebSocket
- S'assurer que l'adresse IP de l'ESP32 est correcte
Messages non reçus
- Vérifiez le moniteur série pour les événements WebSocket et la réception de messages
- Vérifiez que les chaînes de commandes correspondent exactement (insensible à la casse)
- Testez d'abord des commandes simples comme « ping »
LED ne répond pas
- Confirmez que LED_PIN est correctement défini pour votre carte ESP32 (généralement GPIO 2)
- Vérifiez le moniteur série pour les messages de traitement des commandes
- Vérifiez que les commandes « led on » et « led off » sont envoyées exactement
Commandes de débogage
Utilisez ces commandes pour tester la fonctionnalité WebSocket :
- ping - Test de connectivité simple
- hello - Test de réponse à une salutation
- time - Test du temps de fonctionnement de l'ESP32
- led on / led off - Test de contrôle matériel
- Tout autre texte sera renvoyé pour tester la communication
Applications du monde réel
Contrôle de base de l'IoT
L'implémentation simple actuelle convient à :
- Contrôle LED à distance pour l'indication de l'état de l'appareil
- Systèmes de commande et de réponse simples pour l'interaction avec l'appareil
- Tests de connectivité WebSocket à des fins de développement
- Démonstrations de communication en temps réel de base
Améliorations potentielles
Pour étendre cet exemple en vue d'une utilisation en production, envisagez d'ajouter :
- Analyse des messages JSON pour des données structurées
- Capacités de diffusion en continu des données des capteurs
- Gestion de plusieurs connexions clients
- Fonctionnalités d'authentification et de sécurité
- Gestion des erreurs et logique de reconnexion
Prochaines étapes
- Ajouter l'analyse des messages JSON en utilisant la bibliothèque ArduinoJson
- Intégrer des capteurs réels (température, humidité, etc.)
- Implémenter la diffusion vers plusieurs clients WebSocket
- Ajouter une authentification pour un accès sécurisé
- Créer des interfaces d'applications mobiles utilisant des connexions WebSocket