Współpraca STM32 z modułem Bluetooth HC-05

Współpraca STM32 z modułem Bluetooth HC-05
Pobierz PDF Download icon
Moduł Bluetooth HC-05 pozwala na łatwe zrealizowanie bezprzewodowej transmisji danych pomiędzy systemem embedded a np. smartfonem lub tabletem. Jego wykorzystanie w systemach z kontrolerem STM32 nie wymaga skomplikowanych procedur. Większość pracy związanej z nawiązaniem połączenia wykonuje oprogramowanie samego modułu. W tym artykule zademonstruję jak skonfigurować moduł, aby można go było użyć we własnej aplikacji.

Tabela 1. Opis złącza modułu HC-05

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

Listing 1. Definicje nazw symbolicznych

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.

Listing 2. Deklaracja buforów i wskaźników do obsługi transmisji

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.

Listing 3. Inicjacja wyprowadzeń mikrokontrolera jako wejścia/wyjścia UART

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

Listing 4. Inicjowanie UART do pracy w trybie z przerwaniami

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

Tabela 2. Połączenia pomiędzy modułem HC-05 a mikrokontrolerem STM32

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.

Rysunek 1. Przykładowe podłączenie modułu HC-05 do kontrolera STM32

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.

Rysunek 2. Połączenie modułu HC-05 do portu komputera poprzez interfejs AVT MOD09

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

Listing 5. Obsługa przerwań od UART2

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)

Listing 6. Inicjowanie NVIC

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

Listing 7. Główna procedura inicjująca UART

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)

Tabela 3. Ustawienie modułu w trybie podrzędnym

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

Tabela 4. Ustawienie modułu w trybie nadrzędnym

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

Artykuł ukazał się w
Elektronika Praktyczna
listopad 2015
DO POBRANIA
Pobierz PDF Download icon
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik grudzień 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio listopad - grudzień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje listopad - grudzień 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna grudzień 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich grudzień 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów