Exemple applications Bluetooth multiples Arduino Nano ESP32 - Tutoriel BLE tout-en-un

Vue d'ensemble

Cet exemple démontre l'exécution de 9 widgets d'application Bluetooth simultanément sur un seul Arduino Nano ESP32 en utilisant le BLE. En utilisant le BLE (Bluetooth Low Energy), le sketch combine Moniteur, Chat, Curseur, Joystick, Température, Traceur, Tableau, Jauge analogique et Rotateur dans un seul sketch. Tous les widgets partagent une seule connexion BLE et peuvent interagir entre eux. Convient aux tableaux de bord complets, projets IoT complexes et apprentissage de plusieurs types de widgets à la fois.

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 applications Bluetooth multiples Arduino Nano ESP32 - Tutoriel BLE tout-en-un

Fonctionnalités

  • 9 widgets en un : Moniteur, Chat, Curseur, Joystick, Température, Traceur, Tableau, Jauge analogique, Rotateur
  • Interaction entre widgets : Le curseur met à jour la jauge et le tableau ; le joystick met à jour le tableau, etc.
  • Connexion BLE unique : Tous les widgets partagent une connexion efficacement
  • Mises à jour en temps réel : Chaque widget se met à jour à son propre intervalle configuré
  • Tableau de bord complet : Consultez toutes les données depuis un seul appareil
  • Support Android et iOS : Le BLE est compatible avec les deux plateformes
  • Pas de couplage requis : Le BLE se connecte sans couplage manuel

Applications incluses

