ESPTOP 10 Bluetooth - Ultimate Guide

ESPTOP 10 Bluetooth - Ultimate Guide
ESP32 to tablica oparta na mikrokontrolerze, która jest wyposażona w obsługę Wi-Fi i Bluetooth. Jest to płyta oparta na IoT, którą można zintegrować z wieloma czujnikami do wykonywania instrukcji. Płyta ESP32 ma szeroką aplikację, w której wymagana jest komunikacja bezprzewodowa.

ESP32 obsługuje podwójny Bluetooth zawierający Bluetooth Classic i Bluetooth Low Energy (BLE). W tym artykule będziemy omawiać działanie obu tych Bluetooth.

Oto krótkie porównanie klasyki Bluetooth z Bluetooth Low Energy:

Specyfikacja Bluetooth Classic Bluetooth Low Energy/Ble
Prędkość przesyłu danych 2-3 Mbps 1 Mbps
Zakres ~ 10-100m ~ 50m
Częstotliwość robocza 79 RF 40 RF
Szczytowe zużycie prądu ~ 30ma <15mA
Pobór energii 1W 0.01-0.5w
Całkowity czas na wysłanie danych 100 ms 3MS
Aplikacje Audio, strumieniowanie muzyki Czujnik, urządzenia do noszenia

Aby uzyskać bardziej szczegółowe porównanie, kliknij tutaj, aby odwiedzić oficjalną stronę Bluetooth.

Poniżej znajdują się dwa tryby Bluetooth dostępne na płycie ESP32:

  • Bluetooth Classic
  • Bluetooth Low Energy (BLE)

1: ESP32 Bluetooth Classic z Arduino Ide

Płyta ESP32 jest wyposażona w podwójną obsługę Bluetooth jeden jest Bluetooth Classic, a drugi to Ble (Bluetooth Low Energy). Dzisiaj będziemy omawiać tylko Bluetooth Classic. Jedyną różnicą, która istnieje między nimi obojga, polega na tym, że Bluetooth Classic może obsłużyć dużo transferu danych, ale zużywa baterię z wyższą prędkością, jednak Bluetooth Low Energy jest wariantem oszczędzającym energię, który jest używany do komunikacji z krótkimi dystansem. BLE pozostaje w trybie uśpienia, dopóki nie zostanie zainicjowany w celu przesyłania danych.

ESP32 Bluetooth Classic Serial Communication

ESP32 jest wyposażony w wbudowane moduły Bluetooth, które najpierw odbierają dane, a następnie przekazują je do procesora XTENSA. Tak więc, aby ustalić tę komunikację „BluetoothSerial” Używana jest biblioteka, która jest podobna do biblioteki szeregowej Arduino, ale jest tylko w ESP32. Poniżej przedstawiono niektóre funkcje oferowane przez Bluetooth Serial Library:

  • zaczynać()
  • dostępny()
  • pisać()
  • Czytać()

LED kontrolowany przez Bluetooth za pomocą ESP32

Napiszmy prosty kod, który może kontrolować diodę LED przy użyciu mobilnego Bluetooth przez bezprzewodową komunikację Bluetooth. Poniżej znajduje się sprzęt wymagany do kontrolowania LED za pomocą komunikacji szeregowej Bluetooth:

  • ESP32
  • PROWADZONY
  • Tablica chleba
  • Urządzenie z Androidem
  • Serial Bluetooth Terminal Application

Okrążenie

Połącz diodę LED przy cyfrowym PIN 15 ESP32 z ujemnym zaciskiem podłączonym na GND płyty ESP32. W przypadku bezpiecznego limitu prądu możemy również podłączyć między nimi rezystor (220 omów):

Kod

Otwórz Arduino IDE i wybierz płytę ESP32 w menedżerze zarządu, aby zobaczyć, jak zainstalować płytę ESP32 w Arduino IDE. Po wybraniu płyty napisz poniższy kod w oknie edytora:

