Come pilotare la board ESP32 con Bluetooth

Introduzione

Il microcontrollore ESP32 è nato principalmente per soddisfare l’enorme richiesta di sistemi con periferiche wireless e per il mercato IOT.

In questo  articolo vorrei spiegarti come  usare la periferica Bluetooth, integrata nel microcontrollore ESP32.

Il progetto è basato su una interfaccia  a linea di comando, che pilota a distanza  il microcontrollore, tramite la periferica Bluetooth.

Cos’è il Bluetooth

E’ un protocollo standard  per l’invio e la ricezione di dati tramite un collegamento wireless con una portante di  2,4 GHz.

Nacque inizialmente per attivare i pagamenti wireless, attualmente non è più usato per questo tipo di funzione, poiché è stato soppiantato da altri protocolli.

E’ ancora molto diffuso, soprattutto per la trasmissione di segnali audio, come auricolari o amplificatori.

Figura 1

Il protocollo Bluetooth lavora nella banda di frequenza di 2,4 GHz, come il protocollo ZigBee e WiFi.

Potresti giustamente porti la domanda,  di come sia possibile la coesistenza di trasmissioni dati con diversi dispositivi che operano sulla stessa banda di frequenza, senza generare interferenze.

Nell’intorno della frequenza centrale, di 2,4 GHz,  dal protocollo è definita una determinata banda di lavoro, dove i dispositivi possono trasmettere.

Due dispositivi diversi, per non interferirsi, potrebbero  trasmettere su due intervalli di frequenza diversi (comprese nella banda di frequenza prestabilita).

Questo approccio deve prevedere una contrattazione preventiva, per concordare l’intervallo di frequenza che deve usare ogni singolo dispositivo.

Questa soluzione è di difficile attuazione, poiché bisognerebbe prevedere una comunicazione tra i diversi dispositivi che si trovano nelle vicinanze.

Per risolvere il problema, sopra descritto, è stato introdotto il protocollo “Hopping”, ogni dispositivo prima di inizia la trasmissione, seleziona, in modo casuale, la frequenza da utilizzare.

Ad ogni nuova trasmissione, il dispositivo seleziona una frequenza diversa sempre in modo casuale.

Figura 2

Con questo protocollo la probabilità che due dispositivi iniziano la trasmissione sulla stessa banda di  frequenza è molto bassa, e se dovesse succedere, il protocollo riconosce l’errore e ritrasmette su una frequenza diversa il dato corrotto.

E’ chiaro che al crescere del numero di dispositivi, presenti nel raggio d’azione in cui si potrebbe verificare un’interferenza, aumenta la probabilità di avere dei messaggi corrotti fino al punto di rendere la comunicazione impossibile, in ogni caso questo evento è molto raro e si verifica solo quando il numero di dispositivi è molto elevato.

Nei sistemi embedded, il protocollo Bluetooth è ideale per la trasmissione limitata di dati, in un breve raggio d’azione (<100 m)  con un assorbimento di potenza relativamente basso.

L’interfaccia di comunicazione seriale, può essere sostituita con il protocollo di comunicazione Bluetooth, con l’evidente vantaggio di non usare cavi elettrici.

La classe di potenza della trasmissione, e quindi la portata, di un modulo Bluetooth è definita dalla tabella riportata di seguito.

Esistono tre classi e tutte supportate dal microcontrollore ESP32.

Protocollo seriale con Bluetooth, Serial Port Profile (SPP), ogni dispositivo connesso può inviare e ricevere dati proprio come se ci fossero linee RX e TX .

Due schede ESP32, ad esempio, potrebbero comunicare tra di loro senza usare dei cavi di connessione, come se fosse un protocollo seriale RS232 classico.

Terminale  seriale su telefono Android

Per comunicare con la board ESP32, utilizzeremo un’applicazione che emula un terminale seriale tramite il protocollo Bluetooth.

Quindi proveremo ad instaurare una connessione seriale virtuale tra  un telefono Android e l’ESP32.

Se hai un telefono Android, scarica l’applicazione: “Serial Bluetooth Terminal”

Vai al Play Store di Android e scarica l’applicazione dal nome: Terminale Bluetooth seriale”

Figura 3

Controlliamo lo stato di un diodo LED tramite Bluetooth

La periferica Bluetooth ha un raggio d’azione, massimo,  senza ostacoli, di 100 metri, quindi la sua applicazione ideale è quella di comandare a distanza una lampada o tramite un relè un elettrodomestico.