ApplicationDescriptionIntervalle de mise à jour
MoniteurAffichage de statut basé sur du texte5 secondes
ChatMessagerie texte bidirectionnelleÀ la demande
CurseurContrôle de valeur (0-255)Au changement
JoystickContrôle de position 2DAu changement
TempératureJauge de température (-10 à 50°C)2 secondes
TraceurGraphique de données en temps réel100ms
TableauDonnées structurées (10 lignes)5 secondes
Jauge analogiqueJauge à cadran (0-100%)3 secondes
RotateurContrôle d'angle (continu)Au changement

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_MultipleApps, ou collez le code dans l'éditeur.
/* * DIYables Bluetooth Library - ESP32 BLE Multiple Apps Example * Works with DIYables Bluetooth STEM app on Android and iOS * * This example demonstrates how to use multiple Bluetooth apps simultaneously: * - Monitor, Chat, Slider, Joystick, Temperature, Plotter, * Table, Analog Gauge, Rotator * * Tutorial: https://diyables.io/bluetooth-app * Author: DIYables */ #include <DIYables_BluetoothServer.h> #include <DIYables_BluetoothMonitor.h> #include <DIYables_BluetoothChat.h> #include <DIYables_BluetoothSlider.h> #include <DIYables_BluetoothJoystick.h> #include <DIYables_BluetoothTemperature.h> #include <DIYables_BluetoothPlotter.h> #include <DIYables_BluetoothTable.h> #include <DIYables_BluetoothAnalogGauge.h> #include <DIYables_BluetoothRotator.h> #include <platforms/DIYables_Esp32BLE.h> // BLE Configuration const char* DEVICE_NAME = "ESP32BLE Multi-App"; 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 app instances DIYables_BluetoothMonitor bluetoothMonitor; DIYables_BluetoothChat bluetoothChat; DIYables_BluetoothSlider bluetoothSlider(0, 255, 1); DIYables_BluetoothJoystick bluetoothJoystick(false, 5); DIYables_BluetoothTemperature bluetoothTemperature(-10.0, 50.0, "°C"); DIYables_BluetoothPlotter bluetoothPlotter; DIYables_BluetoothTable bluetoothTable; DIYables_BluetoothAnalogGauge bluetoothGauge(0.0, 100.0, "%"); DIYables_BluetoothRotator bluetoothRotator(ROTATOR_MODE_CONTINUOUS); // State variables int currentSlider1 = 128; int currentSlider2 = 64; int currentJoystickX = 0; int currentJoystickY = 0; float currentTemperature = 25.0; float currentGaugeValue = 50.0; float currentRotatorAngle = 0.0; int messageCount = 0; // Timing variables unsigned long lastMonitorUpdate = 0; unsigned long lastTempUpdate = 0; unsigned long lastPlotUpdate = 0; unsigned long lastTableUpdate = 0; unsigned long lastGaugeUpdate = 0; float plotPhase = 0; void setup() { Serial.begin(115200); delay(1000); Serial.println("DIYables Bluetooth - ESP32 BLE Multiple Apps Example"); pinMode(2, OUTPUT); digitalWrite(2, LOW); bluetoothServer.begin(); bluetoothServer.addApp(&bluetoothMonitor); bluetoothServer.addApp(&bluetoothChat); bluetoothServer.addApp(&bluetoothSlider); bluetoothServer.addApp(&bluetoothJoystick); bluetoothServer.addApp(&bluetoothTemperature); bluetoothServer.addApp(&bluetoothPlotter); bluetoothServer.addApp(&bluetoothTable); bluetoothServer.addApp(&bluetoothGauge); bluetoothServer.addApp(&bluetoothRotator); Serial.print("Registered apps: "); Serial.println(bluetoothServer.getAppCount()); bluetoothPlotter.setPlotTitle("Sensor Data"); bluetoothPlotter.setAxisLabels("Time", "Value"); bluetoothPlotter.setYAxisRange(-1.5, 1.5); bluetoothPlotter.setMaxSamples(100); bluetoothPlotter.setLegendLabels("Sine", "Cosine", "Random"); bluetoothTable.addRow("Status"); bluetoothTable.addRow("Uptime"); bluetoothTable.addRow("Slider 1"); bluetoothTable.addRow("Slider 2"); bluetoothTable.addRow("Joystick X"); bluetoothTable.addRow("Joystick Y"); bluetoothTable.addRow("Temperature"); bluetoothTable.addRow("Gauge Value"); bluetoothTable.addRow("Rotator Angle"); bluetoothTable.addRow("Messages"); setupCallbacks(); Serial.println("Waiting for Bluetooth connection..."); } void setupCallbacks() { bluetoothServer.setOnConnected([]() { Serial.println("Bluetooth connected!"); digitalWrite(2, HIGH); bluetoothMonitor.send("=== ESP32 BLE Multi-App Connected ==="); bluetoothMonitor.send("All apps are ready!"); bluetoothChat.send("Hello! ESP32 BLE Multi-App is connected."); }); bluetoothServer.setOnDisconnected([]() { Serial.println("Bluetooth disconnected!"); digitalWrite(2, LOW); }); bluetoothMonitor.onMonitorMessage([](const String& message) { Serial.println("Monitor cmd: " + message); if (message == "HELP") { bluetoothMonitor.send("Commands: STATUS, HELP, LED_ON, LED_OFF, HEAP"); } else if (message == "STATUS") { bluetoothMonitor.send("Slider1=" + String(currentSlider1) + " Slider2=" + String(currentSlider2)); bluetoothMonitor.send("Joystick X=" + String(currentJoystickX) + " Y=" + String(currentJoystickY)); bluetoothMonitor.send("Temp=" + String(currentTemperature, 1) + "°C"); bluetoothMonitor.send("Gauge=" + String(currentGaugeValue, 1) + "%"); bluetoothMonitor.send("Rotator=" + String(currentRotatorAngle, 0) + "°"); } else if (message == "LED_ON") { digitalWrite(2, HIGH); bluetoothMonitor.send("LED turned ON"); } else if (message == "LED_OFF") { digitalWrite(2, LOW); bluetoothMonitor.send("LED turned OFF"); } else if (message == "HEAP") { bluetoothMonitor.send("Free heap: " + String(ESP.getFreeHeap()) + " bytes"); } else { bluetoothMonitor.send("Unknown: " + message + " (type HELP)"); } }); bluetoothChat.onChatMessage([](const String& message) { Serial.println("Chat: " + message); bluetoothChat.send("Echo: " + message); if (message.equalsIgnoreCase("ping")) { bluetoothChat.send("pong!"); } else if (message.equalsIgnoreCase("status")) { bluetoothChat.send("Uptime: " + String(millis() / 1000) + "s, Apps: " + String(bluetoothServer.getAppCount())); } }); bluetoothSlider.onSliderValue([](int slider1, int slider2) { currentSlider1 = slider1; currentSlider2 = slider2; Serial.print("Slider 1: "); Serial.print(slider1); Serial.print(", Slider 2: "); Serial.println(slider2); currentGaugeValue = map(slider1, 0, 255, 0, 100); bluetoothGauge.send(currentGaugeValue); bluetoothTable.sendValueUpdate("Slider 1", String(slider1)); bluetoothTable.sendValueUpdate("Slider 2", String(slider2)); bluetoothTable.sendValueUpdate("Gauge Value", String(currentGaugeValue, 1) + "%"); }); bluetoothSlider.onGetConfig([]() { bluetoothSlider.send(currentSlider1, currentSlider2); }); bluetoothJoystick.onJoystickValue([](int x, int y) { currentJoystickX = x; currentJoystickY = y; Serial.print("Joystick X: "); Serial.print(x); Serial.print(", Y: "); Serial.println(y); bluetoothTable.sendValueUpdate("Joystick X", String(x)); bluetoothTable.sendValueUpdate("Joystick Y", String(y)); }); bluetoothJoystick.onGetConfig([]() { bluetoothJoystick.send(currentJoystickX, currentJoystickY); }); bluetoothTemperature.onTemperatureRequest([]() { bluetoothTemperature.send(currentTemperature); }); bluetoothPlotter.onDataRequest([]() { Serial.println("Plotter data requested"); }); bluetoothTable.onDataRequest([]() { Serial.println("Table data requested"); bluetoothTable.sendTableStructure(); updateAllTableValues(); }); bluetoothGauge.onValueRequest([]() { bluetoothGauge.send(currentGaugeValue); }); bluetoothRotator.onRotatorAngle([](float angle) { currentRotatorAngle = angle; Serial.print("Rotator: "); Serial.print(angle); Serial.println("°"); bluetoothTable.sendValueUpdate("Rotator Angle", String(angle, 0) + "°"); }); } void updateAllTableValues() { bluetoothTable.sendValueUpdate("Status", "Running"); unsigned long uptime = millis() / 1000; String uptimeStr; if (uptime >= 60) { uptimeStr = String(uptime / 60) + "m " + String(uptime % 60) + "s"; } else { uptimeStr = String(uptime) + "s"; } bluetoothTable.sendValueUpdate("Uptime", uptimeStr); bluetoothTable.sendValueUpdate("Slider 1", String(currentSlider1)); bluetoothTable.sendValueUpdate("Slider 2", String(currentSlider2)); bluetoothTable.sendValueUpdate("Joystick X", String(currentJoystickX)); bluetoothTable.sendValueUpdate("Joystick Y", String(currentJoystickY)); bluetoothTable.sendValueUpdate("Temperature", String(currentTemperature, 1) + " °C"); bluetoothTable.sendValueUpdate("Gauge Value", String(currentGaugeValue, 1) + "%"); bluetoothTable.sendValueUpdate("Rotator Angle", String(currentRotatorAngle, 0) + "°"); bluetoothTable.sendValueUpdate("Messages", String(messageCount)); } void loop() { bluetoothServer.loop(); if (!bluetooth.isConnected()) { delay(10); return; } if (millis() - lastMonitorUpdate >= 5000) { lastMonitorUpdate = millis(); messageCount++; bluetoothMonitor.send("[INFO] Heartbeat #" + String(messageCount) + " - Uptime: " + String(millis() / 1000) + "s"); } if (millis() - lastTempUpdate >= 2000) { lastTempUpdate = millis(); static float tempOffset = 0; tempOffset += random(-10, 11) / 10.0; if (tempOffset > 5.0) tempOffset = 5.0; if (tempOffset < -5.0) tempOffset = -5.0; currentTemperature = 25.0 + tempOffset; bluetoothTemperature.send(currentTemperature); bluetoothTable.sendValueUpdate("Temperature", String(currentTemperature, 1) + " °C"); } if (millis() - lastPlotUpdate >= 100) { lastPlotUpdate = millis(); float sine = sin(plotPhase); float cosine = cos(plotPhase); float noise = random(-50, 51) / 100.0; bluetoothPlotter.send(sine, cosine, noise); plotPhase += 0.1; if (plotPhase > 2 * PI) plotPhase = 0; } if (millis() - lastTableUpdate >= 5000) { lastTableUpdate = millis(); unsigned long uptime = millis() / 1000; String uptimeStr; if (uptime >= 60) { uptimeStr = String(uptime / 60) + "m " + String(uptime % 60) + "s"; } else { uptimeStr = String(uptime) + "s"; } bluetoothTable.sendValueUpdate("Uptime", uptimeStr); bluetoothTable.sendValueUpdate("Messages", String(messageCount)); } if (millis() - lastGaugeUpdate >= 3000) { lastGaugeUpdate = millis(); float sensorValue = 50.0 + 30.0 * sin(millis() / 10000.0); currentGaugeValue = sensorValue; bluetoothGauge.send(currentGaugeValue); bluetoothTable.sendValueUpdate("Gauge Value", String(currentGaugeValue, 1) + "%"); } 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 - Multiple Apps 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 "DIYables Multi-App" dans les résultats du scan.
  • Après la connexion, l'écran d'accueil affiche tous les widgets d'application disponibles. Les 9 widgets initialisés dans le sketch Arduino répondront et fonctionneront — les autres widgets sur l'écran d'accueil apparaîtront mais ne fonctionneront pas avec ce sketch.
