Kurs Arduino #17: Obsługa Bluetooth

Cześć,
w tej części kursu przedstawimy jak komunikować się z Arduino po przez Bluetooth. Gorąco zapraszamy :)

Spis treści:

  1. Co to jest Bluetooth
  2. Różnica pomiędzy HC-05 i HC-06
  3. Komunikacja Arduino – PC
  4. Komunikacja Arduino – Android
  5. Podstawowe funkcje
  6. Przykładowy program #1:  Sterowanie światłem

 

Co będziemy potrzebować ?

  • Arduino
  • Moduł Bluetooth HC-05 albo HC-06
  • 2x rezystor 10k ohm
  • rezystor 220ohmów
  • dioda LED

 

1. Co to jest Bluetooth ?

Bluetooth to technologia bezprzewodowej komunikacji, obejmująca krótki obszar. Dzisiaj Bluetooth możemy głownie spotkać w telefonach, tabletach, komputerach, ale także przy peryferiach komputerowych typu mysz i klawiatura, ale te z kolei są już coraz żadziej produkowane. Standard tej technologii jest opisany w IEEE 802.15.1. Technologia korzysta z fal radiowych w paśmie ISM 2,4 GHz. Urządzenia korzystające z Bluetooth łączą się z sobą w picosieci. Gdzie jest może być jedno urządzenie typu Master oraz do 7 urządzeń typu Slave. Urządzenie typu Master może sterować pracą urządzeń Slave, ale nigdy na odwrót. Tak samo dwa urządzenia Slave nie mogą komunikować się ze sobą. Picosieci mogą być również łączone ze sobą przy pomocy węzła bridge (urządzenie Slave).

Zasięg:

Zasięg urządzenia determinowany jest przez klasy mocy:

  • klasa 1 (100 mW) – zasięg ok. 100 m
  • klasa 2 (2,5 mW) – zasięg ok. 10 m – najczęściej stosowana klasa
  • klasa 3 (1 mW) – zasięg ok. 1m

Nie mniej jednak zasięg w dużej mierze jest uzależniony od warunków atmosferycznych oraz uformowania obszaru, czy to jest otwarty teren czy np. mieszkanie.

Wersje standardu i przepustowość:

  • Bluetooth 1.0 ? 21 kb/s
  • Bluetooth 1.1 ? 124 kb/s
  • Bluetooth 1.2 ? 328 kb/s
  • Bluetooth 2.0 + EDR ? wprowadzenie Enhanced Data Rate zwiększyło transfer teoretyczny do 2,1 Mb/s (około 3 Mb/s wliczając narzut protokołu)
  • Bluetooth 3.0 + HS (High Speed) ? 24 Mb/s (3 MB/s)
  • Bluetooth 3.1 + HS (High Speed) ? 40 Mb/s (5 MB/s)
  • Bluetooth 4.0 + LE (Low Energy) ? 1 Mb/s znacząco ograniczono pobór energii (np. praca czujnika temperatury, przez wiele miesięcy na baterii pastylkowej), kosztem obniżonego transferu oraz zwiększono realny zasięg działania do 100 m
  • Bluetooth 4.1 – standard opracowany do zastosowania w tzw. „internecie rzeczy” (urządzenia typu „wearable”), umożliwiający bezpośrednią łączność przedmiotów z internetem
  • Bluetooth 4.2 – w stosunku do poprzednich wersji: szybszy transfer, wyższy poziom bezpieczeństwa, nawiązanie łączności z przedmiotami – łatwiejsze

To tak w dużym skrócie przedstawiliśmy zasadę działania i specyfikację Bluetooth. Więcej o tej technologii można poczytać na Wikipedii czy też innych „mądrych książkach”.

2. Różnica pomiędzy HC-05 i HC-06

W tej części kursu skupimy się na modułach HC-05 oraz HC-06. Niby są to dwa podobne modele, ale mają znaczne różnice.

HC-05 HC-06
HC05 HC06
Tryb: Master i Slave Tryb: tylko Slave

