Exemple de chat Bluetooth Arduino Nano ESP32 - Messagerie bidirectionnelle via tutoriel BLE

Vue d'ensemble

Cet exemple implémente une interface de messagerie texte bidirectionnelle sur l'Arduino Nano ESP32 en utilisant le BLE (Bluetooth Low Energy) via l'application DIYables Bluetooth STEM. Envoyez et recevez des messages texte entre l'Arduino et un smartphone en temps réel. Convient aux interfaces en ligne de commande, contrôle à distance via texte, ponts série et débogage interactif.

Remarque : L'Arduino Nano ESP32 prend en charge le BLE uniquement — le Bluetooth Classique n'est pas pris en charge. L'application Bluetooth DIYables fonctionne sur Android et iOS avec le BLE.

Exemple de chat Bluetooth Arduino Nano ESP32 - Messagerie bidirectionnelle via tutoriel BLE

Fonctionnalités

  • Messagerie bidirectionnelle : Envoyez et recevez des messages texte en temps réel
  • Gestion des commandes : Traitez les commandes texte reçues de l'application
  • Pont série : Transmettez des messages entre le Moniteur Série et le Bluetooth
  • Réponses personnalisées : Répondez automatiquement avec des échos ou des données traitées
  • Support Android et iOS : Le BLE est compatible avec les deux plateformes
  • Pas de couplage requis : Le BLE se connecte sans couplage manuel
  • Faible consommation : Le BLE consomme moins d'énergie que le Bluetooth Classique

Matériel nécessaire

1×Arduino Nano ESP32
1×Câble USB Type-A vers Type-C (pour PC USB-A)
1×Câble USB Type-C vers Type-C (pour PC USB-C)
1×Recommandé: Carte d'extension à bornier à vis pour Arduino Nano
1×Recommandé: Carte d'extension breakout pour Arduino Nano
1×Recommandé: Répartiteur d'alimentation pour Arduino Nano ESP32

Ou vous pouvez acheter les kits suivants:

1×Kit de Capteurs DIYables (18 capteurs/écrans)
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.

Code Arduino Nano ESP32

Étapes rapides

  • Nouveau sur l'Arduino Nano ESP32 ? Commencez par le Installation du logiciel Arduino Nano ESP32..
  • Connectez l'Arduino Nano ESP32 à votre ordinateur via USB.
  • Ouvrez l'Arduino IDE.
  • Sélectionnez la carte Arduino Nano ESP32 et le port COM correct.
  • Cliquez sur l'icône Bibliothèques dans la barre latérale gauche.
  • Recherchez "DIYables Bluetooth" et sélectionnez la bibliothèque Bluetooth DIYables par DIYables.
  • Cliquez sur Installer.
Bibliothèque Bluetooth DIYables Arduino Nano ESP32
  • Lorsqu'on vous demande d'installer les dépendances, cliquez sur Tout installer.
Dépendance Bluetooth DIYables Arduino Nano ESP32

Code BLE

  • Dans l'Arduino IDE, ouvrez Fichier Exemples DIYables Bluetooth ArduinoBLE_Chat, ou collez le code dans l'éditeur.
/* * 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 * * Tutorial: https://diyables.io/bluetooth-app * Author: DIYables */ #include <DIYables_BluetoothServer.h> #include <DIYables_BluetoothChat.h> #include <platforms/DIYables_Esp32BLE.h> // BLE Configuration const 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 instances DIYables_Esp32BLE bluetooth(DEVICE_NAME, SERVICE_UUID, TX_UUID, RX_UUID); DIYables_BluetoothServer bluetoothServer(bluetooth); // Create Chat app instance DIYables_BluetoothChat bluetoothChat; // Variables for periodic messages unsigned long lastMessageTime = 0; const unsigned long MESSAGE_INTERVAL = 10000; // Send message every 10 seconds int messageCount = 0; void setup() { 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 back String response = "Echo: "; response += message; bluetoothChat.send(response); // Custom command handling if (message.equalsIgnoreCase("ping")) { bluetoothChat.send("pong!"); } else if (message.equalsIgnoreCase("status")) { bluetoothChat.send("ESP32 BLE is running normally"); } else if (message.equalsIgnoreCase("time")) { String timeMsg = "Uptime: "; timeMsg += String(millis() / 1000); timeMsg += " seconds"; bluetoothChat.send(timeMsg); } else if (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 Téléverser pour flasher le sketch sur la carte.
  • Ouvrez le Moniteur Série.
  • La sortie du Moniteur Série devrait ressembler à :
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
DIYables Bluetooth - Chat Example Waiting for Bluetooth connection...
Ln 11, Col 1
Arduino Nano ESP32 on COM15
2

