Bluetooth pozwala na lokalną transmisję danych na odległość (zależnie od klasy modułów) od kilku do 150 m. Transmisja jest przeprowadzana w obrębie pasma 2,4 GHz. Wbudowane w standard procedury pozwalają na automatyczne wyszukiwanie działających w pobliżu i dostępnych urządzeń Bluetooth, nawiązanie połączenia i przesłanie danych.
Moduł HC-05 można wstępnie skonfigurować tekstowymi komendami w trybie AT. Komendy przesyłane są do modułu za pośrednictwem jego portu szeregowego UART. Po zakończeniu konfiguracji moduł przechodzi do normalnego trybu pracy, czyli przesyłania danych łączem radiowym.
Moduł HC-05 jest dostępny w kilku wersjach. Do opisu i testów posłużyłem się modułem zintegrowanym z anteną i zamontowanym na dodatkowej płytce ze złączem 6-stykowym. Oprócz złącza na płytce zamontowano między innymi stabilizator, miniaturowy przycisk i diodę sygnalizacyjną LED. Inne wersje wykonania będą działać podobnie i różnić się jedynie sposobem wprowadzenia modułu w tryb AT.
Złącze
Na 6-szpilkowe złącze wyprowadzono wszystkie dostępne sygnały modułu. W tabeli zebrano oznaczenie kolejnego styku oraz opis pełnionej funkcji.
Nominalnie moduł powinien być zasilany napięciem z przedziału 3,6...6V, które przez zamontowany na płytce stabilizator jest obniżane do 3,3 V. Jednak moduł będzie pracować także przy zasileniu napięciem o wartości 3,3 V. Nie jest to technicznie najlepsze rozwiązanie jednak pozwala skorzystać z zasilania układu kontrolera STM32.
W trakcie parowania moduł pobiera przeciętnie 40 mA, po zainicjowaniu połączenia kilka miliamper. Wszystkie pozostałe linie wejściowe są w standardzie CMOS 3,3 V, więc nie wymagają konwerterów do współpracy z portami kontrolera STM32. Poziom wysoki wyjścia STATE sygnalizuje nawiązanie połączenia ze sparowanym urządzeniem.
Status modułu jest sygnalizowany za pomocą diody LED w następujący sposób:
Szybkie migotanie: gotowość do nawiązania połączenia.
Dwa błyski - przerwa - dwa błyski: sygnalizacja nawiązanego połączenia.
Wolne migotanie: urządzenie w trybie konfiguracji komendami AT.
Profil SPP i tryb pracy modułu
Cechą charakterystyczną standardu Bluetooth jest korzystanie z tzw. profili. Moduły HC-05 obsługują jeden profil - SPP. Oznacza to, że są zdolne do przesyłania danych w trybie symulacji portu szeregowego UART. Moduł może współpracować z dowolnym innym modułem i urządzeniem z profilem SPP. Urządzenia nieobsługujące tego profilu mogą wykrywać HC-05 jednak nawiązanie połączenia i transmisja pomiędzy urządzeniem a modułem nie będzie możliwa.
Każdy moduł HC-05 można ustawić do pracy jako urządzenie nadrzędne (master) lub podrzędne (slave). Tylko urządzenie nadrzędne może inicjować połączenie i realizować dwustronną wymianę danych z urządzeniem podrzędnym. W lokalnym systemie może funkcjonować wiele urządzeń podrzędnych, ale tylko jedno nadrzędne (master).
Typowe podłączenie modułu do kontrolera STM32
Przykładowe podłączenie modułu HC-05 do kontrolera STM32 pokazano na rysunku 1. Do komunikacji z modułem wybrany został port UART2 kontrolera. Wyprowadzeniem EN modułu może sterować dowolny port kontrolera. W tabeli 2 wymieniono połączenia pomiędzy modułem HC-05 a systemem z mikrokontrolerem STM32.
Procedury inicjacji portu UART2
Mikrokontroler nadzoruje pracę modułu za pomocą interfejsu UART2. Poprzez niego są wysyłane i obierane dane oraz polecenia konfigurujące. Transmisja jest obsługiwana w trybie przerwania. Dane odbierane i wysyłane są umieszczane w osobnych buforach w pamięci RAM mikrokontrolera.
Procedury związane z portem UART2 posługują się nazwami, które wcześniej należy umieścić np. w osobnym pliku nagłówkowym (listing 1). Następnie należy zadeklarować bufory i wskaźniki do obsługi transmisji danych wysyłanych i odbieranych, co pokazano na listingu 2.
Procedurę inicjacji portów kontrolera pełniących funkcje wyprowadzeń RxD i TxD UART2 pokazano na listingu 3, natomiast inicjacja UART2 do pracy z przerwaniami może wyglądać jak na listingu 4. W pliku stm32f10x_it.c należy umieścić obsługę przerwań UART2, co pokazano na listingu 5.
Należy także zainicjować kontroler przerwań NVIC, jak na listingu 6. Wszystko razem można obsłużyć jedną procedurą inicjacji, co pokazano na listingu 7. Po inicjacji program kontrolera może korzystać z portu UART2 do komunikacji z modułem HC-05. Do kontroli zapełnienia buforu odbiorczego wykorzystuje się porównanie wskaźników ilosc_danych_odebranych = p_rx_USART2_in - p_rx_USART2_out;.
Po wykorzystaniu odebranych danych należy oba wskaźniki ustawić na początek buforu odbiorczego bufor_rx_USART2[]. Wysyłając dane do modułu należy najpierw sprawdzić stan flagi tx_USART2_restart_flag. Jeżeli jest ustawiona oznacza to, że poprzednia transmisja została zakończona i można wysyłać nowe dane.
Po zapisaniu danych do wysłania w buforze bufor_rx_USART2[] należy wskaźnik p_tx_USART2_in ustawić na początek buforu. Wskaźnik p_tx_USART2_out powinien wskazywać pozycję bufor_rx_USART2[0]+ilość danych w buforze nadawczym. Następnie należy zainicjować transmisję np. tak:
if (tx_USART2_restart_flag ==1) // if transmit
interrupt is disabled, enable it
{
tx_USART2_restart_flag = 0;
// enable TX interrupt
USART_ITConfig(USART2, USART_IT_TXE,
ENABLE);
}
Jeżeli do sterowania wejściem EN modułu użyty zostanie port kontrolera np. PA7 należy go zainicjować jako wyjściowy z wewnętrznym podciąganiem. Następnie należy ustawić port w stanie wysokim.
Tryb AT modułu HC-05
Dostęp do modułu w trybie AT pozwala na zmianę ustawień takich parametrów jak: tryb pracy, nazwa, szybkość transmisji portu szeregowego i innych. Komendy konfigurujące wysyłane są w trybie tekstowym, więc zmianę ustawień HC-05 można przeprowadzić używając dowolnego programu terminalowego uruchomionego na komputerze.
Ja do testów posłużyłem się programem "Br@ y++" w wersji 1,93b. Do komunikacji z modułem można wykorzystać port USB komputera i interfejs dopasowujący, którego wyprowadzenia TxD i RxD przystosowane są do pracy z poziomami COMS 3,3 V. Połączenie modułu HC-05 do portu komputera poprzez interfejs AVT MOD09 zostało pokazane na rysunku 2.
Moduł wprowadza się w tryb przyjmowania komend AT dwoma sposobami:
Dołączając zasilanie należy naciskać przycisk zamontowany na module.
Przy włączonym zasilaniu należy nacisnąć przycisk na module. Następnie zeruje się i ustawia wejście EN.
Moduł sygnalizuje wejście w tryb przyjmowania komend AT wolnym migotaniem diody LED zamontowanej na płytce modułu. W tym trybie szybkość transmisji portu szeregowego modułu ustawiona jest zawsze na 38400. Można sprawdzić czy moduł znajduje się w trybie AT wysyłając tekst "AT" zakończony znakami CR-LF (dziesiętnie 13 i 10).
Jako potwierdzenie moduł powinien odesłać tekst "OK".
Ustawienie modułu HC-05 w trybie podrzędnym (slave)
Przykładowa sekwencja rozkazów zeruje dotychczasowe ustawienia modułu, ustawia go w trybie podrzędnym, ustawia standardowy kod dostępu, nadaje nazwę, odczytuje adres oraz ustawia szybkość transmisji portu szeregowego. Użyte rozkazy wraz z opisem zostały wymienione w tabeli 3.
Każdy rozkaz musi być zakończony znakami CR LF (dziesiętnie 13 i 10). Poniżej przykładowa sekwencja rozkazów i odpowiedzi modułu wyświetlana na pulpicie terminalu:
AT
OK
AT+ORGL
OK
AT+RMAAD
OK
AT+PSWD=1234
OK
AT+NAME=Slave
OK
AT+ROLE=0
OK
AT+ADDR?
+ADDR:2015:3:275580
OK
AT+UART=38400,0,0
OK
Testowanie transmisji do modułu HC-05 pracującego w trybie podrzędnym
Do przetestowania działania modułu pracującego w trybie podrzędnym potrzebne będzie urządzenie z interfejsem Bluetooth. Może to być komputer lub smartfon. Z reguły telefony nie obsługują profilu SPP, jednak pozwalają na uruchomienie program terminala z programową obsługą profilu.
Z dostępnych programów terminalowych dla urządzeń z systemem operacyjnym Android można zastosować jeden z darmowych terminali: BT Simple Terminal, Bluetooth spp pro, BlueTooth Serial Controler 16. W przypadku niektórych z nich może okazać się konieczne samodzielne sparowanie z telefonem nowego urządzenia Bluetooth, którym będzie moduł HC-05.
Do testu moduł HC-05 powinien być połączony z komputerem, na którym uruchomiono zwykły program terminalowy np. "Br@y++". Po uruchomieniu na smartfonie wybranego programu terminalowego i wybraniu z listy dostępnych urządzeń modułu, powinno nastąpić samoczynne ustanowienie połączenia, co dioda LED zamontowana na HC-05 zasygnalizuje zmianą rytmu migotania.
Od tego momentu wypisane na smartfonie w oknie terminala teksty powinny pojawiać się w oknie terminala uruchomionego na komputerze, do którego jest przyłączony moduł. Trzeba tylko pamiętać by szybkość transmisji portu szeregowego modułu była zgodna z szybkością ustawioną na terminalu komputera.
Ustawienie modułu HC-05 w trybie nadrzędnym (master)
Przykładowa sekwencja rozkazów ustawia moduł do pracy w trybie nadrzędnym. Dodatkowo moduł będzie się zawsze łączył z określonym modułem HC-05 pracującym w trybie podrzędnym. Użyte rozkazy wraz z opisem wymieniono w tabeli 4.
Każdy rozkaz musi być zakończony znakami CR LF (dziesiętnie 13 i 10). Poniżej przykładowa sekwencja rozkazów i odpowiedzi modułu wyświetlana na pulpicie terminalu:
AT
OK
AT+ORGL
OK
AT+RMAAD
OK
AT+NAME=Master
OK
AT+ROLE=1
OK
AT+RESET
OK
Ponowne wprowadzenie modułu w tryb AT, od tego momentu przycisk na module HC-05 powinien być naciskany bez przerwy.
AT+CMODE=1
OK
AT+INQM=0,5,5
OK
AT+PSWD=1234
OK
AT+INIT
OK
AT+INQ
+INQ:5500:27:1758A5,5E020C,7FFF - wykryty telefon
+INQ:2015:3:275538,0, 7FFF - wykryty pierwszy moduł HC-05
+INQ:2015:3:275580,0,7FFF - wykryty drugi moduł HC-05
OK
AT+PAIR=2015,3,275538,20 - parowanie z pierwszym modułem HC-05
OK
AT+BIND=2015,3,275538
OK
AT+CMODE=0 - po resecie automatyczne łączenie z pierwszym modułem
OK
AT+LINK=2015,3,275538 - wymuszenie połączenia z urządzeniem o podanym adresie
OK
Testowanie transmisji pomiędzy modułami HC-05
Jeżeli dwa moduły będą ustawione w taki sposób jak to wcześniej opisano, po włączeniu zasilania powinno nastąpić automatyczne połączenie pomiędzy modułem pracującym w trybie nadrzędnym (masterem) a modułem pracującym w trybie podrzędnym (slave).
Nawiązanie połączenia będzie sygnalizowane migotaniem diod LED obu modułów w sekwencji błysków: 2 krótkie - przerwa -2 krótkie ... Po nawiązaniu połączenia będzie możliwa jednoczesna dwustronna transmisja danych podawanych na wejścia UART obu modułów.
Ryszard Szymaniak, EP