ESP32 Chat Bluetooth - Interface de messagerie bidirectionnelle
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.
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
Ou vous pouvez acheter les kits suivants:
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.
Suivez ces instructions étape par étape :
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.
Choisissez l'un des deux modes Bluetooth ci-dessous selon vos besoins :
Note : Le Bluetooth Classique n'est PAS supporté sur iOS. Si vous avez besoin du support iOS, utilisez le code BLE ci-dessous.
#include <DIYables_BluetoothServer.h>
#include <DIYables_BluetoothChat.h>
#include <platforms/DIYables_Esp32Bluetooth.h>
DIYables_Esp32Bluetooth bluetooth("ESP32_Chat");
DIYables_BluetoothServer bluetoothServer(bluetooth);
DIYables_BluetoothChat bluetoothChat;
unsigned long lastMessageTime = 0;
const unsigned long MESSAGE_INTERVAL = 10000;
int messageCount = 0;
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("DIYables Bluetooth - ESP32 Chat Example");
bluetoothServer.begin();
bluetoothServer.addApp(&bluetoothChat);
bluetoothServer.setOnConnected([]() {
Serial.println("Bluetooth connected!");
bluetoothChat.send("Hello! ESP32 is ready to chat.");
});
bluetoothServer.setOnDisconnected([]() {
Serial.println("Bluetooth disconnected!");
messageCount = 0;
});
bluetoothChat.onChatMessage([](const String& message) {
Serial.print("Received: ");
Serial.println(message);
String response = "Echo: ";
response += message;
bluetoothChat.send(response);
if (message.equalsIgnoreCase("ping")) {
bluetoothChat.send("pong!");
} else if (message.equalsIgnoreCase("status")) {
bluetoothChat.send("ESP32 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);
}
DIYables Bluetooth - ESP32 Chat Example
Waiting for Bluetooth connection...
Type 'ping', 'status', 'time', or 'heap' in the app to test commands
#include <DIYables_BluetoothServer.h>
#include <DIYables_BluetoothChat.h>
#include <platforms/DIYables_Esp32BLE.h>
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";
DIYables_Esp32BLE bluetooth(DEVICE_NAME, SERVICE_UUID, TX_UUID, RX_UUID);
DIYables_BluetoothServer bluetoothServer(bluetooth);
DIYables_BluetoothChat bluetoothChat;
unsigned long lastMessageTime = 0;
const unsigned long MESSAGE_INTERVAL = 10000;
int messageCount = 0;
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("DIYables Bluetooth - ESP32 BLE Chat Example");
bluetoothServer.begin();
bluetoothServer.addApp(&bluetoothChat);
bluetoothServer.setOnConnected([]() {
Serial.println("Bluetooth connected!");
bluetoothChat.send("Hello! ESP32 BLE is ready to chat.");
});
bluetoothServer.setOnDisconnected([]() {
Serial.println("Bluetooth disconnected!");
messageCount = 0;
});
bluetoothChat.onChatMessage([](const String& message) {
Serial.print("Received: ");
Serial.println(message);
String response = "Echo: ";
response += message;
bluetoothChat.send(response);
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);
}
DIYables Bluetooth - ESP32 BLE Chat Example
Waiting for Bluetooth connection...
Type 'ping', 'status', 'time', or 'heap' in the app to test commands
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 :
Une fois connecté, l'application retourne automatiquement à l'écran d'accueil. Sélectionnez l'application Chat dans le menu des applications.
Note : Vous pouvez taper l'icône paramètres sur l'écran d'accueil pour masquer/afficher les applications sur l'écran d'accueil. Pour plus de détails, voir le Manuel utilisateur de l'application DIYables Bluetooth.
Maintenant regardez le Moniteur Série dans Arduino IDE. Vous verrez :
Bluetooth connected!
Received: Hello
Received: ping
Received: status
Sent: Status update #1 - All systems operational
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
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 :
bluetoothChat.onChatMessage([](const String& message) {
Serial.print("Received: ");
Serial.println(message);
if (message == "LED_ON") {
digitalWrite(2, HIGH);
bluetoothChat.send("LED turned ON");
} else if (message == "LED_OFF") {
digitalWrite(2, LOW);
bluetoothChat.send("LED turned OFF");
} else {
bluetoothChat.send("Unknown command: " + message);
}
});
Vous pouvez ajouter autant de commandes personnalisées que nécessaire en ajoutant plus de blocs else if. 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.
Vous pouvez envoyer des messages texte depuis l'ESP32 vers l'application à tout moment :
bluetoothChat.send("Hello from ESP32!");
float temperature = 25.3;
bluetoothChat.send("Temperature: " + String(temperature) + "°C");
bluetoothChat.send("System ready");
Vous pouvez détecter quand l'application se connecte ou se déconnecte de l'ESP32 :
bluetoothServer.setOnConnected([]() {
Serial.println("Bluetooth connected!");
bluetoothChat.send("Welcome! ESP32 is ready to chat.");
});
bluetoothServer.setOnDisconnected([]() {
Serial.println("Bluetooth disconnected!");
});
if (bluetoothServer.isConnected()) {
bluetoothChat.send("Still connected!");
}
Transférez les messages tapés dans le Moniteur Série d'Arduino IDE vers l'application Bluetooth :
void loop() {
bluetoothServer.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);
}
}
delay(10);
}
void setup() {
bluetoothChat.onChatMessage([](const String& message) {
Serial.print("Received: ");
Serial.println(message);
bluetoothChat.send("Echo: " + message);
});
}
const int LED_PIN = 2;
const int RED_PIN = 16;
const int GREEN_PIN = 17;
const int BLUE_PIN = 18;
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
bluetoothChat.onChatMessage([](const String& message) {
String cmd = message;
cmd.toUpperCase();
if (cmd == "LED ON") {
digitalWrite(LED_PIN, HIGH);
bluetoothChat.send("LED is now ON");
} else if (cmd == "LED OFF") {
digitalWrite(LED_PIN, LOW);
bluetoothChat.send("LED is now OFF");
} else if (cmd == "RED") {
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);
bluetoothChat.send("Red LED activated");
} else if (cmd == "GREEN") {
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, LOW);
bluetoothChat.send("Green LED activated");
} else if (cmd == "BLUE") {
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, HIGH);
bluetoothChat.send("Blue LED activated");
} else if (cmd == "OFF") {
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);
bluetoothChat.send("All LEDs off");
} else if (cmd == "HELP") {
bluetoothChat.send("Commands: LED ON, LED OFF, RED, GREEN, BLUE, OFF, HELP");
} else {
bluetoothChat.send("Unknown command. Type HELP for list.");
}
});
}
#include <DHT.h>
DHT dht(4, DHT22);
void setup() {
dht.begin();
bluetoothChat.onChatMessage([](const String& message) {
String cmd = message;
cmd.toUpperCase();
if (cmd == "TEMP") {
float temp = dht.readTemperature();
if (!isnan(temp)) {
bluetoothChat.send("Temperature: " + String(temp, 1) + " °C");
} else {
bluetoothChat.send("Error reading temperature sensor");
}
} else if (cmd == "HUMIDITY") {
float hum = dht.readHumidity();
if (!isnan(hum)) {
bluetoothChat.send("Humidity: " + String(hum, 1) + " %");
} else {
bluetoothChat.send("Error reading humidity sensor");
}
} else if (cmd == "ALL") {
float temp = dht.readTemperature();
float hum = dht.readHumidity();
bluetoothChat.send("Temp: " + String(temp, 1) + "°C | Humidity: " + String(hum, 1) + "%");
} else if (cmd == "HELP") {
bluetoothChat.send("Commands: TEMP, HUMIDITY, ALL, HELP");
}
});
}
const int RELAY_1 = 16;
const int RELAY_2 = 17;
bool relay1State = false;
bool relay2State = false;
void setup() {
pinMode(RELAY_1, OUTPUT);
pinMode(RELAY_2, OUTPUT);
digitalWrite(RELAY_1, LOW);
digitalWrite(RELAY_2, LOW);
bluetoothChat.onChatMessage([](const String& message) {
String cmd = message;
cmd.toUpperCase();
if (cmd == "R1 ON") {
digitalWrite(RELAY_1, HIGH);
relay1State = true;
bluetoothChat.send("Relay 1: ON");
} else if (cmd == "R1 OFF") {
digitalWrite(RELAY_1, LOW);
relay1State = false;
bluetoothChat.send("Relay 1: OFF");
} else if (cmd == "R2 ON") {
digitalWrite(RELAY_2, HIGH);
relay2State = true;
bluetoothChat.send("Relay 2: ON");
} else if (cmd == "R2 OFF") {
digitalWrite(RELAY_2, LOW);
relay2State = false;
bluetoothChat.send("Relay 2: OFF");
} else if (cmd == "STATUS") {
bluetoothChat.send("Relay 1: " + String(relay1State ? "ON" : "OFF"));
bluetoothChat.send("Relay 2: " + String(relay2State ? "ON" : "OFF"));
} else if (cmd == "HELP") {
bluetoothChat.send("Commands: R1 ON, R1 OFF, R2 ON, R2 OFF, STATUS, HELP");
}
});
}
unsigned long lastMessageTime = 0;
const unsigned long MESSAGE_INTERVAL = 10000;
void loop() {
bluetoothServer.loop();
if (bluetooth.isConnected() && millis() - lastMessageTime >= MESSAGE_INTERVAL) {
lastMessageTime = millis();
messageCount++;
String statusMsg = "Status update #" + String(messageCount);
statusMsg += " - Uptime: " + String(millis() / 1000) + "s";
statusMsg += " - Heap: " + String(ESP.getFreeHeap()) + " bytes";
bluetoothChat.send(statusMsg);
}
delay(10);
}
bluetoothChat.onChatMessage([](const String& message) {
unsigned long timestamp = millis() / 1000;
Serial.print("[");
Serial.print(timestamp);
Serial.print("s] Received: ");
Serial.println(message);
String response = processCommand(message);
bluetoothChat.send(response);
Serial.print("[");
Serial.print(millis() / 1000);
Serial.print("s] Sent: ");
Serial.println(response);
});
String processCommand(const String& cmd) {
if (cmd.equalsIgnoreCase("ping")) return "pong!";
if (cmd.equalsIgnoreCase("status")) return "All systems operational";
if (cmd.equalsIgnoreCase("time")) return "Uptime: " + String(millis() / 1000) + "s";
return "Echo: " + cmd;
}
bluetoothChat.onChatMessage([](const String& message) {
int spaceIndex = message.indexOf(' ');
String command, argument;
if (spaceIndex > 0) {
command = message.substring(0, spaceIndex);
argument = message.substring(spaceIndex + 1);
} else {
command = message;
argument = "";
}
command.toUpperCase();
if (command == "PWM") {
int value = argument.toInt();
value = constrain(value, 0, 255);
analogWrite(16, value);
bluetoothChat.send("PWM set to " + String(value));
} else if (command == "DELAY") {
int ms = argument.toInt();
bluetoothChat.send("Waiting " + String(ms) + "ms...");
delay(ms);
bluetoothChat.send("Done!");
} else if (command == "PIN") {
int secondSpace = argument.indexOf(' ');
if (secondSpace > 0) {
int pin = argument.substring(0, secondSpace).toInt();
String state = argument.substring(secondSpace + 1);
state.toUpperCase();
digitalWrite(pin, state == "HIGH" ? HIGH : LOW);
bluetoothChat.send("Pin " + String(pin) + " set " + state);
}
}
});
#include <ESP32Servo.h>
Servo myServo;
const int SERVO_PIN = 13;
void setup() {
myServo.attach(SERVO_PIN);
bluetoothChat.onChatMessage([](const String& message) {
String cmd = message;
cmd.toUpperCase();
int angle = -1;
if (cmd.startsWith("SERVO ")) {
angle = cmd.substring(6).toInt();
} else {
angle = cmd.toInt();
if (angle == 0 && cmd != "0") angle = -1;
}
if (angle >= 0 && angle <= 180) {
myServo.write(angle);
bluetoothChat.send("Servo moved to " + String(angle) + "°");
} else if (cmd == "SWEEP") {
bluetoothChat.send("Sweeping servo...");
for (int a = 0; a <= 180; a += 5) {
myServo.write(a);
delay(30);
}
for (int a = 180; a >= 0; a -= 5) {
myServo.write(a);
delay(30);
}
bluetoothChat.send("Sweep complete");
}
});
}
const int MOTOR_PWM = 16;
const int MOTOR_DIR1 = 18;
const int MOTOR_DIR2 = 19;
void setup() {
pinMode(MOTOR_PWM, OUTPUT);
pinMode(MOTOR_DIR1, OUTPUT);
pinMode(MOTOR_DIR2, OUTPUT);
bluetoothChat.onChatMessage([](const String& message) {
String cmd = message;
cmd.toUpperCase();
if (cmd == "FORWARD") {
digitalWrite(MOTOR_DIR1, HIGH);
digitalWrite(MOTOR_DIR2, LOW);
analogWrite(MOTOR_PWM, 200);
bluetoothChat.send("Motor running forward");
} else if (cmd == "REVERSE") {
digitalWrite(MOTOR_DIR1, LOW);
digitalWrite(MOTOR_DIR2, HIGH);
analogWrite(MOTOR_PWM, 200);
bluetoothChat.send("Motor running reverse");
} else if (cmd == "STOP") {
analogWrite(MOTOR_PWM, 0);
bluetoothChat.send("Motor stopped");
} else if (cmd.startsWith("SPEED ")) {
int speed = cmd.substring(6).toInt();
speed = constrain(speed, 0, 255);
analogWrite(MOTOR_PWM, speed);
bluetoothChat.send("Motor speed: " + String(speed));
}
});
}
| Fonctionnalité | BLE (Esp32BLE_Chat) | Bluetooth Classique (Esp32Bluetooth_Chat) |
| Support iOS | ✓ Oui | ✗ Non |
| Support Android | ✓ Oui | ✓ Oui |
| Consommation | Faible | Plus élevée |
| Portée | ~30-100m | ~10-100m |
| Débit de données | Plus faible | Plus élevé |
| Appairage requis | Non (connexion auto) | Oui (appairage manuel) |
| Idéal pour | Alimenté par batterie, multiplateforme | Haut débit, Android uniquement |
1. Impossible de trouver l'appareil dans l'application
Assurez-vous que l'ESP32 est alimenté et que le sketch est téléversé
Pour BLE : Assurez-vous que Bluetooth et Localisation de votre téléphone sont activés
Pour Bluetooth Classique : Appairez d'abord l'appareil dans les paramètres Bluetooth du téléphone
Vérifiez que le schéma de partition correct est sélectionné (Huge APP)
2. Les messages n'apparaissent pas dans l'application
Vérifiez le statut de connexion Bluetooth dans l'application
Vérifiez la connexion dans le Moniteur Série
Assurez-vous que les messages sont envoyés avec bluetoothChat.send()
Essayez de vous déconnecter et vous reconnecter
3. Les messages d'écho ne fonctionnent pas
Vérifiez que le callback onChatMessage() est configuré correctement
Vérifiez le Moniteur Série pour les messages reçus
Assurez-vous que l'écran de l'application de chat est sélectionné dans l'application mobile
4. La connexion se coupe fréquemment
Rapprochez-vous de l'ESP32 (réduire la distance)
Pour BLE : Vérifiez les interférences d'autres appareils BLE
Pour Bluetooth Classique : Assurez-vous d'une alimentation stable de l'ESP32
Vérifiez le Moniteur Série pour les messages de déconnexion/reconnexion
5. Le pont Serial-to-Bluetooth ne fonctionne pas
Assurez-vous que le débit du Moniteur Série est 115200
Réglez la fin de ligne sur "Newline" dans le Moniteur Série
Vérifiez que bluetooth.isConnected() retourne true
Vérifiez que le code Serial.available() est dans loop()
6. Sketch trop volumineux / pas assez d'espace
Dans Arduino IDE, allez dans Outils > Schéma de partition et sélectionnez "Huge APP (3MB No OTA/1MB SPIFFS)" ou "No OTA (Large APP)"
Le schéma de partition par défaut ne fournit que ~1,2MB pour le code d'application, ce qui n'est pas suffisant pour les bibliothèques Bluetooth
Ce paramètre donne ~3MB en sacrifiant la partition OTA (mise à jour par voie hertzienne)
Ajoutez un débogage complet :
void debugChatMessage(const String& message) {
Serial.println("=== Chat Debug ===");
Serial.println("Message: " + message);
Serial.println("Length: " + String(message.length()));
Serial.println("Free Heap: " + String(ESP.getFreeHeap()));
Serial.println("==================");
}
Contrôle textuel de style commande vocale pour robots
Centre de commande domotique
Contrôle de relais sans fil avec retour textuel
Positionnement de servo à distance via chat
Interrogation de données de capteurs à distance
Vérification de l'état du système via commandes chat
Journalisation de données avec retour Bluetooth
Débogage et diagnostics à distance
Jeu de quiz ou de culture générale via chat Bluetooth
Tutoriels interactifs avec instructions étape par étape
Chatbot pour informations sur les projets ESP32
Outil de configuration à distance
Apprendre les bases de la communication Bluetooth
Pratiquer l'analyse de chaînes et la gestion des commandes
Comprendre les schémas de messagerie client-serveur
Construire des protocoles de communication personnalisés
Utilisez Chat pour les commandes et Monitor pour la sortie continue :
bluetoothChat.onChatMessage([](const String& message) {
if (message.equalsIgnoreCase("start")) {
monitoring = true;
bluetoothChat.send("Monitoring started");
} else if (message.equalsIgnoreCase("stop")) {
monitoring = false;
bluetoothChat.send("Monitoring stopped");
}
});
if (monitoring) {
bluetoothMonitor.send("Sensor: " + String(analogRead(34)));
}
Utilisez Chat pour définir des préréglages de curseur et Slider pour le contrôle fin :
bluetoothChat.onChatMessage([](const String& message) {
if (message.equalsIgnoreCase("preset1")) {
currentSlider1 = 25;
currentSlider2 = 75;
bluetoothSlider.send(currentSlider1, currentSlider2);
bluetoothChat.send("Applied Preset 1: 25%, 75%");
} else if (message.equalsIgnoreCase("preset2")) {
currentSlider1 = 50;
currentSlider2 = 50;
bluetoothSlider.send(currentSlider1, currentSlider2);
bluetoothChat.send("Applied Preset 2: 50%, 50%");
}
});
Après avoir maîtrisé l'exemple de chat Bluetooth, essayez :
Moniteur Bluetooth - Pour la diffusion de données unidirectionnelle vers l'application
Curseur Bluetooth - Pour le contrôle de valeurs de type analogique
Broches numériques Bluetooth - Pour un contrôle discret marche/arrêt
Applications Bluetooth multiples - Combiner le chat avec d'autres contrôles
Pour une aide supplémentaire :
※ 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 !