Arduino Uno oraz Bluetooth XM-15B SPP

Przy pracy nad różnymi projektami IoT przychodzi taki czas, w którym chcielibyśmy nasz mikrokontroler wystawić na „świat”. Wymyślona logika jest już gotowa, teraz czas sterować nią chociażby z telefonu czy innego urządzenia. Jednym z możliwych i dość oczywistych sposobów rozwiązania tego problemu jest wyposażenie naszego układ w moduł Bluetooth.

Na rynku jest wiele dostępnych tego typu urządzeń. Ja do swojego projektu wybrałem moduł XM-15B SPP ponieważ ma całkiem niezłe opinie wśród użytkowników. Jego cena także jest akceptowalna i z łatwością można go nabyć w granicach 30 zł w polskiej dystrybucji (bezpośrednio z Chin pewnie dużo taniej). Ale równie dobrze poniższy opis będzie miał podobne zastosowanie w przypadku jego starszych braci HC-05 czy HC-06.

Specyfikacja XM-15B SPP

Opisywany moduł spełnia specyfikację Bluetooth SPP w standardzie 2.1+EDR. O profilu SPP jeszcze powiemy sobie coś więcej, ale na początek zajmijmy się analizą naszego układu komunikacyjnego w ogólności.

Moduł XM-15B posiada dwa tryby pracy:

  • tryb danych (Data mode)
  • tryb poleceń (Command mode)

W trybie danych układ przesyła dane ze sparowanym urządzeniem. Natomiast w trybie poleceń mamy możliwość konfiguracji parametrów urządzenia poleceniami AT. O samej konfiguracji powiemy sobie coś więcej dalej.

Zadaniem modułu jest zestawienie z jednej strony połączenia Bluetooth ze sparowanym urządzeniem, które z drugiej strony wystawia połączenie Interfejsu Szeregowego UART.

Moduł posiada poniższą charakterystykę:

  • Zasilanie: 3.0 V do 6.0 V
  • Logika: 3,3 V i 5 V
  • Pobór prądu: ok. 50 mA
  • Moc nadajnika: Class 2 +10 dBm
  • Zasięg: do 30 m
  • Hasło do parowania: 1234
  • Standard: Bluetooth 2.1 + EDR
  • Profil: SPP z możliwością ustawień poprzez komendy AT
  • Komunikacja: UART (RX, TX)
  • Wymiary: 37 x 16 mm

Niestety dokumentacja do urządzenia jest dość skąpa i marnej jakości. Jest to dokument częściowo automatycznie przetłumaczony z chińskiego na angielski – tak więc wielu rzeczy trzeba się domyślać lub eksperymentować. Dokumentację możesz obejrzeć tutaj:

Wyprowadzenia

NoPortOpis
1CE/CLRTu dokumentacja jest dość niejasna. W normalnym zastosowaniu ten port można pominąć. Według dokumentacji można u producenta zamówić tu specjalną funkcjonalność czyszczenia pamięci. Ponieważ nie jest wymagane podłączenie tego portu – to w naszych rozważaniach pominiemy go.
2VCCZasilanie z przedziału +3.0V do +6.0V
3GNDMasa
4TXDNadawanie w UART
5RXDOdbieranie w UART
6STATEInformacja o stanie urządzenia (sparowane, oczekujące). To samo co na diodzie informującej o stanie urządzenia. Pulsowanie oznacza oczekiwanie na sparowanie, natomiast ciągły sygnał oznacza tryb aktywnego połączenia sparowanych urządzeń.

Domyślna konfiguracja

Moduł domyślnie jest skonfigurowany w poniższy sposób:

  • Speed: 9600
  • Data: 8bit
  • Parity: none
  • Stop bits: 1 bit
  • Flow control: none

Profile Bluetooth BLE vs SPP

Bluetooth BLE oraz SPP są oddzielnymi profilami połączeniowymi w standardzie Bluetooth. Czasami nazywane są one trybem parowania. Podstawową różnicą pomiędzy tymi profilami jest proces samego parowania się z takim modułem.