#include /*Bluetooth Serial Communication Library* /
#Define LED_PIN 15 /*LED Pin zainicjowany* /
BluetoothSerial Serialbt;
bajt bt_inp;
#Jeśli !zdefiniowane (config_bt_enabled) || !zdefiniowane (config_bleuedroid_enabled)/*Sprawdź Bluetooth w SDK*/
#error Bluetooth poza-prowadzę „Make Menuconfig”, aby to włączyć
#endif
void Setup ()

pinmode (LED_PIN, wyjście); /*Zestaw szpilki LED jako wyjście*/
Seryjny.rozpocząć (115200); /*Wskaźnik transmisji seryjnej*/
Serialbt.zaczynać(); /*Zaczyna się komunikacja Bluetooth*/
Seryjny.println („Bluetooth jest gotowy do sparowania…”); /*Gdy Bluetooth włącza*/

Void Loop ()

if (serialbt.Dostępne ()) /*Sprawdź dostępność danych Bluetooth* /

BT_INP = serialbt.Czytać(); /*Odczytaj dane Bluetooth z urządzenia*/
Seryjny.Write (bt_inp); /*Wydrukuj dane odczytu*/

if (bt_inp == '1') /*Jeśli warunek dla stanu LED* /

DigitalWrite (LED_PIN, High); /*Włącz diodę LED, jeśli otrzymano 1 wejście*/

if (bt_inp == '0')

DigitalWrite (LED_PIN, Low);/*wyłącz LED, jeśli odbiera 0 wejścia*/

Tutaj, w powyższym kodzie, zaczęliśmy od włączenia biblioteki szeregowej Bluetooth dla ESP32. Następnie dołączyliśmy funkcje biblioteki szeregowej Bluetooth, które włączą ESP32 Bluetooth.

Następny pin LED 15 jest inicjowany i używa pinmode () Funkcja Pin LED jest ustawiona jako wyjście.

W częściowej części kodu programu sprawdzi, czy nie ma seryjnej dostępności danych Bluetooth. Jeśli dane wejściowe to 1 dioda LED, włączy się i jeśli otrzymane dane wynoszą 0 diody LED, wyłączy się.

Po przesłaniu kodu. Bluetooth na płycie ESP32 włączy się, a na monitorze szeregowym pojawi się następujący komunikat:

Instalowanie seryjnego terminalu Bluetooth na smartfonie

Potrzebujemy urządzenia Bluetooth, które może wysyłać instrukcje do ESP32, abyśmy używali smartfona z Androidem do interfejsu z ESP32 Bluetooth. Najpierw musimy zainstalować terminal seryjny w telefonie z Androidem. Postępuj zgodnie z poniższymi krokami, aby połączyć się z telefonem Android z ESP32:

Krok 1: Otwórz sklep Google Play na smartfonie i wyszukaj Serial Bluetooth Terminal. Zainstaluj poniższą aplikację:

Krok 2: Po zainstalowaniu otwórz ustawienia telefonu komórkowego Bluetooth. Wyszukaj ESP32 Bluetooth i kliknij, aby rozpocząć parowanie go z smartfonem, klikając Para:

Krok 3: Po stukaniu Para, Telefon komórkowy zacznie pary z ESP32 Bluetooth:

Krok 4: Teraz otwórz aplikację seryjnego terminalu Bluetooth i przejdź do Urządzenia Z menu bocznego:

Krok 5: Po otwarciu opcji urządzenia poprosi o pewne uprawnienia lub naciśnij ODŚWIEŻAĆ Przycisk w prawym górnym rogu:

Krok 6: Po wyskakowaniu pojawi się kliknij Ustawienia i pozwól, aby zezwolić: prosi o:

Krok 7: Teraz płyta ESP32 jest gotowa podjąć instrukcje w Bluetooth. Pod Bluetooth Classic Opcja Wybierz płytę ESP32:

Krok 8: Po wybraniu ESP32 zacznie się łączyć, a jeśli się powiedzie, a Połączony Pojawi się wiadomość:

Krok 9: Teraz możemy wysłać dowolne instrukcje, wpisując ją tutaj. Typ 1 i kliknij przycisk Wyślij, LED na płycie ESP32 włączy się. Podobnie, wpisując 0 LED wyłączy się:

Podobnie widzimy dane wyjściowe na monitorze szeregowym Arduino IDE, co odbiera:

Wyjście

LED włącza się po wysłaniu 1:

LED wyłącza się po wysłaniu 0:

Notatka: Możemy również skonfigurować przyciski dla określonych instrukcji, takich jak pokazane na obrazie poniżej. Aby to zrobić, kliknij przyciski i ustaw żądaną wartość. Tutaj ustawiliśmy dwa przyciski jeden na wysoki, a drugi dla niskiego stanu. Możesz także skonfigurować te skróty w wartościach szesnastkowych.

2: ESP32 Bluetooth Low Energy (BLE) z Arduino IDE

Ble lub Bluetooth Low Energy to tryb oszczędzania energii Bluetooth. Jego główna aplikacja obejmuje transfer danych na krótkich odległościach, takich jak wejście do drzwi, inteligentne zegarki, urządzenia do noszenia, monitorowanie ciśnienia krwi, bezpieczeństwo i automatyzacje domowe. BLE może przesyłać ograniczone dane.

W przeciwieństwie do Bluetooth Classic, który pozostaje włączony przez cały czas BLE pozostaje w trybie uśpienia, z wyjątkiem tego, że jest wywoływany lub inicjowane jest połączenie. To sprawia, że ​​BLE jest bardzo wydajne i zużywa 100 razy mniej mocy niż klasyczny.

Serwer BLE i klient

Bluetooth Low Energy obsługuje urządzenie na dwa różne sposoby ze względu.

BLE WSPARCIE PRZEDSTAWIOWE MODY KOMUNIKACJI:

  • Punkt do punktu: Komunikacja między dwoma punktami lub węzłami, które są serwerem i klientem.
  • Tryb nadawania: Serwer przesyła dane do wielu urządzeń.
  • Siatka stacji: Wiele urządzeń połączonych razem znanych również z wieloma połączeniami.

Działając jako serwer, ESP32 reklamuje swoje istnienie do pobliskich urządzeń klientów. Gdy urządzenia klienckie zeskanują dostępne urządzenia Bluetooth, serwer ustanawia połączenie między nimi a przesyła dane z serwera do urządzenia klienckiego. Ta komunikacja nazywa się punktem punktu.

W tym samouczku weźmiemy przykład komunikacji punkt-punkt między dwoma płytami ESP32.

Ważne warunki w BLE

Oto kilka ważnych terminów, które należy znać podczas pracy z aplikacjami ESP32 BLE:

Gatt: GATT lub atrybuty ogólne, które definiują hierarchiczną strukturę dla transferów danych między urządzeniami BLE przy użyciu usługi i charakterystyki. Określa sposób, w jaki dwa urządzenia przekazują między nimi dane.

BLE Service: Najwyższy poziom wewnątrz hierarchii GATT to profil, który zawiera jedną lub więcej usług. BLE ma więcej niż jedną usługę. Każda z tych usług ma swoje własne cechy, które mogą również działać jako odniesienie do innych usług.

BLE Charakterystyka: Charakterystyka to grupa informacji zawsze należących do służby; To tam, gdzie faktyczne dane są przechowywane w hierarchii (wartość). Zawsze zawiera dwa atrybuty:

  • Deklaracja: Charakterystyczne właściwości, takie jak lokalizacja, typ, odczyt, zapisz i powiadom.
  • Wartość charakterystyczna: Wartość danych o charakterystyce.

