Cours IoT et Réseaux de capteurs
3ème Ingénieur Génie des Systèmes Info-troniques
Application 2:
Node MCU ESP32: IoT BLE
MQTT Gateway
Dr. Faten BEN ABDALLAH Dr. Imen BOUABIDI
[Link]@[Link] bouabidi.imene1@[Link]
Purpose
2
Qu'est-ce que le Bluetooth Low Energy (BLE)
• Bluetooth Low Energy, BLE en abrégé, est une variante de Bluetooth à économie d'énergie. L'application
principale du BLE est la transmission à courte distance de petites quantités de données (faible bande passante).
Contrairement au Bluetooth qui est toujours activé, le BLE reste constamment en mode veille, sauf lorsqu'une
connexion est initiée. Cela fait qu'il consomme très peu d'énergie. BLE consomme environ 100 fois moins
d'énergie que Bluetooth (selon le cas d'utilisation).De plus, BLE prend en charge non seulement la communication
point à point, mais également le mode de diffusion et le réseau maillé.
Mode diffusion : le serveur transmet des données à de nombreux clients connectés ;
Réseau maillé : tous les appareils sont connectés, il s'agit d'une connexion plusieurs à plusieurs.
3
3
Serveur et client BLE
Avec BLE, il existe deux types d'appareils : le serveur et le client. L'ESP32 peut agir soit en tant que client, soit en
tant que serveur.
Le serveur annonce son existence, afin qu'il puisse être trouvé par d'autres appareils, et contient les données
que le client peut lire.
Le client scanne les appareils à proximité et lorsqu'il trouve le serveur qu'il recherche, il établit une connexion
et écoute les données entrantes. C'est ce qu'on appelle la communication point à point.
4
GATT
GATT signifie Attributs génériques et définit une structure de données hiérarchique qui est exposée aux appareils
BLE connectés.
Cela signifie que GATT définit la manière dont deux appareils BLE envoient et reçoivent des messages standard.
Comprendre cette hiérarchie est important, car cela facilitera la compréhension de l'utilisation du BLE et de
l'écriture de vos applications.
Le niveau supérieur de la
hiérarchie est un profil, qui est
composé d'un ou plusieurs
services. Généralement, un
appareil BLE contient plusieurs
services.
5
BLE service
Chaque service contient au moins une caractéristique, ou peut également référencer d'autres services.
Un service est simplement une collection d'informations, comme les lectures de capteurs, par exemple.
Il existe des services prédéfinis pour plusieurs types de données définis par le SIG (Bluetooth Special Interest Group) comme
: le niveau de batterie, la tension artérielle, la fréquence cardiaque, l'échelle de poids, etc.
6
Caractéristique BLE
La caractéristique appartient toujours à un service et c'est là que les données réelles sont contenues dans la
hiérarchie (valeur).
La caractéristique a toujours deux attributs : la déclaration de caractéristique (qui fournit des métadonnées
sur les données) et la valeur de caractéristique.
Les propriétés décrivent comment interagir avec la valeur caractéristique. Fondamentalement, il contient
les opérations et les procédures qui peuvent être utilisées avec la caractéristique :
Diffuser
Lire
Ecrire
sans réponse
Écrivez
Notifier
Indiquer
Écritures
signées authentifiées
Propriétés étendues
7
UUID
Chaque service, caractéristique et descripteur possède un UUID (Universally Unique Identifier). Un UUID est
un numéro unique de 128 bits (16 octets). Par exemple:
L'UUID est utilisé pour identifier de manière unique des informations. Par exemple, il peut identifier un
service particulier fourni par un appareil Bluetooth.
Il existe des UUID raccourcis pour tous les types, services et profils spécifiés dans le SIG (Bluetooth Special
Interest Group).
Si votre application a besoin de son propre UUID, vous pouvez le générer à l'aide de ce Site Web du
générateur d'UUID :
[Link]
8
Installation du module complémentaire ESP32
dans Arduino IDE
1) Dans votre IDE Arduino, accédez à File> Preferences
2) Entrer [Link] dans le “Additional Board Manager URLs”
champs. Ensuite, cliquez sur le bouton « OK ».
Remarque : si vous disposez déjà de l'URL des cartes ESP8266, vous pouvez séparer les URL par une virgule
comme suit :
3) Ouvrez le gestionnaire de cartes. Aller à Tools > Board > Boards Manager…
4) Recherchez ESP32 et appuyez sur le bouton d'installation pour « ESP32 by Espressif Systems ».C'est ça. Il
devrait être installé après quelques secondes.
9
9
Tester l'installation de l'ESP32 (1/2)
Branchez la carte ESP32 à votre ordinateur. Avec votre Arduino IDE ouvert, suivez ces étapes :1. Sélectionnez votre carte
dans le menu Outils > Carte (dans notre cas, il s'agit du NodeMCU-32S)
2. Sélectionnez le port (si vous ne voyez pas le port COM dans votre IDE Arduino, vous devez installer les
pilotes CP210x USB vers UART Bridge VCP)
10
10
Tester l'installation de l'ESP32 (2/2)
3. Une façon de savoir si toutes les bibliothèques requises ont été installées est d'essayer de télécharger un simple croquis.
Ouvrez l'exemple Blink via Fichiers > Exemples > [Link] > Blink.
4. Ensuite, maintenez enfoncé le bouton de démarrage (le bouton de droite, le port USB en bas)Cochez la case d'état
sous l'IDE Arduino. Une fois qu'il est dit de se connecter, relâchez le bouton de démarrage. Le croquis devrait être
téléchargé sans problème.
5- Pour voir les résultats de la nouvelle esquisse, appuyez sur le
bouton EN (l'autre bouton). La LED bleue devrait maintenant
clignoter une fois par seconde.
11
NodeMCU- 32S Pinout
12
BLE avec ESP32
L'ESP32 peut agir en tant que serveur BLE ou en tant que client BLE. Il existe plusieurs exemples BLE pour l'ESP32 dans la
bibliothèque ESP32 BLE pour Arduino IDE. Cette bibliothèque est installée par défaut lorsque vous installez l'ESP32 sur l'IDE
Arduino.
Pour une brève introduction à l'ESP32 avec BLE sur l'IDE Arduino, nous allons créer un serveur ESP32 BLE, puis un scanner
ESP32 BLE pour trouver ce serveur. Nous utiliserons et expliquerons les exemples fournis avec la bibliothèque BLE. 13
Serveur BLE (Comment fonctionne le code)
Pour créer un serveur BLE, le code doit suivre les étapes suivantes :Créez un serveur BLE.
Dans ce cas, l'ESP32 fait office de serveur BLE.
Créez un service BLE.
Créez une caractéristique BLE sur le service.
Créez un descripteur BLE sur la caractéristique.
Démarrez le Service.
Commencez à faire de la publicité, afin qu'elle puisse être trouvée par d'autres appareils.
Jetons un coup d'œil au fonctionnement de l'exemple de code du serveur BLE.
Il commence par importer les bibliothèques nécessaires aux capacités BLE.
Ensuite, vous devez définir un UUID pour le service et la caractéristique.
Vous pouvez laisser les UUID par défaut ou accéder à uuidgenerator (diapositive 8) pour créer des UUID aléatoires
pour vos services et caractéristiques. 14
Serveur BLE (Comment fonctionne le code)
Il démarre la communication série à un débit en bauds de 115 [Link], vous créez un appareil BLE appelé «
MyESP32 ». Vous pouvez changer ce nom en ce que vous voulez.
Dans la ligne suivante, vous définissez l'appareil BLE en tant que serveur.
Après cela, vous créez un service pour le
. serveur BLE avec l'UUID défini précédemment.
Ensuite, vous définissez la caractéristique pour ce service. Comme vous pouvez le voir, vous utilisez également l'UUID
défini précédemment, et vous devez passer en arguments les propriétés de la caractéristique. Dans ce cas, c'est : LIRE et
ÉCRIRE.
15
Serveur BLE (Comment fonctionne le code)
Après avoir créé la caractéristique, vous pouvez définir sa valeur avec la méthode setValue().
Dans notre cas, la valeur doit être la lecture du capteur DHT.
Enfin, vous pouvez démarrer le service et la publicité, afin que d'autres appareils BLE puissent analyser et trouver cet
appareil BLE.
16
ESP32
[Link]
[Link]
[Link]
energy-ble-arduino-ide/
17
Scan du serveur ESP32 BLE avec smartphone (1/2)
Vous pouvez scanner votre serveur ESP32 BLE avec votre smartphone et voir ses
services et caractéristiques. Pour cela, nous utiliserons une application gratuite
appelée nRF Connect for Mobile de Nordic, elle fonctionne sur Android (Google Play
Store) et iOS (App Store).Accédez à Google Play Store ou App Store et recherchez «
nRF Connect for Mobile ». Installez l'application et ouvrez-la.
Une fois installé, n'oubliez pas d'aller dans les paramètres Bluetooth et d'activer
l'adaptateur Bluetooth sur votre smartphone.
.
Vous pouvez également vouloir le
rendre visible à d'autres appareils pour tester d'autres croquis plus tard.
18
Scan du serveur ESP32 BLE avec smartphone (2/2)
Une fois que tout est prêt dans votre smartphone et que l'ESP32
exécute l'esquisse du serveur BLE, dans l'application, appuyez sur
le bouton de numérisation pour rechercher les appareils à
proximité. Vous devriez trouver un ESP32 avec le nom « MyESP32
». Cliquez sur le bouton « Connecter ».
Comme vous pouvez le voir, l'ESP32 dispose d'un service avec
l'UUID que vous avez défini précédemment. Si vous appuyez
sur le service, il développe le menu et affiche la
caractéristique avec l'UUID que vous avez également défini.
19
Exercice
Définissez des modifications sur le code du serveur BLE pour envoyer les valeurs du capteur DHT à votre
téléphone via Bluetooth Low [Link] fois que votre application est en cours d'exécution, voici le résultat
que vous obtiendrez :
20
ESP32 BLE recevant des données (en utilisant la
fonction UART)
BLE sur ESP32 a une propriété de communication série, donc cette fonctionnalité UART peut être utilisée pour échanger
une séquence de données entre le contrôleur ESP32 et l'appareil connecté. Dans la communication UART, deux UART
communiquent directement entre eux. L'UART émetteur convertit les données parallèles d'un appareil de contrôle en
forme série, les transmet en série à l'UART récepteur, qui reconvertit ensuite les données série en données parallèles pour
l'appareil récepteur
.
Ouvrez l'exemple BLE_uart via Fichiers > Exemples > ESP32 BLE Arduino > BLE_uart. Apportez des modifications pour recevoir
des données d'une balise BLE ou de votre téléphone. Si les données reçues sont égales à « 1 », le LED_BUILTIN sera allumé,
sinon si les données reçues sont égales à « 0 », le LED_BUILTIN sera éteint.
21
ESP32 BLE recevant des données (Comment
fonctionne le code)
Les données transmises à une extrémité sont les données reçues à l'autre extrémité.
Les caractéristiques TX UUID dans l'expéditeur sont les caractéristiques RX UUID de l'ESP32 et vice versa.
Définir le service UUID et les caractéristiques UUID pour Tx et Rx
La classe MyserverCallbacks gère l'état de la connexion Bluetooth. Pour faire tout cela, définissez l'indicateur
« deviceConnected » sur vrai ou faux lorsque vous vous connectez ou vous déconnectez de l'ESP32.
22
ESP32 BLE recevant des données (Comment
fonctionne le code)
Il existe une fonction de rappel qui gère les données de réception envoyées par le client (téléphone ou ibeacon...).
Dans la fonction setup(), initialisez l'ESP32 en tant que périphérique BLE, définissez son nom et créez un serveur BLE.
.
Créez un service BLE à l'aide de l'UUID du service.
23
ESP32 BLE recevant des données (Comment
fonctionne le code)
Ajouter des caractéristiques.PROPERTY_WRITE, PROPERTY_NOTIFY sont les propriétés des caractéristiques.
Démarrer le service BLE
Start advertising 24
ESP32 BLE recevant des données (test)
25
ESP32 comme passerelle
Dans la passerelle esp32 MQTT, tous les appareils BLE à
proximité sont déchiffrés et leurs trames de données sont
téléchargées sur les serveurs MQTT à l'aide du Wi-Fi. Écrivez le
code pour réaliser le projet ci-dessous :
26
ESP32 comme passerelle
Lors du téléverser il y'aura un problème de type mémoire programme insuffisante. Il faut donc changer la partition
afin d'augmenter la proportion alouée à la mémoire programme. Afin de le faire il faut aller à
C:\Users\{YourUserName}\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\[Link]
et le susbstituer par le fichier boards .
Fermer arduino et rouvrer le vous trouverez qu'il a jouté dans le menu Outil ->partition Scheme
choisir Huge App....
27