ESPTOP 10 Bluetooth - Ultimate Guide

ESPTOP 10 Bluetooth - Ultimate Guide
ESP32 er et mikrokontrollerbasert brett som kommer med Wi-Fi og Bluetooth-støtte. Det er et IoT -basert brett som kan integreres med flere sensorer for å utføre instruksjoner. ESP32 -styret har en bred applikasjon der det kreves trådløs kommunikasjon.

ESP32 støtter dobbel Bluetooth som inneholder Bluetooth Classic og Bluetooth Low Energy (BLE). I denne artikkelen vil vi diskutere arbeidet med begge disse Bluetooth.

Her er en kort sammenligning av Bluetooth -klassiker med Bluetooth lav energi:

Spesifikasjon Bluetooth Classic Bluetooth lav energi/ble
Dataoverføringshastighet 2-3Mbps 1 Mbps
Område ~ 10-100m ~ 50m
Driftsfrekvens 79 Rf 40 RF
Topp strømforbruk ~ 30MA <15mA
Strømforbruk 1W 0.01-0.5W
Total tid til å sende data 100ms 3ms
applikasjoner Audio, musikkstrømming Sensor, wearables

For en mer detaljert sammenligning, klikk her for å besøke det offisielle Bluetooth -nettstedet.

Følgende er de to Bluetooth -modusene som er tilgjengelige i ESP32 -styret:

  • Bluetooth Classic
  • Bluetooth Low Energy (BLE)

1: ESP32 Bluetooth Classic med Arduino Ide

ESP32 -styret kommer med Dual Bluetooth Support One Is Bluetooth Classic og den andre er BLE (Bluetooth Low Energy). I dag skal vi bare diskutere Bluetooth -klassiker. Den eneste forskjellen som eksisterer mellom dem begge er at Bluetooth -klassikeren kan håndtere mye dataoverføring, men bruker batteri med høyere hastighet, men Bluetooth lav energi er kraftbevarende variant som brukes til kort avstandskommunikasjon. Ble holder seg i søvnmodus til den er initialisert for dataoverføring.

ESP32 Bluetooth Classic Serial Communication

ESP32 kommer med innebygde Bluetooth-moduler som først mottar data og deretter videresende dem til Xstena-prosessoren. Så for å etablere denne kommunikasjonen “Bluetoothserial” Bibliotek brukes som ligner på Arduino Serial Library, men det er bare innenfor ESP32. Følgende er noen funksjoner som tilbys av Bluetooth Serial Library:

  • begynne()
  • tilgjengelig()
  • skrive()
  • lese()

Bluetooth -kontrollert LED med ESP32

La oss skrive en enkel kode som kan kontrollere en LED ved hjelp av mobil Bluetooth over Bluetooth trådløs kommunikasjon. Følgende er maskinvaren som kreves for å kontrollere LED ved hjelp av Bluetooth -seriell kommunikasjon:

  • ESP32
  • Led
  • Brødbrett
  • Android -enhet
  • Seriell Bluetooth Terminal Application

Krets

Connect LED på digital pinne 15 av ESP32 med negativ terminal koblet til GND av ESP32 -styret. For en sikker strømgrense kan vi også koble motstanden (220 ohm) mellom dem:

Kode

Åpne Arduino IDE og velg ESP32 -styret i styresjefen for å se hvordan du installerer ESP32 -brettet i Arduino IDE KLIKK HER. Etter å ha valgt styret, skriv koden nedenfor i redigeringsvinduet:

#include /*Bluetooth seriell kommunikasjonsbibliotek* /
#Define LED_PIN 15 /*LED -pinne initialisert* /
Bluetoothserial Serialbt;
byte bt_inp;
#hvis !definert (config_bt_enabled) || !definert (config_bluedroid_enabled)/*sjekk for Bluetooth i SDK*/
#error Bluetooth av-kjør 'lage menuconfig' for å aktivere det
#slutt om
ugyldig oppsett ()

pinmode (LED_PIN, utgang); /*LED -pinne satt som utgang*/
Serie.Begin (115200); /*baudfrekvens for seriell kommunikasjon*/
Serialbt.begynne(); /*Bluetooth -kommunikasjon begynner*/
Serie.Println ("Bluetooth er klar til å parre ..."); /*Når Bluetooth slår på*/