UUID: UUID (uniwersalnie unikalny identyfikator) jest podawany każdej usłudze i charakterystycznej. Jest to unikalny 128-bitowy identyfikator, który można wygenerować za pomocą dowolnego generatora UUID online. Sprawdź ten bezpłatny generator UUID. Próbka UUID wygląda tak:

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

Universal Bluetooth Specjalna grupa zainteresowań (SIG) predefiniowała niektóre z skróconych UUID dla różnych rodzajów usług i profilu, aby je przeczytać.

Ustaw BLE w ESP32 z Arduino IDE

Aby zrozumieć działanie BLE, będziemy używać dwóch różnych tablic ESP32, jedna z nich będzie działać jako serwer i reklamuj sygnał Bluetooth, a drugi ESP32, który działa jako klient spróbuje podłączyć serwer Bluetooth.

Arduino IDE ma osobne przykłady zarówno dla skanera, jak i serwera.

Aby zobaczyć, jak zainstalować płytę ESP32 z Arduino IDE w systemie Windows, kliknij tutaj.

Serwer BLE ESP32

Najpierw prześlemy przykładowy kod serwera na naszej pierwszej płycie ESP32, która działa jako serwer.

Aby otworzyć przykład serwera BLE, przejdź do: Plik> Przykłady> ESP32 BLE Arduino> Ble_Server:

Poniższy podany kod zostanie otwarty w Arduino IDE.

Kod serwera

Prześlij poniższy kod na płycie ESP32 za pomocą Arduino IDE, ale pamiętaj, aby odłączyć drugą płytę na chwilę, aby uniknąć przesyłania tego samego kodu na jedną płytę:

#włączać
#włączać
#włączać
#Define Service_uuid "4FAFC201-1FB5-459E-8FCC-C5C9C331914B"
#Define Charakterystyka_uuid „BEB5483E-36E1-4688-B7F5-EA07361B26A8”
void setup ()
Seryjny.rozpocząć (115200);
Seryjny.println ("Rozpoczęcie pracy!");
Bledevice :: init („ESP32”);
BLESERVER *PSERVER = BLEDEVICE :: CreateServer ();
BLESERVICE *Observice = Pserver-> CreateService (service_uuid);
Blecharacteristic *paracteristic = uservice-> CreateCharacteristic (
Charakterystyka_uuid,
Blecharacteristic :: Property_read |
Blecharacteristic :: Propert_write
);
pCharacteristic-> setValue („hello say Linuxhint.com ”);
posługę-> start ();
// BLEDVERTING *PADVERTISING = PSERVER-> GETADVERTING (); // To nadal działa na rzecz kompatybilności wstecznej
BLEDVERTING *PADVERTING = BLEDEVICE :: getAdverting ();
Padvertising-> addServiceUuid (service_uuid);
Padvertising-> setScanResponse (true);
Padvertising-> setMinpreferred (0x06); // Funkcje, które pomagają z problemem połączeń iPhone'a
Padvertising-> setMinpreferred (0x12);
Bledevice :: startadverting ();
Seryjny.println (”zdefiniowane charakterystyczne! Gotowy serwer BLE ”);

void Loop ()
// Umieść swój główny kod tutaj, aby działać wielokrotnie:
Opóźnienie (2000);

Kod zaczyna się od włączenia niezbędnych plików biblioteki Bluetooth. Wtedy UUID jest zdefiniowane zarówno dla usług, jak i charakterystyki. Możesz iść z domyślnym UUID lub wygenerować za pomocą bezpłatnego generatora UUID. Następna komunikacja szeregowa jest inicjowana poprzez zdefiniowanie wskaźnika transmisji.

Następnie utworzyliśmy urządzenie BLE o nazwie ESP32, a następnie zdefiniowaliśmy urządzenie BLE jako serwer za pomocą createServer () funkcja, a później ustawiamy wartość charakterystyczną. Na ostatnim kroku rozpoczęliśmy usługę, reklamując ją, aby inne urządzenia mogły jej wyszukiwać.

