Mikrokontrolery - Jak zacząć?

... czyli zbiór praktycznej wiedzy dot. mikrokontrolerów.

środa, 16 marca 2011

HC-05 (Bluetooth): Komendy AT - podstawowe zasady


Autor: Dondu

Artykuł jest częścią cyklu: Bluetooth + mikrokontroler

Bluetooth HC-05: Komendy AT - Pierwsze starcie
Kolejnym krokiem wtajemniczenia przy wykorzystaniu modułu Bluetooth HC-05 (jak i całej rodziny tych modułów) jest opanowanie ustawiania jego parametrów.

Parametry te ustawia się z wykorzystaniem tzw. komend AT (ang. AT commands). Komendy te to określone ciągi znaków ASCII, które przesyła się do modułu HC-05 za pomocą interfejsu UART, z wykorzystaniem linii RxD oraz TxD modułu.

Zestaw komend przedstawię w kolejnym artykule, w niniejszym bowiem zajmiemy się przede wszystkim poznaniem zasad jakie obowiązują podczas wysyłania komend do modułu oraz odbierania odpowiedzi z modułu.

Przygotujmy sprzęt ...

W tym celu posłużymy się komputerem wyposażonym w port szeregowy COM (lub adapter COM-USB) i podłączymy do niego moduł HC-05 pamiętając o tym, by skrzyżować sygnały TxD oraz RxD:




oraz o dostosowaniu poziomów logicznych do sygnałów w module HC-05 czyli 3,3V, jeżeli nie masz odpowiedniego adaptera, który zawiera w sobie taki konwerter poziomów.

Możesz do tego użyć np. takiego dwukierunkowego konwertera napięć( ang. Bi-Directional Logic Level Converter):


Level shifter (dwukierunkowy konwerter poziomów na tranzystorach MOSFET).
Dwukierunkowy konwerter poziomów.

o którym pisałem w artykule: HC-05 (Bluetooth) - Informacje podstawowe

Przyda nam się także dokumentacja rodziny HC-0x: HC-Serial-Bluetooth-Products.pdf (kopia)





Wejście w tryb komend AT

Aby moduł HC-05 mógł odbierać komendy AT i reagować na nie, należy go do tego zmusić. Są na to dwa sposoby:

Sposób 1 (AT Mode 1)

W dokumentacji znajdziemy informację, że dla modułu HC-05 sposób pierwszy polega na:


HC-05: Pierwszy sposób wejścia do trybu komend AT


... czyli w trakcie pracy modułu przy włączonym wcześniej zasilaniu należy wymusić na pinie nr 34 (PIO11) stan wysoki.

W tym sposobie parametry transmisji UART są takie same jak aktualnie ustawione. Jeżeli więc jest to moduł fabrycznie nowy będą to:
  • 9600bps,
  • 8-bit,
  • 1 bit stopu,
  • brak parzystości
Jeżeli natomiast ustawiłeś inne, to takimi powinieneś nawiązywać łączność także w trybie AT.


Sposób 2

Drugi sposób przedstawia się następująco:


HC-05: Drugi sposób wejścia do trybu komend AT

... czyli
  1. przed włączeniem zasilania modułu lub jednocześnie z włączeniem zasilania należy wymusić na pinie nr 34 (PIO11) stan wysoki (np. podpinając go do pinu zasilającego moduł HC-05),
  2. po włączeniu zasilania moduł gotowy jest do przyjmowania komend AT według podanych niżej parametrów transmisji UART:
    • 38400bps,
    • 8-bit,
    • 1 bit stopu,
    • brak parzystości

Zauważ, że tryb ten z góry ma ustawione stałe parametry i zawsze będą to takie, a nie inne parametry niezależnie co wcześniej ustawiłeś komendami AT.

Dlatego tryb ten powinieneś wybrać w szczególności wtedy, gdy chcesz skomunikować się z modułem, którego ustawień parametrów transmisji UART nie znasz.


Dlaczego nie wszystkie komendy AT działają?

