Le Bluetooth Low Energy (BLE) est un puissant moyen de communication sans fil entre votre CodeCell et d'autres appareils tels que les smartphones, les tablettes et même d'autres microcontrôleurs. Dans ce guide, nous allons configurer le BLE sur CodeCell, lui permettre de recevoir des commandes d'un client BLE et contrôler ses LED RVB en fonction des données reçues.
Le BLE est une version économe en énergie du Bluetooth qui permet aux appareils d'échanger de petites quantités de données avec une faible consommation d'énergie. Voici ses concepts clés :
Avant de commencer les tests, vous devez télécharger une application pour envoyer des données BLE sur votre smartphone. Commencez donc par la télécharger. une application de scanner BLE :
Pour que CodeCell se présente comme un appareil BLE , nous devons initialiser BLE, créer un service et une caractéristique, et commencer à faire de la publicité .
Ce code crée un serveur BLE , annonce un service et configure une caractéristique lisible et écrivable par un appareil connecté. Le CodeCell recevra la caractéristique du bouton et contrôlera sa LED RVB intégrée :
#include <BLEDevice.h> #include <BLEUtils.h> #include <BLEServer.h> #include <BLE2902.h> #include <CodeCell.h> CodeCell myCodeCell; BLECharacteristic *pButtonCharacteristic = NULL; #define BUTTON_UUID "abcd1234-abcd-1234-abcd-123456789012" class MyServerCallbacks : public BLEServerCallbacks { void onConnect(BLEServer *pServer) override { Serial.println("BLE Connected"); delay(1000); } void onDisconnect(BLEServer *pServer) override { Serial.println("BLE Disconnected"); delay(500); BLEDevice::startAdvertising(); // Restart advertising } }; // Callback class for handling button writes class ButtonCallback : public BLECharacteristicCallbacks { void onWrite(BLECharacteristic *pCharacteristic) override { String value = pCharacteristic->getValue(); if (value.length() > 0) { int buttonState = value[0]; Serial.print("Button State: ");
Serial.println(boutonÉtat); si (buttonState == 1) { myCodeCell.LED(255, 0, 0); // LED rouge lorsque le bouton est à 1 } autre { myCodeCell.LED(0, 255, 0); // LED verte lorsque le bouton n'est pas à 1 } } } }; void setup() { Serial.begin(115200); myCodeCell.Init(LIGHT); // Initialise le capteur de lumière BLEDevice::init("CodeCell_BLE"); // Définir le nom du périphérique BLE Serveur BLE *bleServer = BLEDevice::createServer(); bleServer->setCallbacks(nouveau MyServerCallbacks()); BLEService *bleService = bleServer->createService(BLEUUID("12345678-1234-5678-1234-56789abcdef0")); // Créer une caractéristique BLE pour l'état du bouton pButtonCharacteristic = bleService->createCharacteristic( BOUTON_UUID, BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_WRITE ); pButtonCharacteristic->addDescriptor(nouveau BLE2902()); pButtonCharacteristic->setCallbacks(nouveau ButtonCallback()); bleService->start(); BLEAdvertising *pAdvertising = BLEDevice::getAdvertising(); pAdvertising->addServiceUUID("12345678-1234-5678-1234-56789abcdef0"); BLEDevice::startAdvertising(); } boucle vide() { // Pas besoin de vérifier en permanence, les mises à jour LED ne se font que lors de l'écriture BLE }
"CodeCell_BLE"
."CodeCell_BLE"
dans l'application BLE Scanner.
BUTTON_UUID
) et envoyez la valeur :
1
→ La LED devient rouge 🔴0
→ la LED devient verte 🟢Ensuite, nous allons définir une nouvelle caractéristique BLE qui permet à CodeCell d' envoyer des valeurs de capteur à un appareil connecté .
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
#include <BLE2902.h>
#include <CodeCell.h>
CodeCell myCodeCell;
BLECharacteristic *pSensorCharacteristic = NULL;
#define SENSOR_UUID "abcd5678-abcd-5678-abcd-56789abcdef0"
class MyServerCallbacks : public BLEServerCallbacks {
void onConnect(BLEServer *pServer) override {
Serial.println("BLE Connected");
delay(1000);
}
void onDisconnect(BLEServer *pServer) override {
Serial.println("BLE déconnecté");
délai(500);
BLEDevice::startAdvertising(); // Redémarrer la publicité
}
};
configuration vide() {
Serial.begin(115200);
myCodeCell.Init(LIGHT); // Initialiser le capteur de lumière et de proximité
BLEDevice::init("CodeCell_BLE"); // Nommer le périphérique BLE
Serveur BLE *bleServer = BLEDevice::createServer();
bleServer->setCallbacks(nouveau MyServerCallbacks());
BLEService *bleService = bleServer->createService(BLEUUID("12345678-1234-5678-1234-56789abcdef0"));
// Créer une caractéristique BLE pour les données du capteur
pSensorCharacteristic = bleService->createCharacteristic(
CAPTEUR_UUID,
BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY
);
pSensorCharacteristic->addDescriptor(nouveau BLE2902());
bleService->start();
BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
pAdvertising->addServiceUUID("12345678-1234-5678-1234-56789abcdef0");
BLEDevice::startAdvertising();
}
boucle vide() {
if (myCodeCell.Run(10)) { // Lecture toutes les 100 ms (10 Hz)
uint16_t proximity = myCodeCell.Light_ProximityRead();
Serial.print("Proximité : ");
Serial.println(proximité);
// Convertir la valeur de proximité en chaîne et l'envoyer via BLE
Chaîne de proximitéStr = String(proximité);
pSensorCharacteristic->setValue(proximityStr.c_str());
pSensorCharacteristic->notify(); // Notifier l'appareil connecté
}
}
SENSOR_UUID
) que les clients peuvent lire et obtenir des mises à jour en temps réel :
Nous convertissons le nombre en chaîne et l'envoyons au client BLE.
Maintenant que CodeCell envoie des données de capteur de proximité via BLE , vous pouvez les visualiser sur un téléphone .
"CodeCell_BLE"
et connectez-vousSENSOR_UUID
)
Déplacez un objet près du capteur et voyez comment les valeurs changent !
Maintenant que vous pouvez contrôler CodeCell via BLE, essayez :
Soyez le premier informé des nouveaux projets et bénéficiez d'offres intéressantes !
© 2025 Microbots.