🚀 Introduction
SchreinBluetoothManager est une bibliothèque Arduino avancée pour la gestion des modules Bluetooth HC-05 et HC-06. Elle offre une interface unifiée avec support complet des fonctionnalités spécifiques à chaque module.
Compatibilité
- HC-05 : Mode client et serveur, commandes AT complètes
- HC-06 : Mode serveur uniquement, commandes AT basiques
⭐ Fonctionnalités
- Gestion unifiée HC-05/HC-06
- Mode client et serveur (HC-05 seulement)
- Système de retry automatique avec backoff exponentiel
- Callbacks pour tous les événements
- Gestion d’erreurs robuste
- Configuration facile via méthodes dédiées
🔧 Installation
1. Inclusion des fichiers
#include "SchreinBluetoothManager.h"2. Déclaration du SoftwareSerial
SoftwareSerial btSerial(10, 11); // RX, TX3. Création de l’instance
SchreinBluetoothManager btManager(btSerial, SchreinBluetoothManager::Type::HC05, 9);🏁 Initialisation
Configuration de base
void setup() {
Serial.begin(9600);
btSerial.begin(9600);
// Configuration du module
if (btManager.beginATMode()) {
Serial.println("Mode AT activé avec succès");
// Récupération des informations du module
String mac = btManager.getMacAddress();
String name = btManager.getName();
String pin = btManager.getPin();
Serial.println("MAC: " + mac);
Serial.println("Nom: " + name);
Serial.println("PIN: " + pin);
btManager.endATMode();
}
}⚙️ Configuration des Modules
Mode Serveur (Recommandé pour HC-06)
bool setupServerMode() {
if (btManager.beginATMode()) {
bool success = btManager.configureServerMode() &&
btManager.configureServerIdentity("MonServeur", "1234") &&
btManager.configureServerCommunication(9600);
btManager.endATMode();
btManager.setMode(SchreinBluetoothManager::Mode::SERVER);
return success;
}
return false;
}Mode Client (HC-05 seulement)
bool setupClientMode(String serverMac) {
if (!btManager.supportsClientMode()) {
Serial.println("Module ne supporte pas le mode client");
return false;
}
if (btManager.beginATMode()) {
bool success = btManager.configureClientMode(serverMac) &&
btManager.configureClientIdentity("1234") &&
btManager.configureClientCommunication(9600);
btManager.endATMode();
btManager.setMode(SchreinBluetoothManager::Mode::CLIENT);
return success;
}
return false;
}🔌 Gestion des Connexions
Connexion en mode client
void connectToDevice(String macAddress) {
// Avec retry automatique
btManager.configureRetry({
.enableConnectionRetry = true,
.maxConnectionRetries = 5,
.connectionRetryDelay = 5000
});
if (btManager.connect(macAddress)) {
Serial.println("Connexion initiée");
}
}Déconnexion
void disconnectDevice() {
if (btManager.disconnect()) {
Serial.println("Déconnecté avec succès");
}
}Vérification de l’état
void checkStatus() {
if (btManager.isConnected()) {
Serial.println("Connecté à: " + btManager.getConnectedDeviceAddress());
} else {
Serial.println("Non connecté");
Serial.println("État: " + String((int)btManager.getConnectionState()));
}
}📨 Envoi et Réception de Données
Envoi de données
void sendData(String data) {
// Envoi simple
if (btManager.sendRawData(data)) {
Serial.println("Données envoyées");
}
// Envoi avec retry
if (btManager.sendRawDataWithRetry(data)) {
Serial.println("Données envoyées avec retry");
}
}Réception de données
// Dans setup()
btManager.onDataReceived([](String data) {
Serial.println("Données reçues: " + data);
});
// Dans loop()
btManager.loop();🔄 Système de Retry
Configuration avancée du retry
void setupRetrySystem() {
SchreinBluetoothManager::RetryConfig config = {
.enableConnectionRetry = true,
.enableSendRetry = true,
.enableATCommandRetry = true,
.maxConnectionRetries = 5,
.maxSendRetries = 3,
.maxATRetries = 5,
.connectionRetryDelay = 5000,
.sendRetryDelay = 1000,
.atRetryDelay = 2000,
.useExponentialBackoff = true,
.backoffMultiplier = 2.0,
.maxBackoffDelay = 30000
};
btManager.configureRetry(config);
}Monitoring du retry
void monitorRetry() {
if (btManager.isRetrying()) {
Serial.println("Retry en cours...");
Serial.println("Tentative: " + String(btManager.getCurrentRetryAttempt()) +
"/" + String(btManager.getMaxRetryAttempts()));
Serial.println("Prochaine tentative dans: " +
String(btManager.getNextRetryTime() - millis()) + "ms");
Serial.println(btManager.getRetryStatus());
}
}📞 Callbacks et Événements
Configuration complète des callbacks
void setupCallbacks() {
// Connexion réussie
btManager.onConnect([](String message) {
Serial.println("✅ " + message);
});
// Déconnexion
btManager.onDisconnect([](String message) {
Serial.println("❌ " + message);
});
// Erreur
btManager.onError([](String error) {
Serial.println("💥 Erreur: " + error);
});
// Succès d'opération
btManager.onSuccess([](String message) {
Serial.println("✅ " + message);
});
// Données reçues
btManager.onDataReceived([](String data) {
Serial.println("📨 Données: " + data);
});
// Tentative de retry
btManager.onRetryAttempt([](uint8_t attempt, uint8_t maxAttempts) {
Serial.println("🔄 Retry " + String(attempt) + "/" + String(maxAttempts));
});
// Échec des retry
btManager.onRetryFailed([](String reason) {
Serial.println("💥 Échec retry: " + reason);
});
// Succès après retry
btManager.onRetrySuccess([](uint8_t totalAttempts) {
Serial.println("✅ Succès après " + String(totalAttempts) + " tentatives");
});
}🎯 Exemples Complets
Exemple 1: Serveur Bluetooth Simple
#include <SoftwareSerial.h>
#include "SchreinBluetoothManager.h"
SoftwareSerial btSerial(10, 11);
SchreinBluetoothManager btManager(btSerial, SchreinBluetoothManager::Type::HC06);
void setup() {
Serial.begin(9600);
btSerial.begin(9600);
Serial.println("Configuration du serveur Bluetooth...");
// Configuration callbacks
setupCallbacks();
// Configuration mode serveur
if (btManager.beginATMode()) {
btManager.configureServerIdentity("MonServeurBT", "1234");
btManager.endATMode();
}
btManager.setMode(SchreinBluetoothManager::Mode::SERVER);
Serial.println("Serveur Bluetooth prêt");
}
void loop() {
btManager.loop();
// Envoyer des données toutes les 5 secondes
static unsigned long lastSend = 0;
if (millis() - lastSend > 5000 && btManager.isConnected()) {
btManager.sendRawData("Hello from Server!");
lastSend = millis();
}
}Exemple 2: Client Bluetooth Avancé
#include <SoftwareSerial.h>
#include "SchreinBluetoothManager.h"
SoftwareSerial btSerial(10, 11);
SchreinBluetoothManager btManager(btSerial, SchreinBluetoothManager::Type::HC05, 9);
String serverMac = "12:34:56:78:9A:BC";
void setup() {
Serial.begin(9600);
btSerial.begin(9600);
Serial.println("Configuration du client Bluetooth...");
// Configuration callbacks
setupCallbacks();
// Configuration retry avancée
SchreinBluetoothManager::RetryConfig config = {
.enableConnectionRetry = true,
.enableSendRetry = true,
.maxConnectionRetries = 3,
.connectionRetryDelay = 5000,
.useExponentialBackoff = true
};
btManager.configureRetry(config);
// Configuration mode client
if (btManager.beginATMode()) {
btManager.configureClientMode(serverMac);
btManager.configureClientIdentity("1234");
btManager.endATMode();
}
btManager.setMode(SchreinBluetoothManager::Mode::CLIENT);
// Connexion automatique
btManager.connect(serverMac);
}
void loop() {
btManager.loop();
// Monitoring de l'état
static unsigned long lastStatus = 0;
if (millis() - lastStatus > 2000) {
if (btManager.isRetrying()) {
Serial.println(btManager.getRetryStatus());
}
lastStatus = millis();
}
// Envoyer commande si connecté
if (btManager.isConnected() && Serial.available()) {
String command = Serial.readString();
command.trim();
btManager.sendRawDataWithRetry(command);
}
}Exemple 3: Gestion Double Mode
// Module qui peut switcher entre client et serveur (HC-05 seulement)
void switchMode(bool clientMode, String targetMac = "") {
btManager.disconnect();
if (clientMode && btManager.supportsClientMode()) {
if (btManager.beginATMode()) {
btManager.configureClientMode(targetMac);
btManager.endATMode();
}
btManager.setMode(SchreinBluetoothManager::Mode::CLIENT);
btManager.connect(targetMac);
} else {
if (btManager.beginATMode()) {
btManager.configureServerMode();
btManager.endATMode();
}
btManager.setMode(SchreinBluetoothManager::Mode::SERVER);
}
}🐛 Dépannage
Problèmes Courants