Możesz się spotkać z sytuacją, że część komend AT działa poprawnie, a część jest ignorowanych przez moduł. Jest to związane bezpośrednio z funkcjonalnością modułu, która została specjalnie tak przygotowana:


HC-05: Pin 34 PIO11 w trybie komend AT


Innymi słowy, aby wszystkie komendy AT działały poprawnie, będąc w trybie komend AT należy utrzymywać pin nr 34 (PIO11) w stanie wysokim niezależnie, którym sposobem włączyłeś tryb AT. W przeciwnym wypadku niektóre komendy nie będą działały, co pokażę w dalszej części artykułu.




Kilka podstawowych komend AT

W niniejszym artykule zaprezentuję i przetestujemy jedynie kilka prostych komend. Pozostałe omówię w kolejnych artykułach.

Najważniejszą na tym etapie informacją jest, iż:

HC-05: Wielkość liter komend w trybie AT jest istotna!

czyli:

Wszystkie komendy AT powinny być wysłane dużymi znakami ponieważ oprogramowanie modułu tylko takowe interpretuje. W tym przypadku są jednak wyjątki i niektóre wersje oprogramowania modułów, poprawnie interpretują także małe litery. Bezpiecznie jednak jest używać dużych.

Druga część powyższego fragmentu dokumentacji mówi, że:

Wszystkie komendy AT powinny być wysłane z terminatorem (czyli sufiksem) w postaci znaków "powrotu karetki" i "nowej linii", czyli dwóch bajtów \r\n (odpowiednio 0d 0a szesnastkowo).


AT

Komenda wysłana Odpowiedź z modułu Parametry
AT OK brak

Komenda AT służy jedynie do sprawdzenia, czy komunikacja z modułem HC-05 jest prawidłowa oraz czy moduł na pewno jest w trybie przyjmowania komend AT.


AT+RESET

Komenda wysłana Odpowiedź z modułu Parametry
AT+RESET OK brak

Komanda AT+RESET powoduje wyjście z trybu komend AT.


AT+VERSION

Komenda wysłana Odpowiedź z modułu Parametry
AT+VERSION? +VERSION:<Param>
OK
<Param> : Wersja oprogramowania modułu

Komenda AT+VERSION? żąda od modułu podania zainstalowanej w nim wersji oprogramowania.


AT+NAME

Komenda wysłana Odpowiedź z modułu Parametry
AT+NAME=<Param> OK <Param> : Nazwa modułu (domyślnie np.: HC-05)
AT+NAME?+NAME:<Param>
OK

lub w przypadku błędu:

FAIL
<Param> : Nazwa modułu (domyślnie np.: HC-05)

Komenda AT+NAME służy zarówno do odczytania aktualnej nazwy modułu, jak i ustawienia nowej.






Testujemy komendy AT

Jeżeli mamy już:
  • podłączony do komputera moduł HC-05,
  • włączony tryb AT sposobem nr 2 (opisanym wyżej), 
  • włączony i ustawiony terminal Realterm,
powinieneś zaobserwować miganie diody z częstotliwością zmian stanu co dwie sekundy:


HC-05: Dioda sygnalizująca tryb AT.


Możemy więc przystąpić do wydawania komend AT. Do testów wykorzystamy przedstawione wyżej trzy proste komendy AT oraz jedną nieco bardziej skomplikowaną, którą odczytamy aktualną nazwę modułu oraz ustawimy nową.

Do wejścia w tryb komend AT w niniejszym artykule wykorzystałem opisany wyżej Sposób 2 po to, by nie było wątpliwości jakie parametry transmisji mają być ustawione, by móc wydawać komendy poprzez UART:


Terminal Realterm przygotowany do pracy z modułem HC-05 w trybie AT i prędkości 38400bps.


Musisz wiedzieć, że na potrzeby tego artykułu:

Po wejściu w tryb AT zwolniłem pin nr 34 (PIO11), czyli odłączyłem od niego stan wysoki (zwolniłem przycisk, który mam na tym pinie podłączony, a który zwiera do Vcc modułu, gdy jest przyciśnięty).

Zrobiłem to po to, by pokazać, że w takiej sytuacji niektóre komendy AT będą ignorowane, o czym pisałem wcześniej.


