ESPTOP 10 BLE Tutorial usando Arduino IDE

ESPTOP 10 BLE Tutorial usando Arduino IDE
ESP32 è una scheda microcontrollore basata su IoT fornita con WiFi preinstallato e Bluetooth Dual. Sia WiFi che Bluetooth svolgono un ruolo cruciale mentre scambiano dati tra dispositivi su comunicazione wireless.

ESP32 ha supporto sia per Bluetooth Classic e Bluetooth a bassa energia. Qui ci concentreremo sulla bassa energia del Bluetooth. Vediamolo in dettaglio.

Cos'è Bluetooth a bassa energia

Ble o Bluetooth a bassa energia è una modalità di risparmio energetico di Bluetooth. La sua applicazione principale include il trasferimento di dati su brevi distanze come ingresso della porta, orologi intelligenti, dispositivi indossabili, monitoraggio della pressione sanguigna, sicurezza e automazione domestica. Ble può trasferire dati limitati.

A differenza del classico Bluetooth che rimane acceso per tutto il tempo, BLE rimane in modalità di sospensione tranne quando viene chiamato o viene avviata la connessione. Questo rende il BLE molto efficiente dal punto di vista energetico e consuma 100 volte meno potenza di quella classica.

Ecco un breve confronto di Bluetooth Classic con Bluetooth a bassa energia:

Specifiche Bluetooth Classic Bluetooth a bassa energia/ble
Velocità di trasferimento dati 2-3 Mbps 1 Mbps
Allineare ~ 10-100m ~ 50m
Frequenza operativa 79 rf 40 rf
Consumo di massima corrente ~ 30Ma <15mA
Consumo di energia 1W 0.01-0.5W
Tempo totale per inviare dati 100 ms 3ms
Applicazioni Audio, streaming musicale Sensore, dispositivi indossabili

Per un confronto più dettagliato fai clic qui per visitare il sito ufficiale di Bluetooth.

Server ble e client

Bluetooth Low Energy supporta il dispositivo in due modi diversi: server e client. ESP32 può fungere da server e client per Bluetooth a bassa energia.

Supporto ble seguendo le modalità di comunicazione:

  • Punto a punto: Comunicazione tra due punti o nodi che è server e client.
  • Modalità di trasmissione: Il server trasmette i dati su molti dispositivi.
  • Network Mesh: Dispositivi multipli collegati noti anche come molti a molte connessioni.

Quando agisce come server, ESP32 pubblicizza la propria esistenza ai dispositivi client vicini. Una volta che i dispositivi client scansionano per i dispositivi Bluetooth disponibili, il server stabilisce una connessione tra loro e trasferisce i dati dal server a dispositivo client. Questa comunicazione è chiamata punto a punto.

In questo tutorial, faremo un esempio di comunicazione punto a punto tra due schede ESP32.

Termini importanti in ble

Ecco alcuni termini importanti che si dovrebbero sapere mentre si lavora con le applicazioni ESP32 BLE:

GATT: GATT o attributi generici che definiscono una struttura gerarchica per i trasferimenti di dati tra dispositivi BLE utilizzando il servizio e le caratteristiche. Definisce il modo in cui due dispositivi comunicano i dati tra di loro.

Servizio ble: Il livello superiore all'interno della gerarchia GATT è un profilo che contiene uno o più servizi. Ble contiene più di un singolo servizio. Ognuno di questi servizi ha le proprie caratteristiche che possono anche fungere da riferimento per altri servizi.

Caratteristica ble: La caratteristica è un gruppo di informazioni sempre di proprietà del servizio; È dove i dati effettivi sono archiviati in gerarchia (valore). Contiene sempre due attributi:

  • Dichiarazione: Proprietà caratteristiche come posizione, tipo, lettura, scrittura e notifica.
  • Valore caratteristico: Valore dei dati delle caratteristiche.

Uuid: Uuid (identificatore universalmente univoco) è un ID univoco dato a un servizio e caratteristica. È un ID univoco a 128 bit che può essere generato utilizzando qualsiasi generatore UUID online. Controlla questo generatore UUID gratuito. Un campione Uuid sembra questo:

583F8B30-74B4-4757-8143-56048FD88B25

Un gruppo di interesse speciale Bluetooth universale (SIG) ha predefinito alcuni degli Uuidi abbreviati per diversi tipi di servizi e profilo per leggerli clicca qui.

Imposta BLE in ESP32 con Arduino IDE

Per comprendere il funzionamento di BLE utilizzeremo due diverse schede ESP32 una di esse agirà come server e pubblicizzare un segnale Bluetooth mentre l'altro ESP32 che agisce come a cliente Proverà a collegare il server Bluetooth.