Application Bluetooth DIYables - Écran d'accueil avec plusieurs applications

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.

  • Ouvrez l'un des widgets suivants pour interagir avec l'Arduino : Moniteur, Chat, Curseur, Joystick, Température, Traceur, Tableau, Jauge analogique, Rotateur.
  • Passez librement entre les widgets — tous partagent la même connexion BLE.

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! Monitor: System running, uptime: 5s Chat message: Hello Slider value: 128 Joystick: X=0.50, Y=-0.30 Temperature: 22.50 °C
Ln 11, Col 1
Arduino Nano ESP32 on COM15
2

Comment ça fonctionne

Initialisation des applications

Chaque widget est créé avec sa propre configuration et ses callbacks :

// All apps share the same Bluetooth server DIYables_BluetoothServer bluetoothServer(bluetooth); // Create individual apps DIYables_BluetoothMonitor bluetoothMonitor(bluetoothServer); DIYables_BluetoothChat bluetoothChat(bluetoothServer); DIYables_BluetoothSlider bluetoothSlider(bluetoothServer, 0, 255, 1); DIYables_BluetoothJoystick bluetoothJoystick(bluetoothServer, false, 5); DIYables_BluetoothTemperature bluetoothTemp(bluetoothServer, -10.0, 50.0, "°C"); DIYables_BluetoothPlotter bluetoothPlotter(bluetoothServer); DIYables_BluetoothTable bluetoothTable(bluetoothServer); DIYables_BluetoothAnalogGauge bluetoothGauge(bluetoothServer, 0.0, 100.0, "%"); DIYables_BluetoothRotator bluetoothRotator(bluetoothServer, ROTATOR_MODE_CONTINUOUS);