W przypadku SPP proces taki wymaga dwóch kroków. W pierwszej kolejności musimy sparować system operacyjny (podając w tym miejscu PIN) poprzez ustawienia Bluetooth. Zarówno w PC jak i telefonie odbywa się to poprzez wyszukanie urządzenia i dokonanie parowania. Dopiero w tym momencie w kolejnym kroku pojedyncza aplikacja może podłączyć się do odbiornika Bluetooth (np. Putty czy SerialMagic Gears).

Z drugiej strony tryb LE wymaga jedynie sparowanie się poprzez konkretną aplikację.

Warto tutaj wspomnieć o jednej podstawowej wadzie trybu SPP – nie jest wspierany poprzez urządzenia mobilne firmy Apple (zaskakujące? – chyba nie – bo to standardowa praktyka tego giganta, posiadacz iPhone’a nie jest jego właścicielem, a jedynie użytkownikiem – smutne to). Apple opracował swój standard – profil Bluetooth iAP/MFi w zastępstwie SPP.

Bluetooth SPP (Serial Port Profile) został opracowany jako zamiennik kabla RS-232 do interfejsu szeregowego. Profil ten jest idealnym rozwiązaniem do wysyłania i odbierania danych pomiędzy dwoma urządzeniami. Nie muszą one nawet zdawać sobie sprawy, że nawiązały komunikację bezprzewodową.

Najlepiej obrazuje to poniższy rysunek:

Bluetooth LE (inaczej Bluetooth Smart lub Bluetooth 4.0) jest podstawowym profilem tego standardu zaprojektowanym do optymalnego zużycia energii i prędkości komunikacji. Jednak nie będziemy go tutaj opisywać w szczegółach, bo naszym celem jest profil SPP.

Przykładowe podłączenie modułu do Arduino

Moduł Bluetooth XM-15B SPP można podłączyć do płytki Arduino na dwa zasadnicze sposoby. Pierwszy z nich zakłada podłączenie się w miejsce sprzętowego interfejsu szeregowego UART – tego samego, którego używa się do wgrywania oprogramowania do mikrokontrolera. Jest to zarazem preferowany sposób podłączenia. W tym trybie w zasadzie Arduino nawet nie wie, że dokonuje transmisji bezprzewodowej.

Kolejnym sposobem jest zamontowanie urządzenia na pinach I/O, na których zostanie uruchomiony interfejs programowy (Software Serial). To rozwiązanie działa, jednak posiada wiele ograniczeń wynikających z faktu, że programowa obsługa komunikacji UART wymaga dostępu do zegarów i przerwań mikrokontrolera. W przypadku gdy nasz mikrokontroler intensywnie wykorzystuje w innym układzie zegary i przerwania może dojść do niepożądanych zakłóceń w pracy układu Bluetooth. A w zasadzie to nie chodzi tutaj o część bezprzewodową, ale samą obsługę programową UART, która zacznie się sypać. Z takim problemem możesz się spotkać np. w sytuacji podłączenia programowalnej taśmy LED z jednoczesną obsługą Software Serial, którą będziesz obsługiwał biblioteką FastLED. W takiej sytuacji wykorzystanie Software Serial staje się praktycznie nie możliwe.

Jeśli tylko możesz, to staraj się podłączać moduł XM-15B (lub każdy inny) poprzez Hardware Serial – nawet jeśli wydaje się to mniej wygodne ze względu na wgrywanie oprogramowania. Software Serial może przysporzyć wielu trudnych problemów do zdiagnozowania.

Bluetooth jako Hardware Serial