Wysyłamy pierwszą niepoprawną komendę AT:


Terminal Realterm - wysłanie pierwszej komendy AT do modułu HC-05.


Dlaczego niepoprawną? Ponieważ nie dodaliśmy terminatora \r\n, który oznacza dla modułu, że to jest koniec komendy. Stąd też moduł otrzymał jedynie dwa znaki będące literami A oraz T i oczekuje dalszych, a w szczególności znaków terminatora \r\n.

Gdy w następnej kolejności wyślemy poprawną komendę AT z terminatorem \r\n:


HC-05 w trybie AT zgłasza błąd wysłanej komendy.


otrzymujemy błąd ponieważ w tych dwóch krokach wysłaliśmy w sumie taką komendę:

ATAT\r\n

a ona jest oczywiście nieprawidłowa.

Jeżeli ponownie wyślemy poprawną komendę, będzie już wszystko OK:


Terminal Realterm - wysłanie komendy AT wraz z terminatorem do modułu HC-05.


moduł odpowiada nam zgodnie z tabelką komendy AT


Komenda wysłanaOdpowiedź z modułuParametry
ATOKbrak

czyli wysłaniem dwóch liter: OK

Ponieważ jednak kłopotliwe jest ciągłe dodawanie terminatora \r\n, możemy wykorzystać możliwości terminala Realterm i ustawić ich automatyczne dodawanie zawsze po kliknięciu przycisku Send:


Terminal Realterm - ustawienie automatycznego dodawania terminatora do komend AT.


Dla pierwszego pola za pomocą którego wpisywałem komendy AT znaczniki terminatora oznaczyłem strzałkami czerwonymi. CR to \r , a LF to \n. Znaczniki drugiego pola oznaczyłem strzałkami zielonymi. Zauważ, że w polu komendy wpisałem już tylko komendę AT (bez terminatora). To bardzo wygodne rozwiązanie.

Zauważyć należy, że moduł odpowiada komunikatem, który także jest zakończony znakami terminatora \r\n. Dlatego w oknie terminala są one widoczne.

Aby nie było widać znaków specjalnych w trakcie realizowania komunikacji możesz w terminalu ustawić tryb Ansi:

Terminal Realterm - ustawienie trybu wyświetlana ANSI (bez znaków specjalnych).


... ufff ... przebrnęliśmy przez istotne informacje i wyjątki, więc ...


... zaczynamy jeszcze raz

Klikając przycisk Clear (po prawej) i mając już poprawnie ustawiony terminal pod każdym kątem, wysyłamy komendę AT:


HC-05 - ponowne wysłanie poprawnej komendy AT.


i zgodnie z tabelą komendy AT otrzymaliśmy odpowiedź w formie dwóch znaków: OK

Wyślijmy więc kolejną z komend, którą będzie AT+VERSION , a ponieważ ma to być pytanie skierowane do modułu stąd na końcu dodamy znak zapytania:


HC-05 - Wysłanie poprawnej komendy: AT+VERSION?


W odpowiedzi otrzymaliśmy ciąg znaków z fragmentem komendy i wersją oprogramowania modułu oraz ponownie OK. Jest to zgodne z tabelą komendy AT+VERSION przedstawionej w niniejszym artykule, a którą ponownie załączę, by nieco wyjaśnić:


Komenda wysłanaOdpowiedź z modułuParametry
AT+VERSION?+VERSION:<Param>
OK
<Param> : Wersja oprogramowania modułu


Z ekranu terminala odczytujemy co z otrzymanego ciągu znaków +VERSION:2.0-20100601 jest naszym parametrem <Param> Jest nim ciąg znaków 2.0-20100601 który oznacza wersję programu zainstalowanego w module.


Teraz wykonajmy kolejną komendę tym razem spróbujemy odczytać nazwę modułu komendą: AT+NAME?


HC-05 - Wysłanie poprawnej komendy: AT+NAME?