Application mobile

  • Installez l'application Bluetooth DIYables sur votre smartphone : Android | iOS

Remarque : L'application Bluetooth DIYables fonctionne sur Android et iOS avec le BLE. Aucun couplage manuel n'est requis.

  • Lancez l'application Bluetooth DIYables.
  • Au premier lancement, accordez les autorisations suivantes :
    • Appareils à proximité (Android 12+) / Bluetooth (iOS) — requis pour scanner et se connecter aux appareils Bluetooth
    • Localisation (Android 11 et versions antérieures uniquement) — requis par les anciennes versions Android pour scanner le BLE
  • Assurez-vous que le Bluetooth est activé sur votre appareil.
  • Appuyez sur Connecter sur l'écran d'accueil. L'application va scanner les appareils BLE.
Application Bluetooth DIYables - Écran d'accueil avec bouton de scan
  • Appuyez sur "Arduino_Chat" dans les résultats du scan.
  • Après la connexion, revenez à l'écran d'accueil et ouvrez l'application Chat.
Application Bluetooth DIYables - Écran d'accueil avec l'application Chat

Appuyez sur l'icône des paramètres sur l'écran d'accueil pour afficher ou masquer les applications. Consultez le Manuel utilisateur de l'application Bluetooth DIYables pour plus de détails.

  • Saisissez un message dans le champ de saisie du chat et appuyez sur envoyer.
Application Bluetooth DIYables - Écran de chat

Regardez maintenant le Moniteur Série dans l'Arduino IDE. Vous verrez :

Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
Bluetooth connected! Received: Hello
Ln 11, Col 1
Arduino Nano ESP32 on COM15
2
  • L'Arduino renvoie le message en écho, et la réponse apparaît dans le chat de l'application.

Personnalisation créative - Adaptez le code à votre projet

Gérer les messages de chat

Utilisez le callback onChatMessage() pour recevoir et traiter les messages de l'application. Définissez des mots de commande personnalisés selon vos besoins — l'Arduino répond en conséquence :