ugyldig sløyfe ()

if (serialbt.Tilgjengelig ()) /*Sjekk for tilgjengelighet av Bluetooth -data* /

BT_INP = SERIALBT.lese(); /*Les Bluetooth -data fra enheten*/
Serie.skriv (bt_inp); /*Skriv ut lesedataene*/

if (bt_inp == '1') /*Hvis betingelse for LED -tilstand* /

DigitalWrite (LED_PIN, HIGH); /*slå på LED hvis 1 inngang mottas*/

if (bt_inp == '0')

DigitalWrite (LED_PIN, LAV);/*slå av LED hvis 0 -inngang mottas*/

Her i koden ovenfor startet vi med å inkludere Bluetooth Serial Library for ESP32. Neste har vi inkludert Bluetooth -seriebibliotekfunksjoner som muliggjør ESP32 Bluetooth.

Neste LED -pinne 15 blir initialisert og ved bruk av pinmode () Funksjon LED -pinne er satt som utgang.

I sløyfe -del av koden vil programmet se etter seriell Bluetooth -datatilgjengelighet. Hvis inngangsdataene er 1 LED vil slå seg på, og hvis de mottatte dataene er 0 LED vil slå av.

Når koden er lastet opp. Bluetooth av ESP32 -styret vil slå på og følgende melding vises på seriemonitoren:

Installere seriell Bluetooth -terminal på smarttelefon

Vi trenger en Bluetooth -enhet som kan sende instruksjoner til ESP32, slik at vi bruker en Android -smarttelefon for å grensesnitt den til ESP32 Bluetooth. Først må vi installere en seriell terminal i en Android -telefon. Følg trinnene nedenfor for å grensesnitt Android -telefon med ESP32:

Trinn 1: Åpne Google Play Store på smarttelefonen din og søk Seriell Bluetooth -terminal. Installer den nedenfor viste applikasjonen:

Steg 2: Etter installasjon, åpner du Bluetooth -innstillinger for mobiltelefoner. Søk etter ESP32 Bluetooth og klikk for å begynne å parre den med smarttelefonen ved å klikke på Par:

Trinn 3: Etter å ha tappet på en Par, Mobiltelefonen begynner å parre med ESP32 Bluetooth:

Trinn 4: Nå åpner Serial Bluetooth -terminalapplikasjonen og gå til Enheter Fra sidemenyen:

Trinn 5: Når enhetsalternativet er åpnet, vil det be om noen tillatelser eller trykke på FORFRISKE Knapp øverst til høyre:

Trinn 6: Følgende popup vil komme klikk på Innstillinger og la tillatelsen den ber om:

Trinn 7: Nå er ESP32 Board klar til å ta instruksjoner over Bluetooth. Under Bluetooth Classic Alternativ Velg ESP32 -kort:

Trinn 8: Når ESP32 er valgt, vil den begynne å koble seg sammen, og hvis den lykkes, en Tilkoblet Meldingen vises:

Trinn 9: Nå kan vi sende hvilken som helst instruksjon ved å skrive den hit. Type 1 og klikk på Send -knappen, LED på ESP32 -brettet vil slå på. Tilsvarende ved å skrive 0 LED vil slå av:

Tilsvarende kan vi se utgangen på seriell monitor til Arduino IDE hva den mottar:

Produksjon

LED slår seg på etter å ha sendt 1:

LED slår seg av etter å ha sendt 0:

Merk: Vi kan også konfigurere knapper for spesifikke instruksjoner som vist i bildet nedenfor. For å gjøre dette klikk på knappene og angi verdien du ønsker. Her har vi satt to knapper en for høy og annen for lav tilstand. Du kan også konfigurere disse snarveiene i heksadesimale verdier.

2: ESP32 Bluetooth Low Energy (BLE) med Arduino Ide

Ble eller Bluetooth lav energi er en strømsparingsmodus for Bluetooth. Den viktigste applikasjonen inkluderer dataoverføring over korte avstander som dørinngang, smarte klokker, bærbare, blodtrykksmonitor, sikkerhet og hjemmeautomasjoner. BLE kan overføre begrensede data.

I motsetning til Bluetooth -klassiker som forblir slått på for hele tiden, forblir BLE i søvnmodus, bortsett fra når den kalles, eller tilkoblingen startes. Dette gjør BLE veldig kraft effektiv og bruker 100 ganger mindre kraft enn den klassiske.