- Module ne répond pas aux commandes AT
- Vérifier le câblage VCC, GND, TX, RX
- Vérifier que le pin KEY est correctement connecté (HC-05)
- Essayer de débrancher/rebrancher l’alimentation
- Puis reset le carte
- Échec de connexion en mode client
- Vérifier l’adresse MAC du serveur
- S’assurer que le serveur est en mode visible
- Vérifier que les PIN correspondent
- Données non reçues
- Vérifier que
btManager.loop()est appelé régulièrement - S’assurer que les callbacks sont bien configurés
- Vérifier le baud rate des deux modules
- Vérifier que
Méthodes de Debug
void debugModule() {
Serial.println("=== DEBUG MODULE BLUETOOTH ===");
Serial.println("Type: " + btManager.getModuleTypeString());
Serial.println("Mode: " + String(btManager.getMode() == SchreinBluetoothManager::Mode::CLIENT ? "CLIENT" : "SERVER"));
Serial.println("État: " + String((int)btManager.getConnectionState()));
Serial.println("Connecté: " + String(btManager.isConnected() ? "OUI" : "NON"));
Serial.println("Retry actif: " + String(btManager.isRetrying() ? "OUI" : "NON"));
if (btManager.isRetrying()) {
Serial.println(btManager.getRetryStatus());
}
// Test commandes AT
if (btManager.beginATMode()) {
Serial.println("Mode AT: OK");
btManager.Status();
btManager.endATMode();
} else {
Serial.println("Mode AT: ÉCHEC");
}
}📚 Résumé des Méthodes Principales
Gestion Connexion
connect(String mac)– Connexion avec retryforceConnect(String mac)– Connexion forcéedisconnect()– DéconnexionisConnected()– Vérification état
Configuration
configureServerMode()– Mode serveurconfigureClientMode(String mac)– Mode clientsetName(String name)– Changement nomsetPin(String pin)– Changement PIN
Données
sendRawData(String data)– Envoi simplesendRawDataWithRetry(String data)– Envoi avec retryloop()– Traitement des données entrantes
Informations
getMacAddress()– Adresse MACgetName()– Nom du modulegetPin()– PIN de pairinggetModuleTypeString()– Type de module
Cette documentation couvre l’ensemble des fonctionnalités de la bibliothèque SchreinBluetoothManager. Pour toute question supplémentaire, n’hésitez pas à consulter les exemples fournis ou à examiner le code source directement.