bluetoothChat.onChatMessage([](const String& message) { Serial.print("Received: "); Serial.println(message); // Echo the message back String response = "Echo: "; response += message; bluetoothChat.send(response); // Handle custom commands if (message.equalsIgnoreCase("ping")) { bluetoothChat.send("pong!"); } else if (message.equalsIgnoreCase("status")) { bluetoothChat.send("Arduino is running normally"); } else if (message.equalsIgnoreCase("time")) { String timeMsg = "Uptime: " + String(millis() / 1000) + " seconds"; bluetoothChat.send(timeMsg); } else { bluetoothChat.send("Unknown command: " + message); } });

Ajoutez des blocs else if supplémentaires pour chaque commande. Par exemple, utilisez LED_ON / LED_OFF pour contrôler une broche ou READ pour déclencher une lecture de capteur.

Envoyer des messages depuis l'Arduino

// Send a text message to the app bluetoothChat.send("Hello from Arduino!"); // Send sensor reading float temp = readTemperature(); bluetoothChat.send("Temperature: " + String(temp, 1) + " °C");

Pont Série-Bluetooth

Transmettez des messages entre le Moniteur Série et le Bluetooth :

// In loop(): 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); } }

Gérer les événements de connexion

bluetoothServer.setOnConnected([]() { Serial.println("Bluetooth connected!"); bluetoothChat.send("Hello! Arduino is ready to chat."); }); bluetoothServer.setOnDisconnected([]() { Serial.println("Bluetooth disconnected!"); });

Comment utiliser le chat

Interface de l'application

L'application Chat dans l'application Bluetooth DIYables fournit :

  • Liste de messages : Affiche les messages envoyés et reçus avec horodatages
  • Saisie de texte : Tapez des messages à envoyer à l'Arduino
  • Bouton d'envoi : Appuyez pour transmettre le message

Flux de communication

  1. Tapez un message dans l'application → L'Arduino le reçoit via le callback onChatMessage()
  2. L'Arduino traite le message et envoie optionnellement une réponse via bluetoothChat.send()
  3. La réponse apparaît dans la fenêtre de chat de l'application

Exemples de programmation

Gestionnaire de commandes avec contrôle de relais

const int RELAY_PIN = 7; bluetoothChat.onChatMessage([](const String& message) { String cmd = message; cmd.toUpperCase(); if (cmd == "ON") { digitalWrite(RELAY_PIN, HIGH); bluetoothChat.send("Relay turned ON"); } else if (cmd == "OFF") { digitalWrite(RELAY_PIN, LOW); bluetoothChat.send("Relay turned OFF"); } else if (cmd == "STATUS") { int state = digitalRead(RELAY_PIN); bluetoothChat.send("Relay is " + String(state ? "ON" : "OFF")); } else { bluetoothChat.send("Commands: ON, OFF, STATUS"); } });

Système de requête de capteurs

bluetoothChat.onChatMessage([](const String& message) { String cmd = message; cmd.toUpperCase(); if (cmd == "TEMP") { float temp = readTemperature(); bluetoothChat.send("Temperature: " + String(temp, 1) + " °C"); } else if (cmd == "LIGHT") { int light = analogRead(A0); int percent = map(light, 0, 1023, 0, 100); bluetoothChat.send("Light level: " + String(percent) + "%"); } else if (cmd == "ALL") { bluetoothChat.send("=== Sensor Report ==="); bluetoothChat.send("Temp: " + String(readTemperature(), 1) + " °C"); bluetoothChat.send("Light: " + String(map(analogRead(A0), 0, 1023, 0, 100)) + "%"); bluetoothChat.send("Uptime: " + String(millis() / 1000) + "s"); } else { bluetoothChat.send("Commands: TEMP, LIGHT, ALL"); } });

Mises à jour de statut périodiques

unsigned long lastMessageTime = 0; const unsigned long MESSAGE_INTERVAL = 10000; // Every 10 seconds int messageCount = 0; void loop() { bluetoothServer.loop(); if (bluetooth.isConnected() && millis() - lastMessageTime >= MESSAGE_INTERVAL) { lastMessageTime = millis(); messageCount++; String statusMsg = "Status #" + String(messageCount) + " - All systems OK"; bluetoothChat.send(statusMsg); } delay(10); }

Techniques de programmation avancées

Analyse de commandes multi-mots

bluetoothChat.onChatMessage([](const String& message) { // Parse "SET PIN 13 HIGH" style commands if (message.startsWith("SET PIN ")) { String rest = message.substring(8); int spaceIdx = rest.indexOf(' '); if (spaceIdx > 0) { int pin = rest.substring(0, spaceIdx).toInt(); String state = rest.substring(spaceIdx + 1); state.toUpperCase(); pinMode(pin, OUTPUT); if (state == "HIGH") { digitalWrite(pin, HIGH); bluetoothChat.send("Pin " + String(pin) + " set HIGH"); } else if (state == "LOW") { digitalWrite(pin, LOW); bluetoothChat.send("Pin " + String(pin) + " set LOW"); } } } });

Journal de chat avec horodatages

bluetoothChat.onChatMessage([](const String& message) { unsigned long seconds = millis() / 1000; String timestamp = "[" + String(seconds / 3600) + ":" + String((seconds % 3600) / 60) + ":" + String(seconds % 60) + "] "; Serial.println(timestamp + "RX: " + message); // Log and acknowledge bluetoothChat.send(timestamp + "Received: " + message); });

Dépannage

Problèmes courants

1. L'appareil n'est pas visible dans l'application

  • Confirmez que la carte est alimentée et que le sketch est téléversé
  • Vérifiez que le Bluetooth est activé sur votre téléphone
  • Sur Android 11 et versions antérieures, activez également les services de localisation
  • Essayez de redémarrer le Bluetooth sur votre téléphone

2. Les messages ne sont pas reçus par l'Arduino

  • Vérifiez l'état de la connexion Bluetooth dans l'application
  • Confirmez que le callback onChatMessage est correctement enregistré
  • Vérifiez le Moniteur Série pour les messages d'erreur

3. Les réponses de l'Arduino n'apparaissent pas dans l'application

  • Vérifiez que bluetoothChat.send() est appelé
  • Confirmez que bluetoothServer.loop() est présent dans la boucle principale
  • Vérifiez l'état de la connexion avec bluetooth.isConnected()

4. Le Moniteur Série affiche du texte brouillé

  • Confirmez que le débit en bauds dans le Moniteur Série correspond à Serial.begin(9600)
  • Vérifiez que la bonne carte est sélectionnée dans l'Arduino IDE

5. La connexion se coupe fréquemment

  • Réduisez la distance à l'Arduino
  • Vérifiez les interférences des autres appareils BLE
  • Assurez une alimentation USB stable

6. Le téléversement échoue ou la carte n'est pas reconnue

  • Installez le dernier paquet de carte Arduino Nano ESP32 via le Gestionnaire de cartes
  • Essayez un câble USB ou un port différent
  • Appuyez sur le bouton de réinitialisation avant le téléversement

Idées de projets

Communication

  • Interface de commande texte pour domotique
  • Pont Série-Bluetooth pour débogage sans fil
  • Système de requête de capteurs à distance
  • Quiz interactif ou jeu de questions-réponses

Systèmes de contrôle

  • Relais de contrôle voix-texte
  • Routeur de commandes multi-appareils
  • Gestionnaire de configuration via commandes de chat
  • Rapporteur de version de firmware

Journalisation et surveillance

  • Journal d'événements avec horodatages
  • Système de notification d'alarmes
  • Générateur de rapports de statut
  • Bot de diagnostic conversationnel

Intégration avec d'autres applications Bluetooth

Combiner avec le Moniteur Bluetooth

Utilisez le chat pour les commandes et le moniteur pour la sortie continue :

bluetoothChat.onChatMessage([](const String& message) { if (message == "START") { monitoring = true; bluetoothChat.send("Monitoring started"); } else if (message == "STOP") { monitoring = false; bluetoothChat.send("Monitoring stopped"); } }); // In loop: if (monitoring) { bluetoothMonitor.send("Sensor: " + String(analogRead(A0))); }

Combiner avec le Tableau Bluetooth

Commandes de chat pour contrôler quelles données sont affichées dans le tableau :

bluetoothChat.onChatMessage([](const String& message) { if (message == "REFRESH") { updateTableValues(); bluetoothChat.send("Table refreshed"); } });

Prochaines étapes

Après avoir terminé l'exemple de chat Bluetooth, explorez :

  1. Moniteur Bluetooth — Diffusion de messages de statut unidirectionnels
  2. Curseur Bluetooth — Contrôle de valeurs analogiques
  3. Tableau Bluetooth — Affichage de données structurées
  4. Applications Bluetooth multiples — Combinez le chat avec d'autres widgets d'application

Support

Pour une aide supplémentaire :

  • Consultez la documentation de référence API
  • Les forums de la communauté Arduino

※ NOS MESSAGES

  • 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 !