mardi 1 octobre 2019

Bluetooth (série) avec l'ESP32


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.


-
/*******************************************************
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


Une des LEDs est branchée à la broche GPIO 4, alors que l'autre est branchée à GPIO 5.


-
/**************************************************
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   (TwitterFacebook)

1 commentaire:

  1. 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