... i niestety rozczarowanie - moduł kompletnie zignorował zapytanie o nazwę (pomimo kilkukrotnych prób). Jeśli uważnie czytałeś artykuł to zapewne domyślasz się, że jest to związane z faktem, iż po wejściu w tryb AT odłączyłem stan wysoki z pinu nr 34 (PIO11).

Podłączmy więc ponownie (będąc cały czas w trybie AT) pin nr 34 (PIO11) do stanu wysokiego i spróbujmy wysłać ponownie komendę: AT+NAME?


HC-05 - Ponowne wysłanie poprawnej komendy: AT+NAME?


Tym razem moduł zrewanżował się poprawną informacją o nazwie modułu, która jest parametrem zgodnie z tabelą tej komendy:


Komenda wysłanaOdpowiedź z modułuParametry
AT+NAME?+NAME:<Param>
OK

lub w przypadku błędu:

FAIL
<Param> : Nazwa modułu (domyślnie np.: HC-05)


Naszym parametrem <Param> jest więc ciąg znaków aktualnie ustawionej nazwy modułu: HC-05


Spróbujmy teraz ustawić nową nazwę modułu tą samą komendą według zasady podanej w tabeli tej komendy:


Komenda wysłanaOdpowiedź z modułuParametry
AT+NAME=<Param>OK<Param> : Nazwa modułu (domyślnie np.: HC-05)

Załóżmy, że chcemy go nazwać: Dondu-HC05

Zgodnie z tabelą nowa nazwa będzie parametrem <Param> , stąd  komenda AT powinna wyglądać następująco:


HC-05 - Ustawianie nowej nazwy komendą AT+NAME=


... i z ulgą stwierdzamy, że moduł odpowiedział OK co oznacza, że nazwa została zmieniona.


Z ciekawości zobaczmy, co się stanie jeżeli spróbujemy ustawić w nazwie jakiś niedozwolony znak ASCII, np. wykrzyknik:


HC-05 - Ustawianie nowej niedozwolonej nazwy komendą AT+NAME=


i stwierdzam, że moduł odpowiedział komunikatem błędu: ERROR:(0)


Ponieważ wcześniej poprawnie ustawiliśmy już nową nazwę sprawdźmy, czy przy powyższym błędzie ustawiona nazwa nie została nadpisana w jakiś sposób. Wysyłamy więc ponownie żądanie podania aktualnie ustawionej nazwy komendą: AT+NAME? pamiętając, że dla tej komendy pin nr 34 (PIO11) musi być podłączony do stanu wysokiego (o czym pisałem wcześniej):


HC-05 - Pobranie aktualnej nazwy modułu komendą AT_NAME?


i stwierdzamy, że wszystko jest OK - nowa nazwa jest ustawiona.

Mamy już ustawioną nową nazwę modułu sprawdźmy więc, czy moduł zostanie wykryty przez komputer za pomocą bluetooth:


System Windows XP nie wykrywa modułu HC-05


Nie został wykryty ponieważ ciągle jesteśmy w trybie wydawania komend AT, powinniśmy więc zakończyć tryb wysłaniem komendy AT+RESET:


HC-05: Wysłanie komendy AT+RESET wyłącza tryb AT


a otrzymany w odpowiedzi OK oraz zmiana częstotliwości mrugania diody LED modułu:


HC-05: Dioda sygnalizująca wyjście z trybu AT.


utwierdzają nas, że poprawnie zostały zapisane przez nas dokonane zmiany (zmiana nazwy urządzenia) i dokonaliśmy zamknięcia trybu komend AT.


Sprawdźmy więc ponownie, czy teraz moduł będzie już wykrywany i pod jaką nazwą:


System Windows XP wykrywa poprawnie moduł HC-05 z nową nazwą


Jak widać poprawnie ustawiliśmy nową nazwę nabierając jednocześnie doświadczenia w wydawaniu modułowi komend AT :-)

W przypadku systemu Windows możesz się spotkać z sytuacją, że moduł nadal jest wykrywany pod starą nazwą.

W takiej sytuacji by się upewnić, że zmiana nazwy nastąpiła prawidłowo wykorzystaj swój telefon i sprawdź jak on wykrywa moduł.




