Kurs Arduino #17: Obsługa Bluetooth

Kurs Arduino #17: Obsługa Bluetooth

3. Komunikacja Arduino – PC

Jako, że dzisiejsza część kursu nie jest „zamkniętym ekosystemem” to będziemy potrzebować jeszcze jednego urządzenia do komunikacji z Arduino. Teraz przedstawię jak połączyć się z komputerem z system Windows. Do tego będziemy potrzebować programu RealTerm (KLIK!), oraz Bluetooth (najzwyklejszy dongle będzie działać).
Najpierw musimy się połączyć z modułem, w tym celu przechodzimy do ustawień Bluetooth i szukamy urządzenia. Powinno nam znaleźć HC-05, albo HC-06 (w zależności od modelu). Następnie parujemy się z modułem. Standardowy Pin parowania to 1234. Rzadko się to zdarza ale może być też pin 0000. Przed sparowaniem dioda na module powinna nam cały czas błyskać, a po sparowaniu zgasnąć i co jakiś czas błysnąć.
Następnie uruchamiamy program RealTerm i przechodzimy do zakładki Port. Tam powinniśmy mieć wybór miej więcej jak tutaj na zdjęciu:

btChoose

Ustawienia komunikacji:

  • Bit parzystości: brak
  • Ilość bitów danych: 8
  • Ilość bitów stopu: 1

Czyli konfiguracja 8N1 bez bitu parzystości. Od tego momentu nasza transmisja jest gotowa. Po sfocusowaniu się na ekran terminala po przez kliknięcie myszą na niego będziemy w stanie wysyłać jednoznakowe komendy. Wysyłać możemy również z zakładki Send wpisując w pierwsze pole naszą komendę, a następnie klikając Send ASCII. Teraz przejdziemy do konfiguracji połączenia z urządzeniem wyposażonym w system Android.

4. Komunikacja Arduino – Android

S60528-195759Do wysyłania komend po przez Bluetooth możemy wykorzystać darmową aplikację ze sklepu Google Play, o nazwie Bluetooth Terminal (KLIK!), albo naszą autorską przygotowaną do tego kursu (KLIK!) (nie które, urządzenia mogą pokazywać, że jest wirus, ale nie ma żadnego- apka zrobiona w App Inventorze 2). Aplikacja daje możliwość wysyłania predefiniowanych komend z przycisków, jak i wysyłanie własnych. Predefiniowane komendy:

  • Włącz – 1
  • Wyłącz / PWM 0% – 0
  • PWM 25% – 2
  • PWM 50% – 5
  • PWM 75% – 7
  • PWM 100% – 9

Połączenie odbywa się na podobnej zasadzie jak w przypadku PC. Najpierw, wyszukujemy nasz moduł, następnie wpisujemy Pin żeby się sparować i gotowe. Następnie przechodzimy do wybranej przez nas aplikacji i wybieramy urządzenie, w naszym przypadku to HC-05, albo HC-06.

 

5. Podstawowe funkcje

Tutaj następuje ciekawa sprawa. Otóż takim modułem Bluetooth możemy sterować jak zwykłym urządzeniem z intefacem UART. Jednak żeby nie było monotonnie to pokażę jaką funkcję udostępnia nam Arduino. Ta funkcja to Software Serial. Polega ona na tym, że z wybranych przez nas pinów tworzy piny TxD i RxD takie same jak w UART. Oczywistym jednak jest, że software’owy UART nie będzie tak samo szybki jak sprzętowy, ale dla nas, przy wykorzystaniu prędkości 9600 Baud to nie zrobi różnicy :)

W pierwszej kolejności musimy zaimportować biblioteki SoftwareSerial. W tym celu wpisujemy:

Następnie tworzymy instancję dla naszej funkcji, przypisując jej piny:

Dalsza część wygląda jak dla zwykłego UART’u, tylko zamiast pisać Serial, będziemy pisać nazwa_instancji, ale dla pewności:

  • Definiowanie prędkości danych:
  • Wysyłanie danych w jednej linii:
  • Wysyłanie danych od nowej linii:
  • Sprawdzenie czy są jakieś dane do odebrania:
  • Czytanie odebranych danych:

6. Przykładowy program #1:  Sterowanie światłem

Program będzie działać na zasadzie – jak nazwa wskazuje – sterownika do światła. Z telefonu/komputera będziemy wysyłać komendę, a Arduino będzie musiało je zdefiniować.

Schemat:

17.1

Program:

Na samym początku programu, importujemy bibliotekę do obsługi software’owego UART’u. Następnie tworzymy dla niego instancję o nazwie Bluetooth, gdzie pin 10. to RX, a pin 11. to TX. Teraz definiujemy zmienną dioda i przypisujemy jej pin 9., który zarazem działa jako PWM.  Odebrane dane będziemy zapisywać do zmiennej typu int – w tym przypadku BluetoothDane, ponieważ będą wysyłane same, pojedyncze znaki. Następnie musimy w pętli startowej zawrzeć funkcje, uruchamiające sprzętowy UART jak i software’owy przy pomocy funkcji Bluetooth.begin() oraz Serial.begin(). Prędkość obu transmisji została ustawiona na 9600 bodów. Przechodzimy teraz do pętli głównej programu. Na samym początku pętli sprawdzamy, czy są jakieś dane do odebrania. Jeżeli są, to przypisz zmiennej BluetoothDane, odczyt tych danych, a następnie sprawdzaj czy te dane pokrywają się ze „wzorcem”, czyli jak zostanie odebrana 1 to zapal diodę, jak 0 to zgaś, jak 2 to ustaw PWM na diodzie o wypełnieniu 25% itd.

Po wgraniu programu powinniśmy otrzymać taki efekt jak na filmie poniżej:

Podsumowanie

Po tej części kursu powinieneś umieć:

  • Rozróżniać wersje HC-05 od HC-06
  • odbierać dane po Bluetooth
  • wysyłać dane po Bluetooth

Materiały do tej części kursu:

Download-icon

 

 

 


Jeżeli chcesz być informowany na bieżąco o nowych częściach kursu to kliknij „Lubię to!” bądź subskrybuj naszą stronę, aby otrzymywać na adres e-mail nowości ze strony. Jeżeli masz jakieś pytania to śmiało zadawaj je na forum ; )

  • 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.