Pierwsza rzecz to taka, że wyprowadzenia są trochę inaczej ułożone w obu modelach. Tyczy to się w szczególności pinów KEY, LED1 i LED2. Wyprowadzenia odpowiedzialne za zasilanie i komunikację UART są w tych samych miejscach. No dobra to może nie jest jakaś mocna różnica, ale kolejna różnica ma już większe znaczenie. HC-05 jest w stanie obsługiwać tryby Master i Slave, gdzie HC-06 potrafi tylko obsługiwać tryb Slave. Do większości zastosowań z Arduino, model HC-06 jest wystarczający, ale gdybyśmy chcieli stworzyć pomiędzy dwoma Arduino bezprzewodową komunikację to będziemy jednak potrzebować modułu HC-05, który to będzie pełnić funkcję Master’a, ponieważ jak z teorii wiemy, nie można połączyć dwóch urządzeń typu Slave.

Kupując moduł Bluetooth HC-05 albo HC-06 zazwyczaj kupujemy go już osadzonego na większej płytce. Ze względu na to, że sam moduł jest przystosowany do zasilania 3,3V to musimy się upewnić, że dostanie on dokładnie tyle, a nie więcej. Jeżeli jesteś w stanie zlokalizować ten układ zaznaczony na obrazku niżej to dobrze, bo to jest regulator napięcia LDO 3,3V w obudowie SOT-23, którego zadaniem jest obniżenie napięcia zasilającego z 5V na 3,3V.

P60528-223127

W większości przypadków Arduino Uno ma na pinach poziomy napięć 5V. Moduł Bluetooth HC-xx toleruje te poziomy, ale zalecanym jest aby obniżyć je do poziomów 3,3V przy pomocy rezystorów 10k ohm albo bufora 4050D
  • Jarosław Wolny

    dlaczego przy wpisaniu jako odczyt liczby np dwycyfrowej ’25’ nie jestem w stanie wysterowac diody na wyjsciu analogowy na 25% mocy…. gdy deklaruje sobie w innej aplikacji na androida przycisk który ma wysyłac zmienna np w postaicl liczby ‚5’
    jestem w stanie uruchomic wyjscie po owczesnej zmianie wartosci w kodzie. a gdy te sama wartosc w kodzie zamienie na warttos j.w ’25’ i dam te wartosc jako zadeklarowana z przycisku w programie android, nie jestem w stanie uruchomic wyjscia

    • Przepraszam, ale nie rozumiem problemu. Możesz jeszcze raz wyjaśnić ? Co do programu na Arduino, to zauważ, że jest on zaprojektowany pod char, a char składa się tylko z jednego znaku. Zatem w programie na Arduino powinieneś przerobić odczytywane dane na string (ciąg znaków), ponieważ z aplikacji na androida są wysyłane komendy jako string. Myślę, że to może być rozwiązaniem twojego problemu :)

  • Krzysztof Lipiński

    Witam
    mam problem którego nie potrafię obejść. w RealTerm, ustawiłem wszystko jak należy, system windows7 jest sparowany z urządzeniem hc-05, niemniej jednak kiedy w realterm klikam którykolwiek z wybranych portów wyskakuje komunikat „Port is already open, You must change Port ie_Open – device already open”. Dioda state się nie świeci, czerwona dioda na płytce miga w trybie raz na 2 sekundy. Sprawdziłem i płytka jest poprawnie podpięta a sterowniki do adaptera bluetooth instalowałem z płytki producenta i nie było z nimi problemów. Gdy ponawiam próbę po otwarciu RealTerm jako administrator żaden błąd nie wyskakuje jednak diody świecą dalej tak samo i nie ma komunikacji poprzez „send ascii” (RX/TX są zwarte więc powinno być echo)
    Pozdrawiam

    • Krzysztof Lipiński

      Dodam że w żadnej konfiguracji pola CTS oraz DSR nie są podświetlone na żaden kolor. Gdy próbuję uruchomić jako zwykły użytkownik włącza się w prawym dolnym rogu ‚Port: closed’, a gdy jako admin to tak samo jak u Ciebie tylko bez oczekiwanych rezultatów.