Skaner ESP32 BLE

Teraz przesłamy przykład skanowania ESP32 na drugiej tablicy ESP32. Aby to zrobić, przejdź do: Plik> Przykłady> ESP32 BLE Arduino> Ble_scan:

Poniższy kod zostanie otwarty w Edytorze Arduino IDE.

Kod skanera

Podany kod zostanie użyty na tablicy skanera ESP32. Otwórz IDE i prześlij kod, pamiętaj o odłączeniu innych płyt przed przesłaniem kodu skanera.

#włączać
#włączać
#włączać
#włączać
int scantime = 5; //W sekundy
Blescan* pblescan;
klasa myadvertisedDeviceCallbacks: public bleadvertedDeviceCallbacks
void onResult (bledevertisedDevice reklamowanyDevice)
Seryjny.printf („Urządzenie reklamowane: %s \ n”, reklamowany device.ToString ().c_str ());

;
void setup ()
Seryjny.rozpocząć (115200);
Seryjny.println („skanowanie…”);
Bledevice :: init („”);
pblescan = bledevice :: getcan (); // Utwórz nowy skan
pblescan-> setadvertisedDeviceCallbacks (New MyAdvertisedDeviceCallbacks ());
pblescan-> setActivesCan (true); // aktywny skan zużywa więcej mocy, ale uzyskaj wyniki szybciej
pBLescan-> setInterval (100);
pblescan-> setWindow (99); // mniej lub równa wartość setInterval

