ESP32 Chat Bluetooth - Interface de messagerie bidirectionnelle
Aperçu
L'exemple Chat Bluetooth permet la messagerie bidirectionnelle entre votre ESP32 et un smartphone via l'application DIYables Bluetooth STEM. Conçu pour les cartes ESP32 avec support pour les connexions BLE (Bluetooth Low Energy) et Bluetooth Classique. Envoyez et recevez des messages texte en temps réel, implémentez la gestion de commandes personnalisées, et créez un pont entre le Moniteur Série et Bluetooth — parfait pour le débogage, le contrôle à distance, et les projets interactifs.
Cet exemple supporte deux modes Bluetooth :
ESP32 BLE (Bluetooth Low Energy) : Fonctionne sur Android et iOS
ESP32 Bluetooth Classique : Fonctionne sur Android uniquement. iOS ne supporte pas le Bluetooth Classique. Utilisez BLE si vous avez besoin du support iOS.
Fonctionnalités
Messagerie bidirectionnelle : Envoyez et recevez des messages texte en temps réel
Mode écho : Renvoie automatiquement les messages reçus vers l'application
Gestion des commandes : Traite des commandes texte personnalisées (ping, status, time, heap)
Messages périodiques : Envoie des mises à jour de statut automatiques à intervalles configurables
Pont Serial-to-Bluetooth : Tapez des messages dans le Moniteur Série et envoyez-les vers l'application
BLE et Bluetooth Classique : Choisissez le mode Bluetooth qui convient à votre projet
Multiplateforme : Le mode BLE fonctionne sur Android et iOS ; le Bluetooth Classique fonctionne sur Android
Option basse consommation : Le mode BLE consomme moins d'énergie que le Bluetooth Classique
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.
Nouveau sur ESP32 ? Commencez par notre guide ESP32 Getting Started pour apprendre les bases.
Connectez la carte ESP32 à votre ordinateur avec un câble USB.
Lancez Arduino IDE sur votre ordinateur.
Sélectionnez la carte ESP32 appropriée et le port COM.
Naviguez vers l'icône Bibliothèques dans la barre de gauche d'Arduino IDE.
Recherchez "DIYables Bluetooth", puis trouvez la bibliothèque DIYables Bluetooth par DIYables
Cliquez sur le bouton Installer pour installer la bibliothèque.
Il vous sera demandé d'installer d'autres dépendances de bibliothèques
Cliquez sur le bouton Tout installer pour installer toutes les dépendances.
Choisissez l'un des deux modes Bluetooth ci-dessous selon vos besoins :
Code ESP32 Bluetooth Classique (fonctionne avec l'application sur Android uniquement)
Note : Le Bluetooth Classique n'est PAS supporté sur iOS. Si vous avez besoin du support iOS, utilisez le code BLE ci-dessous.
Dans Arduino IDE, allez dans Fichier Exemples DIYables Bluetooth Esp32Bluetooth_Chat, ou copiez le code ci-dessus et collez-le dans l'éditeur d'Arduino IDE
/* * DIYables Bluetooth Library - ESP32 Classic Bluetooth Chat Example * Works with DIYables Bluetooth STEM app on Android * Note: Classic Bluetooth is NOT supported on iOS. Use BLE examples for iOS support. * * This example demonstrates the Bluetooth Chat feature: * - Two-way text messaging via Bluetooth * - Receive messages from mobile app * - Send messages to mobile app * * Compatible Boards: * - ESP32 (all variants with Classic Bluetooth) * - ESP32-WROOM-32 * - ESP32-DevKitC * - ESP32-WROVER * * Note: Select "Huge APP (3MB No OTA/1MB SPIFFS)" partition scheme * in Arduino IDE: Tools > Partition Scheme * * Setup: * 1. Upload the sketch to your ESP32 * 2. Open Serial Monitor (115200 baud) to see connection status and messages * 3. Use DIYables Bluetooth App to connect and chat * * Tutorial: https://diyables.io/bluetooth-app * Author: DIYables */#include <DIYables_BluetoothServer.h>#include <DIYables_BluetoothChat.h>#include <platforms/DIYables_Esp32Bluetooth.h>// Create Bluetooth instancesDIYables_Esp32Bluetooth bluetooth("ESP32_Chat");DIYables_BluetoothServer bluetoothServer(bluetooth);// Create Chat app instanceDIYables_BluetoothChat bluetoothChat;// Variables for periodic messagesunsignedlong lastMessageTime = 0;constunsignedlong MESSAGE_INTERVAL = 10000; // Send message every 10 secondsint messageCount = 0;voidsetup() {Serial.begin(115200);delay(1000);Serial.println("DIYables Bluetooth - ESP32 Chat Example");// Initialize Bluetooth server with platform-specific implementation bluetoothServer.begin();// Add chat app to server bluetoothServer.addApp(&bluetoothChat);// Set up connection event callbacks bluetoothServer.setOnConnected([]() {Serial.println("Bluetooth connected!"); bluetoothChat.send("Hello! ESP32 is ready to chat."); }); bluetoothServer.setOnDisconnected([]() {Serial.println("Bluetooth disconnected!"); messageCount = 0; });// Set up callback for received chat messages bluetoothChat.onChatMessage([](const String& message) {Serial.print("Received: ");Serial.println(message);// Echo the message backString response = "Echo: "; response += message; bluetoothChat.send(response);// You can add custom command handling hereif (message.equalsIgnoreCase("ping")) { bluetoothChat.send("pong!"); } elseif (message.equalsIgnoreCase("status")) { bluetoothChat.send("ESP32 is running normally"); } elseif (message.equalsIgnoreCase("time")) {String timeMsg = "Uptime: "; timeMsg += String(millis() / 1000); timeMsg += " seconds"; bluetoothChat.send(timeMsg); } elseif (message.equalsIgnoreCase("heap")) {String heapMsg = "Free heap: "; heapMsg += String(ESP.getFreeHeap()); heapMsg += " bytes"; bluetoothChat.send(heapMsg); } });Serial.println("Waiting for Bluetooth connection..."); Serial.println("Type 'ping', 'status', 'time', or'heap' in the app to test commands");}void loop() {// Handle Bluetooth server communications bluetoothServer.loop();// Send periodic status message (only when connected)if (bluetooth.isConnected() && millis() - lastMessageTime >= MESSAGE_INTERVAL) { lastMessageTime = millis(); messageCount++;String statusMsg = "Status update #"; statusMsg += String(messageCount); statusMsg += " - All systems operational"; bluetoothChat.send(statusMsg);Serial.print("Sent: ");Serial.println(statusMsg); }// Optional: Read from Serial and send to Bluetoothif (Serial.available()) {String serialMsg = Serial.readStringUntil('\n'); serialMsg.trim();if (serialMsg.length() > 0 && bluetooth.isConnected()) { bluetoothChat.send(serialMsg);Serial.print("Sent from Serial: ");Serial.println(serialMsg); } }delay(10);}
Cliquez sur le bouton Téléverser dans Arduino IDE pour téléverser le code vers l'ESP32
Ouvrez le Moniteur Série
Vérifiez le résultat dans le Moniteur Série. Cela ressemble à ceci :
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
DIYables Bluetooth - ESP32 Chat Example
Waiting for Bluetooth connection...
Type 'ping', 'status', 'time', or 'heap' in the app to test commands
Ln 11, Col 1
ESP32 Dev Module on COM15
2
Code ESP32 BLE (fonctionne avec l'application sur Android et iOS)
Dans Arduino IDE, allez dans Fichier Exemples DIYables Bluetooth Esp32BLE_Chat, ou copiez le code ci-dessus et collez-le dans l'éditeur d'Arduino IDE
/* * DIYables Bluetooth Library - ESP32 BLE Chat Example * Works with DIYables Bluetooth STEM app on Android and iOS * * This example demonstrates the Bluetooth Chat feature: * - Two-way text messaging via Bluetooth * - Receive messages from mobile app * - Send messages to mobile app * * Compatible Boards: * - ESP32-WROOM-32 * - ESP32-DevKitC * - ESP32-WROVER * - ESP32-S3 * - ESP32-C3 * - Any ESP32 board supporting BLE * * Note: Select "Huge APP (3MB No OTA/1MB SPIFFS)" partition scheme * in Arduino IDE: Tools > Partition Scheme * * Setup: * 1. Upload the sketch to your ESP32 * 2. Open Serial Monitor (115200 baud) to see connection status and messages * 3. Use DIYables Bluetooth App to connect and chat * * Tutorial: https://diyables.io/bluetooth-app * Author: DIYables */#include <DIYables_BluetoothServer.h>#include <DIYables_BluetoothChat.h>#include <platforms/DIYables_Esp32BLE.h>// BLE Configurationconst char* DEVICE_NAME = "ESP32BLE_Chat";const char* SERVICE_UUID = "19B10000-E8F2-537E-4F6C-D104768A1214";const char* TX_UUID = "19B10001-E8F2-537E-4F6C-D104768A1214";const char* RX_UUID = "19B10002-E8F2-537E-4F6C-D104768A1214";// Create Bluetooth instancesDIYables_Esp32BLE bluetooth(DEVICE_NAME, SERVICE_UUID, TX_UUID, RX_UUID);DIYables_BluetoothServer bluetoothServer(bluetooth);// Create Chat app instanceDIYables_BluetoothChat bluetoothChat;// Variables for periodic messagesunsignedlong lastMessageTime = 0;constunsignedlong MESSAGE_INTERVAL = 10000; // Send message every 10 secondsint messageCount = 0;voidsetup() {Serial.begin(115200);delay(1000);Serial.println("DIYables Bluetooth - ESP32 BLE Chat Example");// Initialize Bluetooth server with platform-specific implementation bluetoothServer.begin();// Add chat app to server bluetoothServer.addApp(&bluetoothChat);// Set up connection event callbacks bluetoothServer.setOnConnected([]() {Serial.println("Bluetooth connected!"); bluetoothChat.send("Hello! ESP32 BLE is ready to chat."); }); bluetoothServer.setOnDisconnected([]() {Serial.println("Bluetooth disconnected!"); messageCount = 0; });// Set up callback for received chat messages bluetoothChat.onChatMessage([](const String& message) {Serial.print("Received: ");Serial.println(message);// Echo the message backString response = "Echo: "; response += message; bluetoothChat.send(response);// Custom command handlingif (message.equalsIgnoreCase("ping")) { bluetoothChat.send("pong!"); } elseif (message.equalsIgnoreCase("status")) { bluetoothChat.send("ESP32 BLE is running normally"); } elseif (message.equalsIgnoreCase("time")) {String timeMsg = "Uptime: "; timeMsg += String(millis() / 1000); timeMsg += " seconds"; bluetoothChat.send(timeMsg); } elseif (message.equalsIgnoreCase("heap")) {String heapMsg = "Free heap: "; heapMsg += String(ESP.getFreeHeap()); heapMsg += " bytes"; bluetoothChat.send(heapMsg); } });Serial.println("Waiting for Bluetooth connection..."); Serial.println("Type 'ping', 'status', 'time', or'heap' in the app to test commands");}void loop() { bluetoothServer.loop(); if (bluetooth.isConnected() && millis() - lastMessageTime >= MESSAGE_INTERVAL) { lastMessageTime = millis(); messageCount++; String statusMsg = "Status update #"; statusMsg += String(messageCount); statusMsg += " - All systems operational"; bluetoothChat.send(statusMsg); Serial.print("Sent: "); Serial.println(statusMsg); } if (Serial.available()) { String serialMsg = Serial.readStringUntil('\n'); serialMsg.trim();if (serialMsg.length() > 0 && bluetooth.isConnected()) { bluetoothChat.send(serialMsg);Serial.print("Sent from Serial: ");Serial.println(serialMsg); } }delay(10);}
Cliquez sur le bouton Téléverser dans Arduino IDE pour téléverser le code vers l'ESP32
Ouvrez le Moniteur Série
Vérifiez le résultat dans le Moniteur Série. Cela ressemble à ceci :
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
DIYables Bluetooth - ESP32 BLE Chat Example
Waiting for Bluetooth connection...
Type 'ping', 'status', 'time', or 'heap' in the app to test commands
Ln 11, Col 1
ESP32 Dev Module on COM15
2
Application mobile
Installez l'application DIYables Bluetooth sur votre smartphone : Android | iOS
Si vous utilisez le code ESP32 Bluetooth Classique, vous devez appairer l'ESP32 avec votre téléphone Android avant d'ouvrir l'application :
Allez dans les Paramètres > Bluetooth de votre téléphone
Assurez-vous que Bluetooth est activé
Votre téléphone va scanner les appareils disponibles
Trouvez et tapez "ESP32_Chat" dans la liste des appareils disponibles
Confirmez la demande d'appairage (aucun PIN requis)
Attendez jusqu'à ce qu'il affiche "Appairé" sous le nom de l'appareil
Si vous utilisez le code ESP32 BLE, aucun appairage n'est nécessaire. Passez directement à l'étape suivante.
Ouvrez l'application DIYables Bluetooth
Lors de la première ouverture de l'application, elle demandera des permissions. Veuillez accorder les suivantes :
Permission Appareils à proximité (Android 12+) / Permission Bluetooth (iOS) - requise pour scanner et se connecter aux appareils Bluetooth
Permission Localisation (Android 11 et antérieur uniquement) - requise par les anciennes versions Android pour scanner les appareils BLE
Assurez-vous que Bluetooth est activé sur votre téléphone
Sur l'écran d'accueil, tapez le bouton Se connecter. L'application va scanner les appareils BLE et Bluetooth Classique.
Trouvez et tapez votre appareil dans les résultats de scan pour vous connecter :
Pour Bluetooth Classique : tapez "ESP32_Chat"
Pour BLE : tapez "ESP32BLE_Chat"
Une fois connecté, l'application retourne automatiquement à l'écran d'accueil. Sélectionnez l'application Chat dans le menu des applications.
Tapez un message dans le champ de saisie et tapez Envoyer
Maintenant regardez le Moniteur Série dans Arduino IDE. Vous verrez :
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
Bluetooth connected!
Received: Hello
Received: ping
Received: status
Sent: Status update #1 - All systems operational
Ln 11, Col 1
ESP32 Dev Module on COM15
2
Tapez des messages dans l'application et observez le retour en temps réel dans le Moniteur Série
Essayez les commandes intégrées : ping, status, time, heap
Vous pouvez aussi taper des messages dans le Moniteur Série et ils seront envoyés vers l'application
Personnalisation créative - Adaptez le code à votre projet
Recevoir des messages depuis l'application
Utilisez le callback onChatMessage() pour traiter les messages reçus depuis l'application. Vous pouvez définir n'importe quels mots de commande personnalisés qui ont du sens pour votre projet — l'ESP32 réagira en conséquence :
Vous pouvez ajouter autant de commandes personnalisées que nécessaire en ajoutant plus de blocs elseif. Par exemple, ajoutez RELAY_ON / RELAY_OFF pour contrôler un relais, ou READ pour déclencher une lecture de capteur — tout mot que vous tapez dans l'application devient une commande.
Envoyer des messages vers l'application
Vous pouvez envoyer des messages texte depuis l'ESP32 vers l'application à tout moment :
// Envoyer un message texte simplebluetoothChat.send("Hello from ESP32!");// Envoyer des données de capteur sous forme de textefloat temperature = 25.3;bluetoothChat.send("Temperature: " + String(temperature) + "°C");// Envoyer des mises à jour de statutbluetoothChat.send("System ready");
Gérer les événements de connexion
Vous pouvez détecter quand l'application se connecte ou se déconnecte de l'ESP32 :
// Appelé quand l'application se connecte à l'ESP32bluetoothServer.setOnConnected([]() {Serial.println("Bluetooth connected!"); bluetoothChat.send("Welcome! ESP32 is ready to chat.");});// Appelé quand l'application se déconnecte de l'ESP32bluetoothServer.setOnDisconnected([]() {Serial.println("Bluetooth disconnected!");});// Vérifier le statut de connexion n'importe où dans votre codeif (bluetoothServer.isConnected()) { bluetoothChat.send("Still connected!");}
Pont Serial-to-Bluetooth
Transférez les messages tapés dans le Moniteur Série d'Arduino IDE vers l'application Bluetooth :
voidloop() { bluetoothServer.loop();// Lire depuis Serial et envoyer vers Bluetoothif (Serial.available()) {String serialMsg = Serial.readStringUntil('\n'); serialMsg.trim();if (serialMsg.length() > 0 && bluetooth.isConnected()) { bluetoothChat.send(serialMsg);Serial.print("Sent from Serial: ");Serial.println(serialMsg); } }delay(10);}
Comment utiliser le chat
Contrôles de l'interface de l'application
L'interface de chat dans l'application DIYables Bluetooth fournit :
Liste des messages : Liste déroulante montrant les messages envoyés et reçus
Saisie de texte : Tapez votre message en bas
Bouton Envoyer : Tapez pour envoyer le message tapé
Défilement automatique : Défile automatiquement vers le dernier message
Commandes intégrées
Le code d'exemple inclut ces commandes intégrées :
ping → Répond avec "pong!"
status → Rapporte le statut de fonctionnement de l'ESP32
time → Affiche le temps de fonctionnement en secondes
heap → Affiche la mémoire heap libre en octets
Exemples de programmation
Chat d'écho basique
voidsetup() {// Configurer le callback du chat bluetoothChat.onChatMessage([](const String& message) {Serial.print("Received: ");Serial.println(message);// Renvoyer le message en écho bluetoothChat.send("Echo: " + message); });}
Contrôle de LED basé sur les commandes
constint LED_PIN = 2; // LED intégréeconstint RED_PIN = 16;constint GREEN_PIN = 17;constint BLUE_PIN = 18;voidsetup() {pinMode(LED_PIN, OUTPUT);pinMode(RED_PIN, OUTPUT);pinMode(GREEN_PIN, OUTPUT);pinMode(BLUE_PIN, OUTPUT); bluetoothChat.onChatMessage([](constString& message) {String cmd = message; cmd.toUpperCase();if (cmd == "LED ON") {digitalWrite(LED_PIN, HIGH); bluetoothChat.send("LED is now ON"); } elseif (cmd == "LED OFF") {digitalWrite(LED_PIN, LOW); bluetoothChat.send("LED is now OFF"); } elseif (cmd == "RED") {digitalWrite(RED_PIN, HIGH);digitalWrite(GREEN_PIN, LOW);digitalWrite(BLUE_PIN, LOW); bluetoothChat.send("Red LED activated"); } elseif (cmd == "GREEN") {digitalWrite(RED_PIN, LOW);digitalWrite(GREEN_PIN, HIGH);digitalWrite(BLUE_PIN, LOW); bluetoothChat.send("Green LED activated"); } elseif (cmd == "BLUE") {digitalWrite(RED_PIN, LOW);digitalWrite(GREEN_PIN, LOW);digitalWrite(BLUE_PIN, HIGH); bluetoothChat.send("Blue LED activated"); } elseif (cmd == "OFF") {digitalWrite(RED_PIN, LOW);digitalWrite(GREEN_PIN, LOW);digitalWrite(BLUE_PIN, LOW); bluetoothChat.send("All LEDs off"); } elseif (cmd == "HELP") { bluetoothChat.send("Commands: LED ON, LED OFF, RED, GREEN, BLUE, OFF, HELP"); } else { bluetoothChat.send("Unknown command. Type HELP for list."); } });}
N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !