wersja mobilna | kontakt z nami

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

Numer: Listopad/2015

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.

Pobierz PDF

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

Pozostałe artykuły

Wyświetlacz firmy Riverdi z modułem rozszerzającym dla Arduino

Numer: Maj/2016

Dołączenie kolorowego wyświetlacza TFT z pojemnościowym panelem dotykowym jako modułu rozszerzającego Arduino, tworzy możliwości budowy urządzeń z interfejsem graficznym o profesjonalnym wyglądzie i sposobie działania. W artykule - oprócz opisu wyświetlacza i modułu - sporo uwagi zostanie poświęcone procedurom programistycznym pozwalającym na uruchomienie potencjału drzemiącego w wyświetlaczu.

Pierwsze kroki z FPGA. Szkoła MAXimatora - pierwszy projekt z edytorem schematów. cz. 2

Numer: Maj/2016

W pierwszej części kursu przedstawiliśmy podstawowe informacje na temat tego skąd i jakie narzędzia programowe będą nam potrzebne do rozpoczęcia przygody z układami FPGA i zestawem MAXimator. W tej części pokażemy jak krok-po-kroku przygotować pierwszy projekt. Ze względu na dostępny w bezpłatnej wersji programu Quartus Prime zestaw bogato wyposażonych bibliotek oraz łatwość przygotowania projektu z wykorzystaniem edytora ...

Renesas Synergy - Internet Rzeczy w zasięgu ręki. cz. 1

Numer: Maj/2016

Ktoś, kiedyś (podobno był to Kevin Ashton) wpadł na pomysł, aby urządzenia powszechnego użytku i układy sterownia na przykład oświetleniem, połączyć za pomocą sieci komputerowej, by mogły pomiędzy sobą wymieniać informacje. Nie wiem dlaczego, ale często jako przykład urządzenia dołączanego do sieci jest podawana lodówka domowa. Może dlatego, że w obecnym stadium rozwoju cywilizacji, lodówka i jej zawartość wymagają ...

STM-owa układanka: generator PWM

Numer: Maj/2016

Tematem artykułu jest odpowiedź na pytanie: jak zmusić kontroler STM32F411 do wygenerowania przebiegu PWM o pożądanych parametrach? Mam zamiar udowodnić, że za pomocą narzędzi wspomagających pisanie oprogramowania dla STM32, rozwiązanie problemu wcale nie musi być trudne.

Podstawy programowania STM32F746G-DISCO. Jak zbudować oscyloskop z FFT z użyciem STM32F746G-DISCO

Numer: Maj/2016

Zaczynając pisać oprogramowanie dla systemu wbudowanego zawsze warto zwrócić uwagę na trzy czynniki mające znaczący wpływ na jakość i czas powstawania projektu. Są to: dostępność sprzętowych zestawów deweloperskich, bibliotek, oraz narzędzi programistycznych. Zestawy deweloperskie zawierające dodatkowe peryferia umożliwiają szybkie tworzenie prototypów bez konieczności projektowania dodatkowego sprzętu. Zwykle dostarczane ...

Mobilna
Elektronika
Praktyczna

Elektronika Praktyczna

Maj 2017

PrenumerataePrenumerataKup w kiosku wysyłkowym

Elektronika Praktyczna Plus

lipiec - grudzień 2012

Kup w kiosku wysyłkowym