Podstawowym sposobem podłączenia modułu do płytki Arduino jest umieszczenie go na miejscu sprzętowego interfejsu szeregowego. Tego samego, którego używamy do programowania mikrokontrolera. Sygnał nadawania TX jest na płytce na pinie 1, natomiast sygnał odbierania RX na pinie 0. (Dokładniejszy opis wyprowadzeń znajdziesz np. tutaj: https://botland.com.pl/pl/content/49-arduino-opis-wyprowadze) Jest to rozwiązanie niezawodne i łatwe do zaimplementowania. W zasadzie po stronie oprogramowania nie trzeba niczego specjalnie pisać. Jednakże jest to podłączenie niewygodne w czasie pisania oprogramowania, gdyż na czas wgrywania programu – musimy wypiąć moduł, aby nie blokował on komunikacji z komputerem. Drugim problemem jest dostarczenie zewnętrznego zasilania. W zasadzie nie ma możliwości podłączenia komputera pod port USB i jednocześnie mieć wpięty moduł Bluetooth. Zatem schemat podłączenia układu wygląda tak:

Napiszmy prosty program, który po stronie płytki Arduino będzie nasłuchiwał komunikatów na porcie szeregowym i jak jakiś nadejdzie to będzie wysyłał odebraną wiadomość z powrotem do nadawcy tym samym portem szeregowym – poprzedzając ją napisem „RCV> „:

// Important: Remember to unplug Bluetooth XM-15B while
// uploading sketch, than unplug USB cable and plug Bluetooth.
// Do not use USB Cable and Bluetooth module in same time

void setup() {
  Serial.begin(9600);
}

void loop() {
  // read from serial end echo to sender
  if (Serial.available()){
    String msg = Serial.readStringUntil('\n'); 
    Serial.print("RCV> ");
    Serial.println(msg);
  }
}

Należy tylko pamiętać, że funkcja Serial.readStringUntil ma timeout. I jeśli będziesz wpisywał zbyt wolno wiadomość, to w pewnym momencie program uzna, że jest już jej koniec i odeśle częściową wiadomość do nadawcy. Nie jest to błąd, a jedynie efekt uboczny użytej funkcji.

Po uruchomieniu programu i podłączeniu się do modułu Bluetooth z komputera (o czym przeczytasz dalej jak to wykonać) otrzymujemy poniższe działanie:

Wysłany komunikat powraca do nadawcy z odpowiednim prefiksem. I to tyle w tym temacie.

Bluetooth jako Software Serial

Drugim sposobem podłączenia modułu Bluetooth jest wpięcie go w dwa porty I/O, które będą służyć do programowej emulacji komunikacji UART. Rozwiązanie to ma tę zaletę, że możemy jednocześnie programować urządzenie bez wypinania modułu Bluetooth z płytki. Jednakże należy pamiętać o ograniczeniach związanych z wykorzystaniem przez biblioteki zegarów i przerwań. Może to wzajemnie zakłócać pracę innych układów.

W naszym przykładzie moduł Bluetooth zostanie podłączony według schematu:

Czas zastanowić się nad wykorzystaniem biblioteki do obsługi programowego portu szeregowego. Środowisko Arduino domyślnie dostarcza bibliotekę SoftwareSerial. Nie trzeba jej nawet instalować poprzez Library Managera, bo jest już ona zainstalowana:

Jednakże jest to najgorsza z możliwych opcji. Ta biblioteka jest niewydajna i ogólnie odradzana. Dlatego można się bardzo często spotkać z wypowiedziami innych użytkowników, którzy zalecają wykorzystanie innych alternatywnych bibliotek do obsługi Software Serial. Tego typu wypowiedzi można przeczytać choćby tutaj: https://www.pjrc.com/teensy/td_libs_AltSoftSerial.html lub https://arduino.stackexchange.com/questions/34126/whats-the-difference-between-all-the-software-serial-libraries-which-one-is-ar.

Zazwyczaj najbardziej polecanymi alternatywami są:

  • AltSoftSerial – dostępny także w Library Managerze. Umożliwia jednoczesne odbieranie i nadawanie danych; Zmniejszony negatywny wpływ na inne biblioteki; Wykorzystuje 16 bitowy Timer, który nie może w tym czasie być używany przez inne biblioteki oraz wyłącza sygnał PWM na niektórych portach;
  • NeoSWSerial – także dostępny w Library Managerze. Poprawia wydajność względem standardowej biblioteki; Umożliwia jednoczesne nadawanie i odbieranie danych; Nie wymaga dodatkowych Timerów oraz nie wyłącza przerwania w trakcie RX.

I choć wskazane wyżej alternatywy są lepsze niż standardowa biblioteka, to jednak nie niwelują one wspomnianych problemów, a jedynie je ograniczają. Także, jeśli w trakcie działania Twojej aplikacji zauważysz dziwne zachowanie, to warto sprawdzić czy nie pochodzi ono od wzajemnego wpływania na siebie tych bibliotek.

Ze względu na uniwersalność dalsze omawianie będzie zakładało wykorzystanie domyślnej biblioteki SoftwareSerial. Jednakże porting, na którąkolwiek alternatywę jest banalnie prosty.

A zatem przejdźmy do napisania prostego programu, który zmieni nasze Arduino na proxy pomiędzy sprzętowym interfejsem UART a programowym interfejsem. Wszystko to co będziemy przesyłać z Arduino Serial Monitora będzie przepisywane do urządzenia podłączonego poprzez Bluetooth. Czym będzie to urządzenie? O tym opowiem w kolejnym punkcie.

#include <SoftwareSerial.h>
 
#define SOFT_RX 12 // Connect to TXD pin on Bluetooth
#define SOFT_TX 13 // Connect to RXD pin on Bluetooth

SoftwareSerial softSerial(SOFT_RX, SOFT_TX); // RX, TX

void setup() {
  Serial.begin(9600);     //hardware serial for the USB-PC
  softSerial.begin(9600); //configure Software Serial
  Serial.println("Ready");
}

void loop() {
  // Read from Bluetooth device
  if (softSerial.available()) {
    while(softSerial.available()) {           // While there is more to be read, keep reading.
      Serial.print((char)softSerial.read());  // send it to the PC
    }   
  }

  // Read from USB-PC
  if (Serial.available()){
    delay(10);     
    char fromPC = (char)Serial.read();    
    softSerial.print(fromPC);    // send to Bluetooth
    Serial.print(fromPC);        // echo it back to the PC
  }
}

Jak widać program bardzo prosty. Sprowadza się do zdefiniowania globalnej zmiennej softSerial o typie SoftwareSerial. Ważne jest aby nie pomylić się z podłączeniem modułu Bluetooth do płytki Arduino. SOFT_RX to port odbierania danych, który musi być podłączony do portu nadającego dane po stronie modułu Bluetooth – czyli TXD. Dla drugiego portu podłączenie wykonujemy analogicznie.

Dalej w głównej pętli programu oczekujemy na dane z obu interfejsów szeregowych i jeśli takowe się pojawią to przepisujemy je do drugiego portu.

Serial terminal z Androida lub PC

Mamy już omówiony schemat połączenia pomiędzy Arduino, a modułem, więc przyszedł czas na podłączenie się do modułu XM-15B po stronie Bluetooth. Omówimy sobie to na dwóch przypadkach. Raz wykonamy połączenie z telefonu z systemem Android (przypominam, że na iOS Apple nie da nam się tego wykonać), a w drugim przypadku podłączymy się z komputera PC z systemem Windows 10.

Bluetooth Terminal z Androida

Szukając dobrego rozwiązania do pracy zdalnej z płytką Arduino poprzez Bleutooth przejrzałem chyba z kilkanaście aplikacji dostępnych w sklepie Play. I ku mojemu zdziwieniu tylko jedna aplikacja wydaje się być dojrzałym rozwiązaniem. Cała reszta wyglądała jak jakaś zabawka wyjęta z przedszkola i działała gorzej niż kod napisany przez Studenta pierwszych lat. Zatem na tę chwilę rekomenduję aplikację o nazwie Serial Bluetooth Terminal: https://play.google.com/store/apps/details?id=de.kai_morich.serial_bluetooth_terminal&hl=en . Aplikacja ta ma bardzo intuicyjny interfejs oraz posiada całkiem rozbudowane możliwości konfiguracji działania. Np. umożliwia definiowanie znaków końca wiadomości, czy przycisków funkcyjnych. Ale najważniejsze, że wspiera komunikację dwukierunkową – co nie było takie oczywiste dla różnych „programistów” aplikacji w sklepie Play.

Po zainstalowaniu aplikacji należy sparować telefon z modułem XM-15B. Nie będę tu omawiał jak to wykonać po stronie telefonu, gdyż w każdym Androidzie robi się to podobne, chociaż nie zawsze tak samo. Chciałbym tutaj jedynie zwrócić uwagę, na diodę sygnalizującą stan naszego modułu Bluetooth. W stanie niepodłączonego urządzenia dioda LED miga miarowo. Jak pamiętamy z części opisującej profile Bluetooth podłączenie do SPP to nie jest jedynie sparowanie, ale jeszcze nawiązanie połączenia przez aplikację. A zatem w trakcie parowania z modułem będziesz proszony o podanie PINu modułu. Domyślnie jest on ustawiony na wartość: 1234. Po sparowaniu, urządzenie pojawi się w liście sparowanych urządzeń (a jakże by inaczej), ale zwróć uwagę, że dioda dalej miarowo miga – sygnalizując brak połączenia.

Aby podłączyć się musimy uruchomić aplikację i z niej nawiązać połączenie z wcześniej sparowanym modułem. Uruchamiamy Serial Bluetooth Terminal i w ustawieniach wybieramy w zakładce Devices moduł XM-15:

Musimy teraz zawiązać połączenie. Aby tego dokonać należy przycisnąć ikonę wtyczek widoczną po prawej stronie u góry aplikacji: . Jeśli połączenie zostało nawiązane, to moduł Bluetooth zasygnalizuje to ciągłym zapaleniem diody LED. Jeśli dotarłeś do tego miejsca to telefon jest już gotowy do nadawania. Pora na PC. Po stronie komputera skorzystamy z Serial Monitora zbudowanego w Arduino IDE. Nie jest on najlepszym rozwiązaniem, ale wystarczy w naszym przykładzie.

Uruchom Serial Monitor i zanim zaczniesz wysyłać komunikaty to ustaw na dole znaki końca linii na: Both NL & CR. Możemy teraz przetestować komunikację. Najpierw wysyłamy wiadomość z telefonu, która pojawi się na Serial Monitorze Arduino. W przeciwnym kierunku komunikacja odbyła się także bez problemu:

Zadanie wykonane. Teraz już chyba rozumiesz jak wykorzystać w praktyce moduł Bluetooth w trybie SPP? Całość sprowadza się do nawiązania połączenia urządzeniem zdalnym i wysyłania komunikatów czytanych przez Arduino na porcie szeregowym. Na podstawie tych komunikatów możesz wprowadzić logikę do programu – typu zgaś/zapal diodę czy cokolwiek bardziej skomplikowanego.

Bluetooth Terminal z PC (Windows)

Nic nie stoi na przeszkodzie, aby do modułu po stronie Bluetooth podłączyć się komputerem PC. Sposób działania jest podobny do tego opisanego na telefonie. Najpierw musimy sparować urządzenie w systemie Windows (podając oczywiście PIN):

Jednak co dalej? Dalej musimy otworzyć Device Manager i przejść do sekcji Ports (COM & LPT):

Wśród listowanych portów znajdziesz dwa o nazwie: Standard Serial over Bluetooth link (COM??). Oba porty są właśnie Szeregowym Interfejsem dostępnym poprzez moduł Bluetooth XM-15B. Są dwa, ale tylko jeden będzie działał w naszym zastosowaniu. Który wybrać? Niestety trzeba sprawdzić eksperymentalnie.

Przejdźmy teraz w takim razie do oprogramowania po stronie PC, którym nawiążemy połączenie. Najlepszym programem dla Windows może się okazać np. TerraTerm lub Putty. Ja w poniższym przykładzie będę wykorzystywał TerraTerm.

W moim przypadku działającym portem okazał się COM11. Zatem po uruchomieniu terminala wybieramy konfigurację:

I potwierdzamy przyciskiem OK. Po chwili dioda LED na module Bluetooth zapali się ciągłym światłem. Oznacza to poprawne nawiązanie połączenia. Spróbuj wysłać i odebrać komunikaty:

Jeśli w trakcie wpisywania wiadomości w terminalu TeraTerm nie widzisz tego co piszesz to przejdź do Setup->Terminal i zaznacz opcję Local echo oraz zmień New-line Transmit na CR+LF:

Jeśli dalej nie działa, to warto jeszcze sprawdzić ustawienia transmisji. Domyślnie moduł XM-15B działa z poniższymi ustawieniami (Setup->Serial Port…):

To by było na tyle w kwestii podłączenia się z komputera PC do modułu Bluetooth XM-15B.

Konfiguracja urządzenia komendami AT

Moduł Bluetooth XM-15B posiada możliwość konfiguracji poprzez komendy AT. Konfiguracji podlega wiele parametrów, w tym nazwa urządzenia pod jakim będzie widoczna przy parowaniu jak i prędkość czy parametry połączenia UART. Poniżej postaram się przedstawić przykład ukazujący jak wejść w tryb konfiguracji i zmienić w nim np. nazwę naszego urządzenia oraz PIN.

Moduł jest w trybie konfiguracji w momencie gdy nie jest podłączone żadne urządzenie do Bluetooth. Innymi słowy do momentu, w którym dioda statusu miga – możemy przeprowadzać konfigurację. Moment podłączenia się urządzenia przechodzi w tryb transmisji danych i nie jest możliwe zmienianie czegokolwiek.

Przygotowanie schematu połączeń nie rożni się niczym od tego, który przedstawiłem w opisie SoftwareSerial. Tak samo kod źródłowy, który tam przedstawiłem w zupełności wystarczy nam aby konfigurować urządzenie. Nie będę go tu ponownie powtarzał, zatem wróć kilka punktów wyżej i wgraj przykładowy program do Arduino.

Po uruchomieniu układu musimy podłączyć się do portu szeregowego płytki Arduino. Jak pamiętasz, wgrany przed chwilą przykład działał tak, że wszystko co pisaliśmy do Arduino poprzez Harware Serial mikrokontroler przekazywał na Software Serial. Płytka działała jak proxy pomiędzy nadawcą ze strony USB, a modułem Blutooth. Wykorzystamy to do konfigurowania naszego urządzenia. Z tym, że zamiast podłączenia się do portu COM na USB poprzez Arduino IDE wykorzystamy Tera Term. Dlaczego? Ponieważ ten terminal daje nam możliwość konfiguracji naszego połączenia, co będzie ważne w naszym przypadku.

Zatem podłączamy się Tera Term’em do portu COM, na którym normalnie wgrywamy program na płytkę (pamiętaj aby zamknąć Serial Monitor w Arduino IDE – bo może on blokować port COM). Zanim będziemy coś konfigurować w module Bluetooth to jeszcze ustawmy nasz terminal według poniższych parametrów:

Teraz jesteśmy gotowi do wydawania poleceń konfigurujących moduł Bluetooth. (Upewnij się, że dioda na module miga). Na początek wydaj polecenie AT. W wyniku powinieneś otrzymać odpowiedź z modułu: OK.

Jeśli tak się stało, to znaczy, że wszystko działa jak trzeba. Zatem na początek kilka poleceń, które powiedzą nam coś o urządzeniu:

Poniżej przedstawiam wybrane polecenia AT dla modułu XM-15B. Nie jest to pełna lista. Szczegóły (po chińsko/angielsku) można przeczytać w dokumentacji od producenta, którą załączyłem na początku artykułu.

InstrukcjaOdpowiedźOpis
ATOKPotwierdzenie wejścia w tryb konfiguracji
AT+RESETOKSoftware Reset
AT+VERSION?+VERSION:3.4.512.1127
OK
Wersja oprogramowania modułu
AT+ORGLOKPrzywrócenie stanu fabrycznego
AT+ADDR?+ADDR: <bda>
OK
Zwraca adres fizyczny urządzenia w miejscu <bda>
AT+NAME?+NAME:<deviceName>
OK
Zwraca nazwę urządzenia pod jaką jest widoczna w trakcie parowania
AT+NAME=<deviceName>OKUstawia nazwę urządzenia na <deviceName>
AT+ROLE?+ROLE:<nRole>
OK
Zwraca tryb modułu:
0 – Slave
1 – Master
2 – Slave-Loop
AT+ROLE=<nRole>OKUstawia tryb modułu według wartości <nRole>
AT+PSWD?+PSWD:<pinCode>
OK
Zwraca kod PIN wymagany w momencie parowania
AT+PSWD=<pin>OKUstawia kod PIN na <pin>
AT+UART?+UART:<nBaudRate>,<nStopBits>,<nParityBits>
OK
Zwraca ustawienia parametrów transmisji szeregowej
AT+UART= <nBaudRate>,<nStopBits>,<nParityBits> OKUstawia parametry transmisji, gdzie
<nBaudRate> musi być wartością z {1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200};
<nStopBits> wartość z:
– 0 to 1 Bit Stop
-1 to 2 Bits Stop
<nParityBits>:
– 0: none
– 1: odd
AT+POLAR?+POLAR:<p1>,<p2>Zwraca ustawienia sygnałów wskazujących stan połączenia. Parametr <p1> odpowiada za ustawienie diody StateLedPolar, natomiast <p2> za stan diody na module. Przy niesparowanym zawsze miga, przy sparowanym urządzeniu 0 wyłącza diodę, 1 – włącza diodę.
Wymaga dodatkowo wykonania poleceń AT+INIT oraz AT+RESET
AT+POLAR=<p1>,<p2>OKUstawia stany sygnałów diody LE.

Więcej informacji w dokumentacji producenta, lub można ekperymentalnie próbować poleceń z innego modułu. Wiele z nich działa jeden do jednego. Np. tutaj: https://www.itead.cc/wiki/Serial_Port_Bluetooth_Module_(Master/Slave)_:_HC-05

A zatem, aby zmienić nazwę naszego urządzenia oraz PIN wydajemy polecenia:

AT
AT+NAME=ArduinoBT
AT+PSWD=0000

Całościowa komunikacja zmieniająca nazwę i PIN ze sprawdzeniem zmian będzie wyglądała tak:

AT
OK
AT+NAME=ArduinoBT
OK
AT+PSWD=0000
OK

AT+NAME?
+NAME:ArduinoBT
OK

AT+PSWD?
+PSWD:0000
OK

Nie zapomnij usunąć ostatnie parowanie, aby nazwa na pewno się odświeżyła w telefonie. No i w razie czego, zawsze możesz powrócić do domyślnych ustawień poleceniem:

AT+ORGL

Podsumowanie

Moduł Bluetooth XM-15B jest całkiem ciekawym urządzeniem umożliwiającym realizację wielu ciekawych pomysłów IoT. Samo urządzenie nie jest nowym pomysłem, bo ma on swoich starszych braci w postaci chociażby modułów HC-05 i HC-06. Jednakże XM-15B jest odświeżoną wersją działającą w nowszym standardzie Bleutooth 2.1 +EDR, a co najważniejsze praca modułu jest możliwa w logice 3.3V jak i 5V bez dodatkowych konwerterów. Znacznie to upraszcza zasosowanie układu z różnymi mikrokontrolerami.

Pewną trudność może nastręczać bardzo słabej jakości dokumentacja producenta. Pewnie z czasem się to zmieni i użytkownicy eksperymentalnie wypracują lepszą, ale na tę chwilę nie udało mi się np. poprawnie określić jakie ma działanie komenda AT+POLAR. Z dokumentacji wynika, że powinna zmieniać stany logiczne w momencie podłączenia urządzenia do Bluetooth. Jest to o tyle ważna funkcjonalność, że dała by ona możliwość zdalnego programowania płytki Arduino bez kabla USB.

Poważnym ograniczeniem jest fakt, że urządzenie nie będzie działało z telefonami firmy Apple. Nie jest to oczywiście problem leżący po stronie jakichś braków w module XM-15B, ale raczej ordynaryjnego olewania standardu SPP przez giganta z Cupertino. Szkoda, bo to znacząco zmniejsza funkcjonalność tego urządzenia.

Reasumując, pozytywy znacząco przykrywają niedociągnięcia tego układu. Zatem zachęcam do eksperymentowania we własnym zakresie.