- Conditions préalables
- Matériaux nécessaires
- Matériel
- Obtenez votre adresse Bluetooth du serveur (adresse de la bande de fitness)
- Obtention du service et de l'UUID caractéristique du serveur
- Programmation de l'ESP32 pour qu'il agisse en tant que client pour l'application de commutateur de proximité
- Travail et test
Que c'est cool d'allumer automatiquement les lumières dès que vous entrez dans votre maison et de l'éteindre à nouveau lorsque vous partez! Oui, une simple application peut le faire pour vous. Ici, dans ce projet, nous utiliserons ESP32 comme client BLE et le bracelet de fitness comme serveur BLE, donc chaque fois qu'une personne portant le bracelet de fitness entre dans la gamme ESP32 Bluetooth, l'ESP32 le détecte et allume la lumière. Tous les appareils Bluetooth dotés de capacités de serveur BLE peuvent être utilisés comme dispositif de déclenchement pour contrôler n'importe quel appareil ménager à l'aide d'ESP32.
Nous avons déjà exploré les fonctionnalités BLE (Bluetooth Low Energy) du module ESP32 et j'en suis plutôt ravi. Pour résumer, ce module dispose à la fois du Bluetooth classique et du Bluetooth Low Energy (BLE), le Bluetooth classique peut être utilisé pour transférer des chansons ou des fichiers et l'option BLE peut être utilisée pour des applications optimisées pour la batterie telles que les balises Bluetooth, les bandes de fitness, la proximité, etc. Il est également possible de l'utiliser comme un Bluetooth série comme les modules HC-05 ou HC-06 pour de simples projets de microcontrôleurs.
Comme vous le savez, l' ESP32 BLE peut fonctionner dans deux modes différents. Le premier est le mode serveur dont nous avons déjà parlé en utilisant le service GATT pour imiter un service d'indicateur de niveau de batterie. Dans cet exercice, l'ESP32 a agi en tant que serveur et notre téléphone mobile a agi en tant que client. Maintenant, exploitons l'ESP32 en tant que client et essayons de le connecter à d'autres serveurs BLE comme mon groupe de fitness.
Tous les serveurs BLE, y compris mon bracelet de fitness, sont en mode publicité constante, c'est-à-dire qu'ils peuvent toujours être découverts lorsqu'ils sont scannés par un client. En tirant parti de cette fonctionnalité, nous pouvons utiliser ces bandes de fitness comme interrupteur de proximité, ce qui signifie que ces bandes de fitness sont toujours liées à la main de l'utilisateur et en recherchant le bracelet, nous pouvons détecter si la personne est à portée. C'est exactement ce que nous allons faire dans cet article. Nous programmerons l'ESP32 pour qu'il agisse en tant que client BLE et continuerons à rechercher en permanence les appareils BLE; si nous trouvons la bande de fitness à portée, nous essaierons de nous y connecter et si la connexion est réussie, nous pouvons déclencher une ampoule en basculant l'une des broches GPIO sur l'ESP32. La méthode est fiable car chaque serveur BLE(fitness band) aura un identifiant matériel unique, donc aucun périphérique serveur BLE ne sera identique. Intéressant non? !!! Maintenant, allons construire
Conditions préalables
Dans cet article, je suppose que vous savez déjà comment utiliser la carte ESP32 avec Arduino IDE, sinon revenez au didacticiel ESP32.
Nous avons divisé l' ESP32 Bluetooth complet en trois segments pour faciliter la compréhension. Il est donc recommandé de parcourir les deux premiers tutoriels avant de commencer avec celui-ci.
- Bluetooth série sur le voyant de basculement ESP32 à partir du téléphone portable
- Serveur BLE pour envoyer les données de niveau de batterie au téléphone portable à l'aide du service GATT
- Client BLE pour rechercher les périphériques BLE et agir comme une balise.
Nous avons déjà couvert les deux premiers tutoriels, ici nous procédons avec le dernier pour expliquer ESP32 en tant que client BLE.
Matériaux nécessaires
- Carte de développement ESP32
- Charge CA (lampe)
- Module de relais
Matériel
Le matériel de ce projet ESP32 BLE Client est assez simple car la plupart de la magie se produit à l'intérieur du code. L'ESP32 doit basculer une lampe CA (Load) lorsque le signal Bluetooth est découvert ou perdu. Pour basculer cette charge, nous utiliserons un relais, et comme les broches GPIO de l'ESP32 ne sont compatibles qu'avec 3,3 V, nous avons besoin d'un module de relais pouvant être alimenté avec 3,3 V. Vérifiez simplement quel transistor est utilisé dans le module de relais si c'est BC548, vous êtes prêt à aller construire votre propre circuit en suivant le schéma ci-dessous.
Avertissement: le circuit est alimenté par une tension secteur directe de 220V AC. Soyez prudent avec les fils sous tension et assurez-vous de ne pas créer de court-circuit. Tu étais prévenu.
La raison derrière l'utilisation de BC548 sur BC547 ou 2N2222 est qu'ils ont une faible tension base-émetteur qui peut être déclenchée avec seulement 3,3V. Le relais utilisé ici est un relais 5V, nous l'alimentons donc avec la broche Vin qui obtient 5V du câble d'alimentation. La broche de masse est connectée à la masse du circuit. La résistance R1 1K est utilisée comme résistance de limitation de courant de base. Le fil de phase est connecté à la broche NO du relais et la broche commune du relais est connectée à la charge et l'autre extrémité de la charge est connectée au neutre. Vous pouvez échanger la position de Phase et Neutre, mais veillez à ne pas les court-circuiter directement. Le courant doit toujours passer par la charge (ampoule).J'ai utilisé un module de relais pour garder les choses simples et la charge ici est une lampe LED Focus. Ma configuration ressemble à ceci ci-dessous
Si vous souhaitez ignorer le matériel pour le moment, vous pouvez utiliser la broche GPIO 2 au lieu de la broche GPIO 13 pour basculer la LED intégrée sur ESP32. Cette méthode est recommandée pour les débutants.
Obtenez votre adresse Bluetooth du serveur (adresse de la bande de fitness)
Comme indiqué précédemment, nous allons programmer l'ESP32 pour qu'il agisse en tant que client (similaire au téléphone) et se connecte à un serveur qui est mon groupe de fitness (Lenovo HW-01). Pour qu'un client se connecte au serveur, il doit connaître l'adresse Bluetooth du serveur. Chaque serveur Bluetooth comme mon bracelet de fitness ici, a sa propre adresse Bluetooth unique qui est permanente. Vous pouvez associer cela à l'adresse MAC de votre ordinateur portable ou de votre téléphone portable.
Pour obtenir cette adresse du serveur, nous utilisons l'application appelée nRF connect à partir de semi-conducteurs nordiques que nous avions déjà utilisés pour notre précédent tutoriel. Il est disponible gratuitement pour les utilisateurs IOS et Android. Téléchargez simplement, lancez l'application et recherchez les appareils Bluetooth à proximité. L'application répertorie tous les appareils BLE qu'elle trouve. Le mien est nommé HW-01 regardez simplement sous son nom et vous trouverez l'adresse matérielle du serveur comme indiqué ci-dessous.
Donc, l' adresse matérielle ESP32 BLE de mon bracelet de fitness est C7: F0: 69: F0: 68: 81, vous aurez un ensemble différent de nombres dans le même format. Prenez-en note car nous en aurons besoin lorsque nous programmerons notre ESP32.
Obtention du service et de l'UUID caractéristique du serveur
D'accord, nous avons maintenant identifié notre serveur en utilisant l'adresse BLE, mais pour communiquer avec lui, nous devons parler la langue du service et les caractéristiques, ce que vous comprendriez si vous aviez lu le tutoriel précédent. Dans ce didacticiel, j'utilise la caractéristique d'écriture de mon serveur (bande de fitness) pour l'appairer. Donc, pour l'appairage avec l'appareil, nous avons besoin de l'UUID caractéristique du service et que nous pouvons à nouveau obtenir avec la même application.
Cliquez simplement sur le bouton de connexion de votre application et recherchez des caractéristiques d'écriture, où l'application affichera l'UUID du service et l'UUID caractéristique. Le mien est illustré ci-dessous
Ici, mon UUID de service et mon UUID caractéristique sont les mêmes, mais ils ne doivent pas nécessairement être identiques. Notez l'UUID de votre serveur. Le mien a été noté comme
UUID de service: 0000fee7-0000-1000-8000-00805f9b34fb UUID caractéristique: 0000fee7-0000-1000-8000-00805f9b34fb
Il n'est pas obligatoire d'utiliser les caractéristiques d'écriture; vous pouvez utiliser n'importe quel service valide et UUID caractéristique du serveur affiché dans l'application.
Programmation de l'ESP32 pour qu'il agisse en tant que client pour l'application de commutateur de proximité
L'idée du programme est de faire en sorte que l'ESP32 agisse comme un client qui continue de rechercher les périphériques Bluetooth lorsqu'il trouve notre serveur (bande de fitness), il vérifie l'ID du matériel et il fera basculer la lumière à travers la broche GPIO 13. Bon d'accord! !, mais il y a un problème avec cela. Tous les serveurs BLE auront une portée de 10 mètres, ce qui est un peu trop. Donc, si nous essayons de faire un interrupteur de proximité pour allumer la lumière d'une porte ouverte, cette portée est très élevée.
Pour réduire la portée du serveur BLE, nous pouvons utiliser l'option de couplage. Un serveur et un client BLE ne resteront appariés que si les deux sont à une distance de 3 à 4 mètres. C'est parfait pour notre application. Ainsi, nous fabriquons l'ESP32 non seulement pour découvrir le serveur BLE mais aussi pour s'y connecter et s'assurer qu'il reste appairé. Tant qu'ils sont appairés, la lampe CA restera allumée, lorsque la portée dépassera l'appairage sera perdu et la lampe s'éteindra. L' exemple de programme ESP32 BLE complet pour faire de même est donné à la fin de cette page. Ci-dessous ici, je vais décomposer le code en petits extraits et essayer de les expliquer.
Après avoir inclus le fichier d'en-tête, nous informons l'ESP32 de l'adresse BLE, du service et de l'UUID caractéristique que nous avons obtenus via l'application nRF connect comme expliqué dans les en-têtes ci-dessus. Le code ressemble à ci-dessous
statique BLEUUID serviceUUID ("0000fee7-0000-1000-8000-00805f9b34fb"); // Service UUID de fitnessband obtenu via l'application nRF connect statique BLEUUID charUUID ("0000fee7-0000-1000-8000-00805f9b34fb"); // UUID caractéristique de fitnessband obtenu via l'application nRF connect String My_BLE_Address = "c7: f0: 69: f0: 68: 81"; // Le MAC Bluetooth matériel de mon fitnessband variera pour chaque bande obtenue via l'application nRF connect
Suivi par le programme que nous avons le connectToserver et MyAdvertisedDeviceCallback que nous reviendrons plus tard. Ensuite, dans la fonction de configuration , nous initialisons le moniteur série et faisons le BLE sur ESP pour rechercher un périphérique. Une fois l'analyse terminée pour chaque périphérique BLE découvert, la fonction MyAdvertisedDeviceCallbacks est appelée.
Nous activons également le scan actif puisque nous alimentons l'ESP32 avec une alimentation secteur, pour une application sur batterie, il est désactivé pour réduire la consommation de courant. La broche de déclenchement du relais est connectée à GPIO 13 dans notre matériel, nous déclarons donc également que la broche GPIO 13 est une sortie.
void setup () { Serial.begin (115200); // Démarre le moniteur série Serial.println ("ESP32 BLE Server program"); // Message d'introduction BLEDevice:: init (""); pBLEScan = BLEDevice:: getScan (); // créer un nouveau scan pBLEScan-> setAdvertisedDeviceCallbacks (new MyAdvertisedDeviceCallbacks ()); // Appelez la classe définie ci-dessus pBLEScan-> setActiveScan (true); // l'analyse active utilise plus d'énergie, mais obtient des résultats plus rapidement pinMode (13, OUTPUT); // Déclare la broche LED intégrée comme sortie }
Dans la fonction MyAdvertisedDeviceCallbacks , nous imprimons une ligne qui listera le nom et d'autres informations des périphériques BLE qui ont été découverts. Nous avons besoin de l'ID matériel du périphérique BLE qui a été découvert afin de pouvoir le comparer avec celui souhaité. Donc, nous utilisons la variable Server_BLE_Address pour obtenir l'adresse de l'appareil, puis aussi pour le convertir à partir du type BLEAddress à chaîne.
class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks { void onResult (BLEAdvertisedDevice advertisedDevice) { Serial.printf ("Scan Result:% s \ n", advertisedDevice.toString (). c_str ()); Server_BLE_Address = new BLEAddress (advertisedDevice.getAddress ()); Scaned_BLE_Address = Server_BLE_Address-> toString (). C_str (); } };
Dans la fonction de boucle , nous analysons pendant 3 secondes et plaçons le résultat dans foundDevices qui est un objet de BLEScanResults. Si nous trouvons un ou plusieurs périphériques en scannant, nous commençons à vérifier si l'adresse BLE découverte correspond à celle que nous avons entrée dans le programme. Si la correspondance est positive et que le périphérique n'est pas couplé plus tôt, nous essayons de le coupler à l'aide de la fonction connectToserver. Nous avons également utilisé quelques instructions Serial à des fins de compréhension.
while (foundDevices.getCount ()> = 1) { if (Scaned_BLE_Address == My_BLE_Address && paired == false) { Serial.println ("Found Device: -)… se connectant au serveur en tant que client"); if (connectToserver (* Server_BLE_Address)) {
À l'intérieur de la fonction connectToserver , nous utilisons l'UUID pour nous associer au serveur BLE (bande de fitness). Pour se connecter à un serveur, l'ESP32 doit agir en tant que client, nous créons donc un client en utilisant la fonction createClient () , puis nous nous connectons à l'adresse du serveur BLE. Ensuite, nous recherchons le service et la caractéristique à l'aide des valeurs UUID et essayons de nous y connecter. Lorsque la connexion est réussie, la fonction renvoie un vrai et sinon, elle renvoie un faux. Notez qu'il n'est pas obligatoire d'avoir un service et un UUID caractéristique pour s'associer à un serveur, cela n'est fait que pour votre compréhension.
booléen connectToserver (BLEAddress pAddress) { BLEClient * pClient = BLEDevice:: createClient (); Serial.println ("- Client créé"); // Connectez-vous au serveur BLE. pClient-> connect (pAddress); Serial.println ("- Connecté à fitnessband"); // Obtenir une référence au service que nous recherchons dans le serveur BLE distant. BLERemoteService * pRemoteService = pClient-> getService (serviceUUID); if (pRemoteService! = nullptr) { Serial.println ("- Nous avons trouvé notre service"); retourne vrai; } else return false; // Obtention d'une référence à la caractéristique dans le service du serveur BLE distant. pRemoteCharacteristic = pRemoteService->getCharacteristic (charUUID); if (pRemoteCharacteristic! = nullptr) Serial.println ("- Trouvé notre caractéristique"); retourne vrai; }
Si la connexion réussit, la broche GPIO 13 est rendue haute et le contrôle est envoyé en dehors de la boucle à l'aide de l'instruction break. La variable booléenne appariée est également définie sur true.
if (connectToserver (* Server_BLE_Address)) { paired = true; Serial.println ("******************** LED allumée ********************** ** "); digitalWrite (13, HAUT); Pause; }
Une fois le couplage réussi et la broche GPIO activée, nous devons vérifier si l'appareil est toujours à portée. Étant donné que l'appareil est maintenant couplé, le service d'analyse BLE ne pourra plus le voir. Nous ne le retrouverons que lorsque l'utilisateur quittera la zone. Nous devons donc simplement rechercher un serveur BLE et si nous découvrons, nous devons définir la broche GPIO sur faible comme indiqué ci-dessous
if (Scaned_BLE_Address == My_BLE_Address && paired == true) { Serial. println ("Notre appareil est hors de portée"); pairé = faux; En série. println ("******************** LED OOOFFFFF ************************"); digitalWrite (13, FAIBLE); ESP.restart (); Pause; }
Travail et test
Une fois que vous êtes prêt avec le programme et la configuration matérielle, téléchargez simplement le code sur l'ESP32 et organisez l'ensemble de la configuration comme indiqué ci-dessous.
Vous devriez remarquer que la lampe s'allume dès que le bracelet de fitness (serveur) se couple avec l'ESP32. Vous pouvez également le vérifier en remarquant le symbole de connexion Bluetooth sur le bracelet de fitness. Une fois couplé, essayez de vous éloigner de l'ESP32 et lorsque vous traversez 3-4 mètres, vous remarquerez que le symbole Bluetooth sur la montre disparaît et la connexion est perdue. Maintenant, si vous regardez la lampe, elle s'éteindra. Lorsque vous rentrez dans l'appareil, l'appareil est de nouveau couplé et le voyant s'allume. Le fonctionnement complet du projet peut être trouvé dans la vidéo ci-dessous.
J'espère que vous avez apprécié le projet et appris quelque chose de nouveau en cours de route. Si vous avez rencontré un problème pour le faire fonctionner, n'hésitez pas à poster le problème sur les forums ou même dans la section commentaires ci-dessous