Interaction entre applications

Les applications peuvent interagir entre elles. Lorsqu'un widget reçoit une entrée, il peut mettre à jour d'autres widgets :

// Slider updates gauge and table bluetoothSlider.onSliderValue([](int value) { float percent = value * 100.0 / 255.0; bluetoothGauge.send(percent); bluetoothTable.sendValueUpdate("Slider 1", String(value)); }); // Joystick updates table bluetoothJoystick.onJoystickValue([](float x, float y) { bluetoothTable.sendValueUpdate("Joystick X", String(x, 2)); bluetoothTable.sendValueUpdate("Joystick Y", String(y, 2)); }); // Rotator updates table bluetoothRotator.onRotatorAngle([](float angle) { bluetoothTable.sendValueUpdate("Rotator Angle", String(angle, 1) + "°"); });

Synchronisation des mises à jour

Chaque application a son propre intervalle de mise à jour pour équilibrer la réactivité avec la bande passante BLE :

void loop() { bluetoothServer.loop(); unsigned long now = millis(); // Plotter: fastest updates (100ms) if (now - lastPlotterTime >= 100) { ... } // Temperature: every 2 seconds if (now - lastTempTime >= 2000) { ... } // Gauge: every 3 seconds if (now - lastGaugeTime >= 3000) { ... } // Monitor, Table: every 5 seconds if (now - lastMonitorTime >= 5000) { ... } if (now - lastTableTime >= 5000) { ... } }

Structure du tableau

L'exemple crée un tableau avec 10 lignes affichant les données de toutes les applications :

LigneÉtiquetteDescription
0StatutStatut de connexion/fonctionnement
1Durée de fonctionnementTemps depuis le démarrage
2Curseur 1Valeur actuelle du curseur
3Curseur 2Valeur du deuxième curseur
4Joystick XPosition X du joystick
5Joystick YPosition Y du joystick
6TempératureTempérature actuelle
7Valeur jaugePourcentage actuel de la jauge
8Angle rotateurAngle de rotation actuel
9MessagesNombre de messages de chat

Personnalisation créative - Adaptez le code à votre projet

Ajouter ou supprimer des widgets

N'incluez que les widgets nécessaires à votre projet :

// Minimal setup: just Monitor and Slider DIYables_BluetoothMonitor bluetoothMonitor(bluetoothServer); DIYables_BluetoothSlider bluetoothSlider(bluetoothServer, 0, 100, 1); // That's it! The app will only show these two

Logique personnalisée entre applications

// Example: Temperature alarm via Monitor void checkTemperatureAlarm(float temp) { if (temp > 40.0) { bluetoothMonitor.send("⚠️ HIGH TEMP ALERT: " + String(temp, 1) + "°C"); bluetoothChat.send("Temperature alarm triggered!"); } }

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

2. Certains widgets ne s'affichent pas dans le menu

  • Tous les widgets initialisés apparaîtront automatiquement
  • Vérifiez que chaque objet widget est correctement créé
  • L'application découvre les widgets disponibles depuis l'Arduino

3. Les mises à jour semblent lentes

  • Chaque widget a différents intervalles de mise à jour par conception
  • La bande passante BLE est limitée ; trop de mises à jour rapides peuvent causer une congestion
  • Réduisez la fréquence de mise à jour pour les widgets qui ne nécessitent pas de données en temps réel

4. Les mises à jour entre widgets ne fonctionnent pas

  • Vérifiez que les fonctions de callback sont correctement enregistrées
  • Vérifiez que les noms de lignes de tableau correspondent exactement (sensible à la casse)
  • Confirmez que l'objet widget cible est accessible dans la portée du callback

5. Problèmes de mémoire ou plantages

  • L'exécution de 9 widgets utilise une mémoire significative
  • Supprimez les widgets inutilisés pour libérer des ressources
  • Réduisez le nombre de lignes du tableau si nécessaire

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

Idées de projets

  • Tableau de bord IoT complet
  • Panneau de contrôle de robot (joystick + moniteur + curseurs)
  • Station météo (température + jauge + traceur + tableau)
  • Hub domotique (curseurs + broches + moniteur + chat)
  • Plateforme d'apprentissage STEM (toutes les applications pour l'expérimentation)

Prochaines étapes

Après avoir terminé l'exemple d'applications multiples, explorez chaque tutoriel individuel pour une compréhension approfondie :

  1. Chat Bluetooth — Détails de la messagerie
  2. Curseur Bluetooth — Détails du contrôle de valeur
  3. Traceur Bluetooth — Détails de la visualisation de données
  4. RTC Bluetooth — Synchronisation horaire avec le RTC matériel intégré

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 !