Podsumowanie

Jak widać operowanie komendami AT z poziomu terminala Realterm zainstalowanego na komputerze nie jest trudne. Więcej się napracujemy, gdy będziemy robić to za pomocą mikrokontrolera podłączonego do modułu.

Zasada jest taka sama dla wszystkich urządzeń wykorzystujących komendy AT, choć oczywiście komendy mogą być różne.

Zapamiętaj, że moduły mogą różnie się zachowywać z powodu różnych wersji oprogramowania. Przedstawione w niniejszym artykule zachowanie modułu jest zgodne z wersją programu  2.0-20100601. Jeżeli posiadasz inną wersję działanie Twojego modułu może się różnić od przedstawionego wyżej.

W kolejnym odcinku przedstawię zestawienie wszystkich komend AT modułu HC-05 i innych z tej rodziny, a w następnych zajmiemy się ciekawymi możliwościami HC-05 i związanymi z nimi komendami AT .


Oceń artykuł.
Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły.
Pozdrawiamy, Autorzy
Ten artykuł oceniam na:

29 komentarzy:

  1. Krókie pytanie...
    W jaki sposób ustawić stan wysoki na pinie 34 posiadając taki moduł jaki pokazujesz na obrazkach? :) Czy odpowiedzialny za to jest pin EN?

    OdpowiedzUsuń
    Odpowiedzi
    1. Z tego co znalazłem w czeluściach internetu to do wprowadzenia w tryb AT służy przycisk. Trzeba go kliknąć, a on zwiera 3.3V z regulatora do pinu 34

      Usuń
    2. TAK , TO DZIAŁA . PODŁĄCZASZ ZESTAW Z PRZYTRZYMANYM PRZYCISKIEM I PRZECHODZI W TRYB AT

      Usuń
  2. A czy istnieje sposób na wydanie komendy AT przez BT ?

    OdpowiedzUsuń
  3. znaczy chodzi mi o komendy At w celu przeprogramowania modułu przez BT

    OdpowiedzUsuń
    Odpowiedzi
    1. Nie ma takiej możliwości. Być może jakaś wersja oprogramowania pozwala na takie rozwiązanie, ale nie spotkałem się z takimi modułami HC-05.

      Usuń
  4. Mam problem, gdy chcę wysłać komendę AT za pomocą Send ASCII. Kiedy klikam "Send ASCII" pojawia się dymek z komunikatem: "Chars sent aren't displayed when half-duplx is set" i nic się nie dzieje.
    Czy jest to związane z ustawieniami RealTerm'a?

    OdpowiedzUsuń
    Odpowiedzi
    1. Jak wygląda komenda, którą chcesz wysłać?

      Usuń
    2. Najpierw próbowałem komendę: AT (miałem zaznaczone w EOL +CR i +LF). Później próbowałem, z odznaczonymi opcjami w EOL, komendą: AT\r\n
      Żadna z komend nie przyniosła efektu. Zaznaczę (bo może jest to istotne), że moduł bluetooth jest podłączony przez płytkę stykową do Arduino Leonardo.

      Usuń
  5. Mam problem z komendami, co bym nie wysłał to moduł odsyła to samo, np. wysyłam komendę AT i zamiast odpowiedzi ok, dostaję AT. O co tu chodzi?

    OdpowiedzUsuń
    Odpowiedzi
    1. Czy poprawnie wprowadziłeś moduł w tryb przyjmowania komend AT?

      Usuń
  6. Masz rację nie było trybu AT, ale z nim mam teraz wielki problem bo wchodzę w ten tryb a nie mogę się połączyć przez RealTerm. Opiszę po kolei co robię i proszę o wskazanie błędu.
    Moduł mam na płytce stykowej z Atmegą 32, wyprowadzenia TX i RX mam podłączone do procka, na rozłączonym zasilania naciskam przycisk i podłączam zasilanie, dioda zaczyna migać jak ta w artykule więc puszczam przycisk i próbuję się podłączyć przez RealTerm z prędkością 38400 i po chwili wyrzuca mi błąd "Przekroczono limit czasu semafora". Próbowałem też na prędkości 9600, łączyłem na krzyż TX z RX i też nic z tego.

    OdpowiedzUsuń
    Odpowiedzi
    1. Zresetuj komputer i daj znać, czy pomogło.

      Usuń
    2. Resetowałem i nic nie pomogło

      Usuń
    3. Hmm, parę razy zdarzyło mi się taki komunikat (na Win XP) przy transmisji szeregowej uzyskiwać (niezależnie, czy była to transmisja przez Bluetooth, czy kablowa), ale nie pamiętam co było przyczyną. Odinstaluj Realterm i zainstaluj jeszcze raz i daj znać.

      Jeśli możesz, to spróbuj także na innym komputerze.

      Usuń
    4. Próbowałem i niestety nic z tego, zainstalowałem też Flash Magic, ale też nie udało się połączyć. Inny komputer będę miał dopiero w sobotę, więc wtedy to sprawdzę. A sposób w jaki to robie jest prawidłowy? Nie powinno być nic podłączone pod pin EN?

      Usuń
    5. Próbowałem na dwóch innych komputerach i za każdym razem ten sam problem. Czego to może być wina? Źle jest coś podłączone czy o co tu chodzi? Mam 3 moduły HC-05 więc raczej mało prawdopodobne aby wszystkie 3 były uszkodzone i przez to nie działały...

      Usuń
    6. I ciągle ten sam komunikat, że przekroczono limit czasu semafora? To może być problem z systemem - zapewne masz Windows. Poszukaj w sieci informacji o tym komunikacie.

      Usuń
    7. Tak. Z tego co wyczytałem może być problem ze Smartem, nie wiem czy to się mnie dotyczy... Testowałem dysk na swoim laptopie i nie ma błędów. Co jeszcze mogę zrobić z tym problemem?

      Usuń
    8. Niestety nie wiem jak Ci pomóc. Zapytaj może na forum Elektroda.pl w dziale mikrokontrolerów. Może ktoś miał podobny problem.

      Usuń
    9. ok, mimo wszystko dzięki

      Usuń
    10. Mam ten sam problem. Czy udało Ci się go rozwiązać?

      Usuń
  7. Możesz napisać po co zastosowałeś rezystory R1 i R2 w konwerterze napięć?

    OdpowiedzUsuń
  8. Nie mogę wysyłać komend AT do modułu, włączam tryb komend AT dioda zapala się i gaśnie co 2 sekundy, wysyłam komendy z terminala, ale w odpowiedzi nic nie dostaję.

    OdpowiedzUsuń
    Odpowiedzi
    1. Którym sposobem wchodzisz w tryb komend AT?

      Usuń
  9. Hallo,
    Mogłem zablokować albo uszkodzić moduł HC-06 bawiąc się komendą AT+BAUDx?
    Przestał mi odpowiadać na komendę AT, ale sparować z telefonem jeszcze mogę...

    OdpowiedzUsuń
  10. Witam mam pytanie czy możliwa jest zmiana adreu modułu HC-05

    OdpowiedzUsuń
  11. Witam, ciekawi mnie czy można do wyżej napisanego poradnika wykorzystać samo usb? Tzn odpowiednio przez konwertery napięć podłączyć D- i D+ do modułu HC i w ten sposób wydawać komendy AT?

    OdpowiedzUsuń

Działy
Działy dodatkowe
Inne
O blogu




Dzisiaj
--> za darmo!!! <--
1. USBasp
2. microBOARD M8


Napisz artykuł
--> i wygraj nagrodę. <--


Co nowego na blogu?
Śledź naszego Facebook-a



Co nowego na blogu?
Śledź nas na Google+

/* 20140911 Wyłączona prawa kolumna */
  • 00

    dni

  • 00

    godzin

  • :
  • 00

    minut

  • :
  • 00

    sekund

Nie czekaj do ostatniego dnia!
Jakość opisu projektu także jest istotna (pkt 9.2 regulaminu).

Sponsorzy:

Zapamiętaj ten artykuł w moim prywatnym spisie treści.