Ble server og klient

Bluetooth Low Energy støtter enheten på to forskjellige måter som ESP32 kan fungere som server så vel som klient for lav energi Bluetooth.

Ble støtte følgende kommunikasjonsmåter:

  • Punkt til punkt: Kommunikasjon mellom to punkter eller noder som er server og klient.
  • Kringkastingsmodus: Serveren overfører data til mange enheter.
  • Mesh Network: Flere enheter koblet sammen også kjent som mange til mange tilkoblinger.

Når du fungerer som server, annonserer ESP32 sin eksistens til klientenheter i nærheten. Når klientenhetene skanner etter tilgjengelige Bluetooth -enheter, etablerer serveren forbindelse mellom dem og overfører dataene fra server til klientenhet. Denne kommunikasjonen kalles punkt til punkt.

I denne opplæringen vil vi ta et eksempel på punkt-til-punkt-kommunikasjon mellom to ESP32-brett.

Viktige vilkår i BLE

Her er noen viktige begrep som man bør vite mens man jobber med ESP32 BLE -applikasjoner:

GATT: GATT eller generiske attributter som definerer en hierarkisk struktur for dataoverføringer mellom BLE -enheter ved bruk av tjeneste og karakteristikk. Den definerer måten to enheter kommuniserer data mellom dem.

Ble tjeneste: Toppnivå inne i GATT -hierarkiet er en profil som inneholder en eller flere tjenester. Ble har mer enn en tjeneste. Hver av disse tjenestene har sine egne egenskaper som også kan fungere som referanse for andre tjenester.

Ble karakteristisk: Karakteristikk er en gruppe informasjon som alltid er eid etter tjeneste; Det er der faktiske data lagres i hierarki (verdi). Den inneholder alltid to attributter:

  • Erklæring: Karakteristiske egenskaper som plassering, skriv, les, skriv og varsler.
  • Karakteristisk verdi: Dataverdi av karakteristikk.

Uuid: UUID (universelt unik identifikator) er gitt til hver tjeneste og karakteristikk. Det er en unik 128-bits ID som kan genereres ved hjelp av en hvilken som helst online UUID-generator. Sjekk denne gratis UUID -generatoren. En prøve UUID ser slik ut:

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

En Universal Bluetooth Special Interest Group (SIG) har forhåndsdefinert noen av de forkortede UUID -ene for forskjellige typer tjenester og profil, for å lese dem klikk her.

Sett opp BLE i ESP32 med Arduino Ide

For å forstå arbeidet med BLE vil vi bruke to forskjellige ESP32 -brett, en av dem vil fungere som server og annonsere et Bluetooth -signal mens den andre ESP32 som fungerer som en klient vil prøve å koble serveren Bluetooth.

Arduino IDE har separate eksempler for både skanner og server.

For å se hvordan du installerer et ESP32 -brett med Arduino IDE i Windows, klikk her.

ESP32 BLE -server

Først vil vi laste opp servereksempelkode i vårt første ESP32 -brett som fungerer som en server.

For å åpne BLE -servereksemplet, gå til: Fil> Eksempler> ESP32 ble arduino> ble_server:

Den gitte koden nedenfor vil bli åpnet i Arduino IDE.

Serverkode

Last opp koden nedenfor i ESP32 -styret ved å bruke Arduino IDE, men sørg for å koble fra det andre tavlen en stund for å unngå å laste opp den samme koden til et enkelt brett:

#inkludere
#inkludere
#inkludere
#define Service_uuid "4FAFC201-1FB5-459E-8FCC-C5C9C331914B"
#Define karakteristikk_uuid "BEB5483E-36E1-4688-B7F5-EA07361B26A8"
void setup ()
Serie.Begin (115200);
Serie.Println ("Start Ble Work!");
BleDevice :: init ("ESP32");
Bleserver *PSERVER = BLEDEVICE :: CREATESERVER ();
Bleservice *Pservice = Pserver-> CreateService (Service_uuid);
Blecharacteristic *pCharacteristic = Pservice-> CreateCharacteristic (
Karakteristisk_uuid,
Blecharacteristics :: Property_read |
Blecharacteristics :: Property_write
);
Pcharacteristic-> setValue ("Hallo Si Linuxhint.com ");
Pservice-> start ();
// BLEADVERTISING *PADVERTISING = PSERVER-> getAdDadVertising (); // dette fungerer fortsatt for bakoverkompatibilitet
BLEADVERTISING *PADVERTISING = BLEDEVICE :: getAdDadVertising ();
Padvertising-> addServiceUUID (Service_uuid);
padvertising-> setScanResponse (true);
Padvertising-> setMinpreferred (0x06); // Funksjoner som hjelper med iPhone -tilkoblingsproblem
Padvertising-> setMinpreferred (0x12);
BleDevice :: startadVertising ();
Serie.Println ("Karakteristikk definert! Ble server klar ");