In questo progetto, piloteremo un  diodo LED, e questa soluzione può essere convertita a qualsiasi dispositivo, basta sostituire il diodo LED, con uno o più relè opto isolati.

Schema elettrico

Figura 4

Codice

Il codice per gestire un diodo LED tramite il Bluetooth presente nella libreria di Arduino, da me modificato è riportato di seguito.

#include "BluetoothSerial.h"


// controlliamo se i registri che abilitano il Bluetooth
// sono stati correttamente configurati.
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth non è stato abilitato.
#endif

// Ogetto della seriale Bluetooth a cui associamo l'identificativo SerialBT
BluetoothSerial SerialBT;


const int led = 25;  //Pin dove è stato connesso il dido LED 




String message = "";
char incomingChar;
String temperature = "";
int comado_letto = 0;



void setup() {
  pinMode(led, OUTPUT);
  Serial.begin(115200);
  SerialBT.begin("ESP32");
  Serial.println("puoi accoppiare Bluetooth");
  digitalWrite(led, HIGH);
}

void loop() {
   
  // invia i comandi
    
  if (SerialBT.available()){
    char incomingChar = SerialBT.read();
    if (incomingChar != '\n'){
      message += String(incomingChar);
    
    }
    else if (comando_letto == 1)
  {
      
      message = "";
      comando_letto = 0;
    }
  else
  {
  message = "";
    comando_letto = 0;
    Serial.println("");
    Serial.println("Comando errato");
    SerialBT.println("Comando errato");
    
  }
    Serial.write(incomingChar);  
  }
  
  if (message =="led_ON"){
    digitalWrite(led, LOW);
    comando_letto = 1;
  }
  else if (message =="led_OFF"){
    digitalWrite(led, HIGH);
    comando_letto = 1;
  }
  
  delay(20);
}

Descrizione

#include "BluetoothSerial.h"


// controlliamo se i registri che abilitano il Bluetooth
// sono stati correttamente configurati.
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth non è stato abilitato.
#endif

Includiamo la libreria per gestire la periferica Bluetooth.

Eseguiamo un check  sui registri di abilitazione della  periferica Bluetooth

if (SerialBT.available()){
    char incomingChar = SerialBT.read();
    if (incomingChar != '\n'){
      message += String(incomingChar);

Legge i comandi inviati tramite l’interfaccia Bluetooth e la gestisce come se fosse una seriale UART.

Legge tutti i caratteri, e li inserisce in una stringa, fino a quando non incontra il  simbolo da capo “\n”

else if (comando_letto== 1)
  {
      
      message = "";
      comando_letto = 0;
    }
  else
  {
  message = "";
    comando_letto = 0;
    Serial.println("");
    Serial.println("Comando errato");
    SerialBT.println("Comando errato");
}
    Serial.write(incomingChar);  
  }

Se la variabile “comando_letto” è  nello stato “1” significa che il comando è stato letto correttamente pertanto la variabile di stato  “comando_letto” e la stringa “message” devono essere azzerate.

Altrimenti si invia un messaggio d’errore e si azzera comunque la variabile di stato e la stringa per consentire al sistema di iniziare una nuova ricezione

  if (message =="led_ON"){
    digitalWrite(led, LOW);
    comando_letto = 1;
  }
  else if (message =="led_OFF"){
    digitalWrite(led, HIGH);
    comando_letto = 1;
  }

Se il comando inviato è corretto si esegue l’istruzione e si setta ad “1” la variabile di stato “comando_letto”

Conclusioni

Per qualsiasi domanda, non esitate a contattarmi nel form riportato di seguito e se questo articolo l’avete trovato interessante iscrivetevi  al mio sito sarete sempre aggiornati su ogni nuovo articolo pubblicato. Il tasto d’iscrizione si trova in alto a destra nella home page.   

2 commenti

  1. Salve, avremmo bisogno di controllare tramite Bluetooth il nostro arduino nano esp32 per ricevere dati da un accelerometro posto su una macchina radiocomandata in movimento, potrebbe spiegarci come fare per trasferire i codici su arduino senza L utilizzo fisico del cavo ma tramite Bluetooth? La ringrazio

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Ti sei iscritto alla newsletter

There was an error while trying to send your request. Please try again.

Quattrodispositivi utilizzerà le informazioni fornite in questo modulo per restare in contatto con te e fornire aggiornamenti del sito