Arduino IDE ha esempi separati sia per lo scanner che per il server.

Per vedere come installare un ESP32 con Arduino IDE in Windows Clicca qui.

ESP32 BLE Server

Innanzitutto, caricheremo il codice di esempio del server all'interno della nostra prima scheda ESP32 che funge da server.

Per aprire l'esempio del server ble vai a: File> Esempi> ESP32 BLE Arduino> ble_server:

Il codice indicato di seguito verrà aperto in Arduino IDE.

Codice del server

Carica il codice seguente nella scheda ESP32 utilizzando Arduino IDE. Ma assicurati di scollegare la seconda scheda per un po 'per evitare di caricare lo stesso codice in una singola scheda.

#includere
#includere
#includere
#Define Service_Uuid "4FAFC201-1FB5-459E-8FCC-C5C9C331914B"
#define caratteristica_uuid "beb5483e-36e1-4688-b7f5-ea07361b26a8"
void setup ()
Seriale.Inizia (115200);
Seriale.println ("Inizio ble work!");
Bledevice :: init ("ESP32");
BLeserver *pserver = bledevice :: createserver ();
BLeservice *pservice = pserver-> createService (Service_uuid);
BleCharacteristic *pCharacteristic = pservice-> createCharacteristic (
Caratteristico_uuid,
BleCharacteristic :: Property_Read |
BleCharacteristic :: Property_Write
);
pcharacteristic-> setValue ("Hello Say LinuxHint.com ");
pService-> start ();
// BLEADVERTINE*padvertising = pserver-> getAdvertising ();/*Compatibilità all'indietro*/
BLEADERTINE *padvertising = bledevice :: getAdvertising ();
padvertising-> AddServiceUuid (Service_Uuid);
padvertising-> setScanResponse (true);
padvertising-> setMinPreferred (0x06); // Funzioni per la connessione iPhone
padvertising-> setMinPreferred (0x12);
Bledevice :: startAdvertising ();
Seriale.println ("caratteristico definito! Server ble pronto ");

void loop ()
ritardo (2000);

Il codice inizia con l'inclusione dei file di libreria Bluetooth necessari. Quindi uuid è definito sia per il servizio che per le caratteristiche. Puoi andare con l'UUID predefinito o generare utilizzando il generatore UUID gratuito. La prossima comunicazione seriale viene inizializzata definendo il tasso di baud.

Successivamente, abbiamo creato un dispositivo BLE chiamato ESP32. Successivamente abbiamo definito il dispositivo BLE come un server utilizzando il createserver () funzione e successivamente impostiamo il valore caratteristico. Nel passaggio finale abbiamo avviato il servizio pubblicizzandolo in modo che altri dispositivi possano cercarlo.

ESP32 Ble Scanner

Ora caricheremo un esempio di scansione ESP32 nella seconda scheda ESP32. Per farlo vai a: File> Esempi> ESP32 ble Arduino> ble_scan

Il codice seguente sarà aperto in Arduino IDE Editor.

Codice scanner

#includere
#includere
#includere
#includere
int scantime = 5; //In secondi
Blescan* pblescan;
Classe myAdvertedDeviceCallbacks: pubblico bleadverteddevicecallbacks
void onResult (bleADvertedDevice pubblicizzato DEVICE)
Seriale.printf ("dispositivo pubblicizzato: %s \ n", pubblicizzato.accordare().c_str ());

;
void setup ()
Seriale.Inizia (115200);
Seriale.println ("scansione ...");
Bledevice :: init ("");
pblescan = bledevice :: getScan (); // Crea una nuova scansione
pblescan-> setaDvertedDeviceCallbacks (New MyAdvertedDeviceCallbacks ());
pblescan-> setactiveScan (true); // Scansione veloce ma più potenza utilizzata
pblescan-> setInterval (100);
pblescan-> setWindow (99);

void loop ()
// Metti qui il tuo codice principale, per eseguire ripetutamente:
BlescanResults FoundDevices = pblescan-> start (scantime, false);
Seriale.print ("Dispositivi trovati:");
Seriale.println (FoundDevices.getCount ());
Seriale.println ("scansione fatta!");
pblescan-> clearresults (); // Elimina i risultati per la memoria libera
ritardo (2000);

Il codice sopra cercherà il numero di dispositivi disponibili totali per BLE e visualizzerà il loro conteggio totale con gli indirizzi. Dopo aver caricato il codice nella scheda scanner ESP32 Premere il Abilitare pulsante, la scheda ESP32 cercherà automaticamente dispositivi disponibili.

Produzione

Una volta scansionati ESP32, verrà visualizzato i dispositivi disponibili, il seguente risultato verrà visualizzato. Qui ESP32 ha scansionato 9 dispositivi tra cui uno è una scheda ESP32 con codice ble_server e un altro dispositivo è MI BAND 6. Il resto di tutti i dispositivi sono disponibili vicino al mio ESP32.