void loop ()
// legg hovedkoden din her, for å kjøre gjentatte ganger:
forsinkelse (2000);

Koden starter med å inkludere nødvendige Bluetooth -bibliotekfiler. Da er UUID definert for både tjeneste og karakteristisk. Du kan gå med standard UUID eller kan generere ved hjelp av gratis UUID -generatoren. Neste seriell kommunikasjon initialiseres ved å definere baudfrekvens.

Deretter opprettet vi en BLE -enhet som heter ESP32, og etter det definerte vi BLE -enheten som en server ved hjelp av CreateServer () funksjon og senere setter vi den karakteristiske verdien. På det siste trinnet startet vi tjenesten ved å annonsere den slik at andre enheter kan søke etter den.

ESP32 ble skanner

Nå vil vi laste opp et ESP32 -skanneeksempel i det andre ESP32 -styret. Å gjøre dette gå til: Fil> Eksempler> ESP32 ble arduino> ble_scan:

Koden nedenfor vil være åpen i Arduino IDE -redaktør.

Skannerkode

Koden som gis vil bli brukt i Scanner ESP32 -styret. Åpne IDE og last opp koden, husk å koble fra andre tavler før du laster opp skannerkoden.

#inkludere
#inkludere
#inkludere
#inkludere
int -snaut = 5; // på sekunder
Blescan* pblescan;
klasse MyAdnertisedDeviceCallbacks: Public BleadvertisedDeviceCallbacks
void onResult (BleadvertisedDevice annonsertDevice)
Serie.printf ("Annonsert enhet: %s \ n", annonsert innhold.toString ().c_str ());

;
void setup ()
Serie.Begin (115200);
Serie.println ("skanning ...");
BleDevice :: init ("");
Pblescan = BleDevice :: getScan (); // Lag ny skanning
pBlescan-> setAdDeDisedDeviceCallbacks (New MyAdDeDisedDeviceCallbacks ());
pblescan-> setActivesCan (true); // aktiv skanning bruker mer kraft, men få resultater raskere
Pblescan-> setInterval (100);
Pblescan-> setWindow (99); // mindre eller lik settintervalverdi

void loop ()
// legg hovedkoden din her, for å kjøre gjentatte ganger:
BlescanResults FoundDevices = Pblescan-> Start (Scantime, False);
Serie.print ("enheter funnet:");
Serie.Println (FoundDevices.getCount ());
Serie.println ("skanning gjort!");
Pblescan-> clearResults (); // Slett resultater fra blescanbuffer for å frigjøre minne
forsinkelse (2000);

Over koden vil søke etter antall totale tilgjengelige enheter for BLE og vise deres totale telling med adresser. Etter å ha lastet opp koden i ESP32 Scanner Board, trykk på Muliggjøre Button, ESP32 Board vil automatisk søke etter tilgjengelige enheter:

Produksjon

Når ESP32 skanner de tilgjengelige enhetene, vises følgende resultat. Her skannet ESP32 9 enheter som en er et ESP32 -brett med BLE_Server -kode og en annen enhet er MI Band 6. Resten av alle enhetene er tilgjengelige i nærheten av ESP32.

Hvordan fikse ESP32 ble skannebibliotek ikke telle enheter

ESP32 Scan Library -eksemplet har en feil om å ikke telle det totale antallet enheter. For å rette opp dette problemet, gå til det nevnte stedet og erstatte koden gitt nedenfor:

C: \ Brukere \ Brukernavn \ AppData \ Local \ Arduino15 \ Pakker \ ESP32 \ Maskinvare \ ESP32 \ 1.0.6 \ biblioteker \ ble \ src \ blescan.CPP

