ESP32 Bluetooth SPP oraz prosty beacon

Ostatnio udało nam się wspólnie skonfigurować Arduino IDE do pracy z ESP32. W dzisiejszym artykule pokażę Wam jak wykorzystać najbardziej rzucającą się w oczy funkcję wyróżniającą ESP32 od ESP8266 – moduł bluetooth.

Moduł bluetooth w ESP32 da się wykorzystać na kilka sposobów – między innymi jako urządzenie typu SPP (Serial Port Profile) oraz beacon. Poza tymi dwoma możemy także postawić klienta i serwer BLE, ale o tym w innym artykule, bo to grubsza sprawa i wymaga dokładniejszego omówienia ;)

Serial Port Profile (SPP)

Często spotyka się też określenie RFCOMM. Czym jest ów tajemniczy SPP? Najprościej mówiąc jest to to samo, co mamy jeżeli podłączymy do Arduino moduł taki jak np. HC-05. No prawie to samo, bo ESP32 ma to już out-of-box i taki ficzer nie zużywa nam żadnych dodatkowych pinów. W przypadku Arduino musielibyśmy poświęcić na to piny sprzętowego portu szeregowego, lub zrobić to programowo (co prawdopodobnie uniemożliwiłoby nam korzystanie z niektórych PWMów). Dodatkową zaletą takiego sprzętowego modułu bluetooth jest to, że to co na niego przyjdzie możemy debugować od razu na monitorze portu szeregowego wbudowanego w Arduino IDE (przekierowując to co złapiemy przez bluetooth na Serial) bez żadnych kombinacji alpejskich. No dobra nagadałem się, ale nic z tego nie wynika. Przejdźmy więc do przykładu, abyście zobaczyli jakie to proste:

#include "BluetoothSerial.h"

BluetoothSerial bluetooth;

void setup() {
  Serial.begin(115200);
  bluetooth.begin("Nettigo Bluetooth");
  Serial.println("Gotowe");
}

void loop() {
  bluetooth.println("Wysylanie testowych danych :)");
  delay(1000);
}

W powyższym prostym przykładzie ustalamy zmienną globalną typu BluetoothSerial o nazwie bluetooth. Następnie uruchamiamy moduł bt za pomocą wywołania funkcji begin jako parametr podając nazwę naszego urządzenia bluetooth. Po takiej konfiguracji w funkcji loop() wypisujemy do klienta bluetooth wiadomość „Wysylanie testowych danych :)” co 1 sekundę.

Już na pierwszy rzut oka widać, że obsługa takiego modułu bluetooth jest identyczna jak zwykłego portu szeregowego w Arduino. To oznacza, że możemy tu łatwo przeportować nasz przykład z artykułu „Prosty parser stringów na Arduino / Teensy„.

Beacon

Drugą funkcjonalnością, którą chciałbym tutaj omówić jest możliwość postawienia podstawowego beacona bluetooth w prosty sposób. Czym jest beacon? To urządzenie, które jedyne co robi to rozgłasza swoją nazwę dzięki czemu pisząc specjalną aplikację na telefon możemy wyświetlać użytkownikowi różną zawartość w zależności od tego, czy jest w pobliżu beacona. Innym ciekawym sposobem jest też zrobienie czujnika np. temperatury w ten sposób. Wystarczy, że np. 5 sekund będziemy aktualizowali nazwę naszego beacona dodając do niej aktualną temperaturę.

Aby uruchomić beacon bluetooth na ESP32 wystarczy nam kod taki jak poniżej:

#include "SimpleBLE.h"

SimpleBLE beacon;

void setup() {
    beacon.begin("Nettigo Beacon");
}

void loop() {
}

Metodę begin() na obiekcie beacon możemy wykonać w dowolnym miejscu w kodzie. Nazwa naszego beacona zostanie wtedy zaktualizowana. Do takiego beacona nie możemy się podłączyć.