Come correggere la libreria di scansione ESP32 ble non contando i dispositivi

L'esempio della libreria di scansione ESP32 ha un bug di non contare il numero totale di dispositivi. Per correggere questo problema, vai nella posizione menzionata e sostituisci il codice indicato di seguito.

C: \ Users \ Username \ AppData \ Local \ Arduino15 \ Packages \ ESP32 \ Hardware \ ESP32 \ 1.0.6 \ librerie \ ble \ src \ blescan.CPP

Ricordati di Unhide Tutte le cartelle perché la cartella AppData all'interno della directory C rimane nascosta per impostazione predefinita. Dopo aver aperto il file di origine ble_scan .CPP Sostituire la condizione indicata sotto all'interno del codice.

if (m_padverteddevicecallbacks)
m_padvertedDeviceCallbacks-> onResult (*pubblicizzato DEVICE);

Se (!m_wantduplicates && !trovato)
m_scanresults.M_VectorAdvertedDevices.INSERT (Std :: coppia (AdvertedAddress.toString (), pubblicizzatoDevice));
dovrebbe dolete = false;

Test del server ESP32 BLE con smartphone

La maggior parte dei moderni smartphone lavora con la tecnologia BLE per comunicare con diversi dispositivi come smartwatch, dispositivi indossabili, sensori e altri dispositivi di automazione domestica. Qui la scheda ESP32 fungerà da punto di accesso. Quindi, collegheremo un telefono Android con una scheda ESP32.

Codice server BLE per l'accesso allo smartphone ESP32

Carica il codice indicato di seguito nella scheda ESP32.

#include /*libreria bluetooth inclusa* /
#includere
#includere
#Define Service_Uuid "A484A399-7272-4282-91CF-9018E075FC35"
#define caratteristica_uuid "C7E084BD-5279-484D-8319-FFF7D917537D"
Classe MyCallbacks: BleCharacteristicCallbacks pubblico

void onwrite (blecharacteristic *pcharacteristic)

std :: string value = pCharacteristic-> getValue ();
if (valore.lunghezza ()> 0)

Seriale.print ("Valore caratteristico aggiornato:");
per (int i = 0; i createservice (service_uuid);
BleCharacteristic *pCharacteristic = pservice-> createCharacteristic (
Caratteristico_uuid,
BleCharacteristic :: Property_Read |
BleCharacteristic :: Property_Write
);
pcharacteristic-> setCallbacks (new MyCallbacks ());
pcharacteristic-> setValue ("LinuxHint.Com ");
pService-> start ();
BLEADERTINE *padvertising = pserver-> getAdvertising ();
padvertising-> start ();

void loop ()

ritardo (2000);

Installazione dell'applicazione BLE in smartphone Android

I seguenti passaggi ti guideranno all'installazione di applicazioni BLE negli smartphone e ti aiuteranno a interfacciarsi i dispositivi mobili con le schede ESP32.

Passo 1: Apri l'installazione di Google Play Store Scanner ble applicazione.

Passo 2: Dopo l'installazione, aprire l'applicazione e consentire tutta l'autorizzazione richiesta e ricordare di attivare il Bluetooth mobile.

Passaggio 3: Ora scansiona i dispositivi Bluetooth disponibili. Connetti la scheda ESP32.

Passaggio 4: Una volta che la scheda ESP32 è collegata allo smartphone a seguito della specifica della scheda ESP32. Qui possiamo vedere gli indirizzi UUID e possiamo leggere e scrivere nuovi valori caratteristici.

Passaggio 5: Per leggere il valore caratteristico salvato clic R. Verrà visualizzato il risultato.

Passaggio 6: Per scrivere qualsiasi nuovo valore caratteristico fai clic W.

Passaggio 7: Un nuovo popup apparirà qui possiamo scrivere qualsiasi valore caratteristico e fare clic OK.

Passaggio 8: Apparirà un nuovo valore che è scritto.

Passaggio 9: Inoltre, possiamo vedere lo stesso nuovo valore caratteristico stampato sul monitor seriale di Arduino IDE.

Abbiamo collegato correttamente un dispositivo con ESP32 BLE.

Conclusione

ESP32 viene fornito con doppio bluetooth che è classico e bassa energia. Qui in questo articolo, abbiamo discusso di BLE e delle sue varie applicazioni e di lavoro. Successivamente abbiamo configurato BLE con due diverse schede ESP32 con una funzione come server e altre come scanner. Finalmente, abbiamo collegato il nostro smartphone con il server ESP32 e abbiamo scritto un nuovo valore caratteristico.