Husk å Unhide Alle mappene fordi AppData -mappen i C -katalogen forblir skjult som standard. Etter å ha åpnet Ble_Scan -kildefilen .CPP Bytt ut den gitte tilstanden nedenfor inne i koden:

if (m_padvertisedDeviceCallbacks)
m_padvertisedDeviceCallbacks-> onresult (*annonsertDevice);

hvis (!m_wantduplicates && !funnet)
m_scanResults.M_Vector AdvertisedDevices.Sett inn (std :: par(Annonsert adresse.toString (), annonsertDevice));
burde delete = falsk;

Testing ESP32 ble server med smarttelefon

De fleste av de moderne smarttelefonene jobber med BLE -teknologi for å kommunisere med forskjellige enheter som smartwatch, wearables, sensorer og andre hjemmeautomatiseringsenheter. Her er ESP32 et tilgangspunkt for enheter. Så vi vil koble en Android -telefon med et ESP32 -brett.

BLE serverkode for ESP32 smarttelefontilgang

Last opp nedenfor gitt kode i ESP32 -brettet:

#include /*Bluetooth -bibliotek inkludert* /
#inkludere
#inkludere
#define service_uuid "A484A399-7272-4282-91CF-9018E075FC35"
#Define karakteristikk_uuid "C7E084BD-5279-484D-8319-FFF7D917537D"
Klasse MyCallbacks: Offentlige BlecharacteristicCallbacks

void onwrite (Blecharacteristic *pcharacteristic)

std :: strengverdi = pCharacteristic-> getValue ();
hvis (verdi.lengde ()> 0)

Serie.print ("Oppdatert karakteristisk verdi:");
for (int i = 0; i Createservice (Service_uuid);
Blecharacteristic *pCharacteristic = Pservice-> CreateCharacteristic (
Karakteristisk_uuid,
Blecharacteristics :: Property_read |
Blecharacteristics :: Property_write
);
pCharacteristic-> setCallbacks (nye MyCallbacks ());
Pcharacteristic-> setValue ("Linuxhint.Com ");
Pservice-> start ();
BLEADVERTISING *PADVERTISING = PSERVER-> getAdDadStising ();
Padvertising-> start ();

ugyldig sløyfe ()

forsinkelse (2000);

Installere BLE -applikasjonen i Android -smarttelefon

Følgende trinn vil lede deg til å installere BLE -applikasjoner i smarttelefoner og hjelpe til med å grensesnitt mobile enheter med ESP32 -tavler.

Trinn 1: Åpne Google Play Store Install Ble skanner applikasjon:

Steg 2: Etter å ha installert, åpner du applikasjonen og tillater all nødvendig tillatelse og husk å slå på Mobile Bluetooth:

Trinn 3: Skann nå etter tilgjengelige Bluetooth -enheter. Connect ESP32 Board:

Trinn 4: Når ESP32 -brettet er koblet til smarttelefon etter spesifikasjon av ESP32 -brettet, vises. Her kan vi se UUID -adressene og kan lese og skrive nye karakteristiske verdier:

Trinn 5: For å lese den lagrede karakteristiske verdien klikk R. Resultatet vises som nevnt i bildet nedenfor:

Trinn 6: For å skrive en ny karakteristisk verdi klikk W:

Trinn 7: En ny pop-up vil vises her der vi kan skrive hvilken som helst karakteristisk verdi og klikke Ok:

Trinn 8: Ny verdi som er skrevet vil vises som vist i bildet:

Trinn 9: Vi kan også se den samme nye karakteristiske verdien som er trykt på seriemonitoren til Arduino IDE:

Vi har koblet sammen en enhet med ESP32 BLE.

Konklusjon

ESP32 kommer med dobbel Bluetooth som er Bluetooth Classic og Bluetooth lav energi. Her i denne artikkelen diskuterte vi både Bluetooth Classic og BLE og dens forskjellige applikasjoner og fungerer. Bluetooth Classic brukes til høy dataoverføring mens BLE (Bluetooth lav energi) brukes til korte avstander med mindre strømbehov. Denne artikkelen gir en Ultimate Guide to ESP32 Board Bluetooth Working og hvordan du konfigurerer dem.