Une des nombreuses caractéristiques épatantes de l'ESP32, c'est qu'il peut communiquer en Bluetooth. Dans cet article, voyons un peu comment il est possible d'utiliser la bibliothèque BluetoothSerial pour établir une communication entre l'ESP32 et un smart phone.
Si vous savez comment utiliser la classe Serial pour établir une communication série de type UART, il n'est pas exagéré d'affirmer que vous savez déjà comment utiliser la bibliothèque BluetoothSerial: les méthodes begin, read, write, print, println et available sont disponibles et accomplissent la même fonction que dans leur équivalent série.
Réglages du smart phone ou de la tablette
Il existe de nombreuses applications Android permettant la communication bluetooth. Pour cette expérience, j'ai utilisé Serial Bluetooth Terminal par Kai Morich. Une autre option consiste à utiliser l'application réalisée dans cet article au moyen de MIT App Inventor.
Si vous n'avez pas l'habitude d'effectuer l'appairage d'un périphérique bluetooth, vous pouvez vous référer à la partie intitulée "Couplage avec un appareil hôte" de cet article.
Envoi d'informations de l'ESP32 vers le smart phone
Le sketch ci-dessous envoie un nombre croissant par bluetooth. C'est une façon simple et rapide de vérifier que la communication fonctionne correctement.
-
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/******************************************************* | |
Communication bluetooth avec un ESP32. | |
L'ESP32 publie un nombre croissant. | |
https://electroniqueamateur.blogspot.com/2019/10/bluetooth-serie-avec-lesp32.html | |
********************************************************/ | |
#include "BluetoothSerial.h" | |
BluetoothSerial SerialBT; | |
int compteur = 0; | |
void setup() { | |
SerialBT.begin("ESP32"); //"ESP32" est le nom qu'on donne à notre client | |
void loop() { | |
compteur++; | |
SerialBT.print("Valeur du compteur: "); | |
SerialBT.println(compteur); | |
delay(500); | |
} |
Contrôle de l'ESP32 par le smart phone
Dans ce deuxième exemple, deux LEDs reliées à l'ESP32 sont contrôlées à partir du smart phone.
- La commande 'a' allume la première LED
- La commande 'b' allume la deuxième LED
- La commande 'c' allume les deux LEDs
- La commande 'd' éteint les deux LEDs
- La commande 'e' modifie l'état des deux LEDs
-
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/************************************************** | |
Contrôle de deux LEDs par bluetooth (ESP32) | |
https://electroniqueamateur.blogspot.com/2019/10/bluetooth-serie-avec-lesp32.html | |
***************************************************/ | |
#include "BluetoothSerial.h" | |
BluetoothSerial SerialBT; | |
#define LEDpin1 4 // 1ere LED branchée à GPIO 4 | |
#define LEDpin2 5 // 2e LED branchée à GPIO 5 | |
char instruction; // le message recu par bluetooth; | |
int etatLED1 = 0, etatLED2 = 0; | |
void setup() | |
{ | |
SerialBT.begin("ESP32"); // notre client Bluetooth s'appelera "ESP32" | |
pinMode(LEDpin1, OUTPUT); | |
pinMode(LEDpin2, OUTPUT); | |
} | |
void loop() | |
{ | |
char message; | |
if (SerialBT.available()) // réception d'un message | |
{ | |
message = SerialBT.read(); // lecture du message reçu | |
} | |
if (message != instruction) { // alors il faut modifier l'état des LEDs | |
instruction = message; | |
if (instruction == 'a') | |
{ | |
digitalWrite(LEDpin1, HIGH); | |
digitalWrite(LEDpin2, LOW); | |
etatLED1 = 1; | |
etatLED2 = 0; | |
SerialBT.println("LED 1 allumee, LED 2 eteinte"); | |
} | |
else if (instruction == 'b') | |
{ | |
digitalWrite(LEDpin1, LOW); | |
digitalWrite(LEDpin2, HIGH); | |
etatLED1 = 0; | |
etatLED2 = 1; | |
SerialBT.println("LED 1 eteinte, LED 2 allumee"); | |
} | |
else if (instruction == 'c') | |
{ | |
digitalWrite(LEDpin1, HIGH); | |
digitalWrite(LEDpin2, HIGH); | |
etatLED1 = 1; | |
etatLED2 = 1; | |
SerialBT.println("Les 2 LEDs allumees"); | |
} | |
else if (instruction == 'd') | |
{ | |
digitalWrite(LEDpin1, LOW); | |
digitalWrite(LEDpin2, LOW); | |
etatLED1 = 0; | |
etatLED2 = 0; | |
SerialBT.println("Les 2 LEDs eteinte"); | |
} | |
else if (instruction == 'e') | |
{ | |
digitalWrite(LEDpin1, !etatLED1); | |
digitalWrite(LEDpin2, !etatLED2); | |
etatLED1 = !etatLED1; | |
etatLED2 = !etatLED2; | |
SerialBT.println("Les 2 LEDs ont change d'etat"); | |
} | |
delay(500); | |
} | |
} |
Articles similaires
Grâce au module HC-06, nous avons eu l'occasion d'utiliser Bluetooth avec Arduino, Raspberry Pi, STM32 Nucleo, MPLAB Xpress (PIC) et MSP430 Launchpad. Nous avons aussi utilisé MIT App Inventor 2 pour programmer une appli Android qui communique en Bluetooth.
En ce qui concerne l'ESP32, de nombreux autres articles sont disponibles ici.
Yves Pelletier (Twitter, Facebook)
Bonjour. C'est bien utile cette série de petits programmes pour moi qui débute dans le domaine des ESP32. Une petite remarque, il manque la parenthèse fermante au setup du premier programme. Sinon, merci !
RépondreSupprimer