Samouczek esptop 10 BLE za pomocą Arduino IDE

Samouczek esptop 10 BLE za pomocą Arduino IDE
ESP32 to płyta mikrokontrolera oparta na IoT, która jest wyposażona w wstępnie zainstalowane Wi-Fi i podwójny Bluetooth. Zarówno WiFi, jak i Bluetooth odgrywają kluczową rolę podczas wymiany danych między urządzeniami w zakresie komunikacji bezprzewodowej.

ESP32 ma obsługę zarówno Bluetooth Classic, jak i Bluetooth Low Energy. Tutaj skupimy się na Bluetooth Low Energy. Zobaczmy to szczegółowo.

Co to jest Bluetooth Low Energy

Ble lub Bluetooth Low Energy to tryb oszczędzania energii Bluetooth. Jego główna aplikacja obejmuje transfer danych na krótkie odległości, takie jak wejście do drzwi, inteligentne zegarki, urządzenia do noszenia, monitorowanie ciśnienia krwi, bezpieczeństwo i automatyzacja domowa. 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 połączenie. To sprawia, że ​​BLE jest bardzo wydajne i zużywa 100 razy mniej mocy niż klasyczny.

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.

Serwer BLE i klient

Bluetooth Low Energy obsługuje urządzenie na dwa różne sposoby: serwer i klient. ESP32 może działać zarówno jako serwer, jak i klient dla Bluetooth o niskiej energii.

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 podłączonych urządzeń znanych również do wielu połączeń.

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 zawiera 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) to unikalny identyfikator usługi i charakterystyki. 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ć 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ąć przesł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*PADIVERSION = pserver-> getAdverting ();/*Zgodność wsteczna*/
BLEDVERTING *PADVERTING = BLEDEVICE :: getAdverting ();
Padvertising-> addServiceUuid (service_uuid);
Padvertising-> setScanResponse (true);
Padvertising-> setMinpreferred (0x06); // Funkcje połączenia iPhone
Padvertising-> setMinpreferred (0x12);
Bledevice :: startadverting ();
Seryjny.println (”zdefiniowane charakterystyczne! Gotowy serwer BLE ”);

void Loop ()
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. 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

#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); // szybki skan, ale więcej mocy używanej
pBLescan-> setInterval (100);
pblescan-> setWindow (99);

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, aby bezpłatna 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 address.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 domów. Tutaj płyta ESP32 będzie działać jako punkt dostępu. 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 wartości charakterystyczne.

Krok 5: Aby odczytać zapisane charakterystyczne kliknięcie wartości R. Wynik zostanie wyświetlony.

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

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

Krok 8: Pojawi się nowa wartość, która jest napisana.

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óry jest klasyczny i niski energia. Tutaj w tym artykule omówiliśmy BLE i jego różne aplikacje i działanie. Później skonfigurowaliśmy BLE z dwoma różnymi płytami ESP32 z jedną działającą jako serwer, a drugi jako skaner. W końcu podłączyliśmy nasz smartfon z serwerem ESP32 i napisaliśmy nową wartość charakterystyczną.