void Loop ()
// Umieść swój główny kod tutaj, aby działać wielokrotnie:
BlescanResults FoundDevices = pBLescan-> start (skandim, false);
Seryjny.print („Urządzenia znalezione:”);
Seryjny.println (FoundDevices.getCount ());
Seryjny.println („Skanowanie zrobione!");
pblescan-> clearResults (); // usuń wyniki z bufora Blescan, aby zwolnić pamięć
Opóźnienie (2000);

Powyższy kod będzie wyszukiwać liczbę całkowitych dostępnych urządzeń dla BLE i wyświetli całkowitą liczbę z adresami. Po przesłaniu kodu na płycie skanera ESP32 Naciśnij Włączać Przycisk, płyta ESP32 automatycznie wyszukuje dostępne urządzenia:

Wyjście

Gdy ESP32 skanuje dostępne urządzenia, pojawi się następujący wynik. Tutaj ESP32 zeskanował 9 urządzeń, wśród których jedno to płyta ESP32 z kodem Ble_Server, a innym urządzeniem jest Mi Band 6. Reszta wszystkich urządzeń jest dostępna w pobliżu mojego ESP32.

Jak naprawić bibliotekę skanowania ESP32 BLE, nie licząc urządzeń

Przykład biblioteki SCAN ESP32 ma błąd, który nie liczy całkowitej liczby urządzeń. Aby naprawić ten problem, przejdź do wspomnianej lokalizacji i wymień kod podany poniżej:

C: \ Użytkownicy \ nazwa użytkownika \ appData \ Local \ arduino15 \ pakiety \ esp32 \ hardware \ esp32 \ 1.0.6 \ biblioteki \ ble \ src \ blescan.CPP

Pamiętaj by Odłącz Wszystkie foldery, ponieważ folder AppData w katalogu C pozostaje domyślnie ukryty. Po otwarciu pliku źródłowego BLE_SCAN .CPP Wymień poniższy warunek w kodzie:

if (m_padvertisedDeviceCallbacks)
m_padvertisedDeviceCallbacks-> onResult (*reklamowany device);

Jeśli (!M_WantDuplicates && !znaleziony)
m_scanResults.M_VectorAdvertisedDevices.wstaw (std :: para(Reklamowany Adddress.TOSTRING (), reklamowany DEVICE));
cishDelete = false;

Testowanie serwera BLE ESP32 ze smartfonem

Większość nowoczesnych smartfonów współpracuje z technologią BLE w celu komunikowania się z różnymi urządzeniami, takimi jak smartwatch, urządzenia do noszenia, czujniki i inne urządzenia do automatyzacji domowej. Tutaj ESP32 jest punktem dostępu dla urządzeń. Więc połączymy telefon z Androidem z płytą ESP32.

Kod serwera BLE dla dostępu do smartfonów ESP32

Prześlij poniższy kod na płycie ESP32:

#include /*biblioteka Bluetooth zawiera* /
#włączać
#włączać
#Define Service_uuid "A484A399-7272-4282-91cf-9018e075fc35" "
#Define Charakterystyka_uuid "C7E084BD-5279-484D-8319-FFF7D917537D"
MyCallback klasy: publiczne blecharacteristicCallbacks

void onwrite (blecharacteristic *paracteristic)

std :: String wartość = pCharacteristic-> getValue ();
if (wartość.długość ()> 0)

Seryjny.print („zaktualizowana wartość charakterystyczna:”);
for (int i = 0; i createService (service_uuid);
Blecharacteristic *paracteristic = uservice-> CreateCharacteristic (
Charakterystyka_uuid,
Blecharacteristic :: Property_read |
Blecharacteristic :: Propert_write
);
pCharacteristic-> setCallbacks (new myCallbacks ());
paracteristic-> setValue („Linuxhint.Com ”);
posługę-> start ();
BLEDVERTING *PADVERTING = PSERVER-> GETADVERTING ();
Padvertising-> start ();

Void Loop ()

Opóźnienie (2000);

Instalowanie aplikacji BLE w smartfonie z Androidem

Poniższe kroki poprowadzą Cię do instalacji aplikacji BLE w smartfonach i pomoże w interfejsie urządzeń mobilnych z płytkami ESP32.

Krok 1: Otwórz instalację sklepu Google Play Store Skaner BLE aplikacja:

Krok 2: Po zainstalowaniu otwórz aplikację i zezwól na wszystkie wymagane pozwolenie i pamiętaj o włączeniu mobilnego Bluetooth:

Krok 3: Teraz skanuj dostępne urządzenia Bluetooth. Połącz płytę ESP32:

Krok 4: Po podłączeniu płyty ESP32 ze smartfonem po specyfikacji płyty ESP32 będzie. Tutaj możemy zobaczyć adresy UUID i możemy czytać i pisać nowe charakterystyczne wartości:

Krok 5: Aby odczytać zapisane charakterystyczne kliknięcie wartości R. Wynik zostanie wyświetlony, jak wspomniano na zdjęciu poniżej:

Krok 6: Aby napisać dowolny nowy charakterystyczny kliknięcie wartości W:

Krok 7: Pojawi się tutaj nowe wyskakujące okienko, w którym możemy napisać dowolną wartość charakterystyczną i kliknąć OK:

Krok 8: Nowa wartość, która jest napisana, pojawi się, jak pokazano na obrazie:

Krok 9: Możemy również zobaczyć tę samą nową charakterystyczną wartość wydrukowaną na monitorze szeregowym Arduino IDE:

Z powodzeniem podłączyliśmy urządzenie z ESP32 Ble.

Wniosek

ESP32 jest wyposażony w podwójny Bluetooth, które są Bluetooth Classic i Bluetooth Low Energy. Tutaj w tym artykule omówiliśmy zarówno Bluetooth Classic, jak i BLE oraz jego różne aplikacje i działanie. Bluetooth Classic jest używany do wysokiego transferu danych, podczas gdy BLE (Bluetooth Low Energy) jest używany na krótkie odległości z mniejszymi wymaganiami zasilania. W tym artykule zawiera ostateczny przewodnik po działaniu Bluetooth ESP32 i jak je skonfigurować.