wtorek, 13 czerwca 2017

Moduł bluetooth HC-05 - konfiguracja i uruchomienie w Arduino

Tym razem wziąłem na warsztat popularny moduł HC-05 służący do komunikacji po bluetooth-ie. Zapewne na powody tej popularności ma duży wpływ niska cena, do której można dodać łatwość obsługi i bezproblemowe działanie. To się ceni, zwłaszcza, że moje doświadczenia z tą technologią były dotychczas różne i niekoniecznie satysfakcjonujące.
HC-05 - góraHC-05 - dół


Cechy modułu
- Zasięg ok. 10m
- Pobór prądu (zmierzone wartości):  ~42mA (parowanie), ~20mA (transmisja), 3-6mA (brak transmisji)
- zasilanie 4,3 - 6,5V. Wewnętrzne zasilanie wynosi 3,3V (użyty został regulator napięcia 662K)
- interfejs RS232 (poziomy napięć 3,3V)
- chipset CSR BC417143
- bluetooth V2.0+EDR
- dioda LED sygnalizująca pracę/parowanie (przez mniejszą/większą częstotliwość migania)
- wbudowana antena
- wyprowadzenie: złącze goldpin z rozstawem 2.54mm
- wymiary 38x15mm


PINy modułu
- zasilanie VCC i GND
- transmisja danych RXD i TXD (spięte odpowiednio z TXD i RXD w arduino)
- STATE - stan na tym wyjściu wskazuje aktywne połączenie. Stan niski oznacza brak połączenia, stan wysoki - połączenie. Więcej w artykule HC-05 fs-040 State Pin
- WAKEUP - pin używany do wprowadzenia modułu w tryb AT poprzez podanie stanu wysokiego (3,3V). W innych modułach bywa oznaczany jako KEY lub EN.


Refleksje :)
- domyślne ustawienie modułu to identyfikator "HC-05" i haslo "1234". Tak więc trochę słabo w przypadku jednoczesnego korzystania z kilku takich modułów. Niżej piszę jak zmienić identyfikator i domyślne hasło.
- nie podłączone piny WAKEUP i STATE. O ile STATE jest raczej mało istotny, to WAKEUP przydałby się do wprowadzania komend AT, aby na przykład zmienić identyfikator czy hasło
- napięcie zasilania. Spotykałem informacje odnośnie tego modułu, że może pracować z napięciami zasilania 3,3V oraz 5V. Nie wiem skąd to się bierze, skoro regulator 662K potrzebuje minimalnego napięcia wejściowego 4,3V (źródło 3). Z ciekawości sprawdziłem jak układ się zachowuje przy zasilaniu 3,3V. Nie udało mi się sparować go z PC. Zmierzone napięcie na wyjściu 662K wynosiło ok, 2,45V.

Uruchomienie
Po włączeniu modułu, czerwony LED miga szybko (jakieś 3 razy na sekundę), co oznacza, że moduł jest w trybie parowania. Następnie w  moim Windows 8 uruchomiłem dodawanie nowego urządzenia i bez problemu wyszukał mi moduł identyfikowany jako "HC-05". Po podaniu domyślnego hasła "1234", moduł został dodany do listy urządzeń z widocznym statusem "Offline". Wspomniany LED zmniejszył teraz częstotliwość migania do z grubsza raz na 2 sekundy, co oznacza, że moduł został sparowany. W panelu sterowania (Urządzenia i drukarki) pojawiła się także ikonka HC-05. Wchodząc w jego właściwości można w zakładce Usługi zobaczyć port COM na którym można się komunikować z modułem. U mnie był to COM4. W przypadku wyłączenia i ponownego włączeniu modułu, urządzenie wchodzi w tryb parowania. Po uruchomieniu terminala (Putty) na tym porcie, moduł został sparowany.


Układ prototypowy

HC-05 w akcji


Na pierwszy ogień poszedł test echa:

#include <Arduino.h>
#include <SoftwareSerial.h>

SoftwareSerial BTSerial(10, 11); // RX, TX

void setup() {
    Serial.begin(9600);
    Serial.println("Test HC-05");
    BTSerial.begin(9600);
}


void loop() {
    if (BTSerial.available())
        Serial.write(BTSerial.read());
    if (Serial.available())
        BTSerial.write(Serial.read());
}

Na screenie są dwie instancje Putty. COM3 - to terminal szeregowy spięty z arduino przez konwerter FT232 USB UART. COM4 jest portem komunikacji z HC-05 dostępnym po sparowaniu. Jaki widać w konsoli COM3 pojawia się powitalny tekst "Test HC-05" z funkcji setup(). Następnie wpisując w tej konsoli tekst "Hello HC-05", powoduję, że pojawia się on w konsoli COM4. Analogicznie, w drugą stronę, tym razem z tekstem "Hello FT232"

Test echa

Kolejne podejście sprowadzało się do napisania prostego programu generującego liczby z przedziału 0 - 100 i przesyłaniu ich przez HC-05.

#include <Arduino.h>
#include <SoftwareSerial.h>

SoftwareSerial BTSerial(10, 11); // RX, TX
long randNumber;

void setup() {
    Serial.begin(9600);
    Serial.println("Test HC-05");
    BTSerial.begin(9600);
    randomSeed(analogRead(0));
}

void loop() {
    randNumber = random(0, 100);
    BTSerial.println(randNumber);
    delay(2000);
}

Dużo trudniej było z wizualizacją odbieranych danych, bo  zamiast użyć ponownie Putty, postanowiłem napisać pierwszy prosty programik pod androida. Wykorzystałem tu framework Ionic, oparty o  AngularJS (framework JavaScript) , HTML, CSS. W ten sposób udało mi się "pożenić" w niewielkim stopniu hobby z pracą zawodową :) Ale główny cel, to podwaliny pod sterowanie z poziomu smartfona poprzez różne kanały (bluetooth, wifi, sms'y) arduino i podłączonymi do niego modułami. Poniżej na screenie efekt prac.

Apka w androidzie odbierająca dane z HC-05

Zmiana nazwy (identyfikatora) i domyślnego hasła do modułu
Uruchomiłem tym razem RealTerm na COM3 (konwerter FT232) z załadowanym program echa. Następnie włączyłem zasilanie HC-05 i w dalszej kolejności dałem na pin WAKEUP stan wysoki 3,3V, aby wejść w tryb wydawania komend AT. Istotne jest tu, aby stan wysoki na WAKEUP pojawił się dopiero po włączeniu zasilania modułu. LED miga jak przy parowaniu. Napięcie wziąłem z linii zasilającej mikrokontroler, jednak nie wykluczone, że można też zewrzeć dwa punkty lutownicze na pinem WAKEUP, aby uzyskać ten sam efekt. Nie sprawdzałem tego, bo tylko jeden egzemplarz pod ręką i nie chciałem go popsuć. Zmierzone napięcie na górnym punkcie wynosiło 3,3V.

Zmiana nazwy modułu HC-05


Na ekranie RealTerm'a oczywiście pojawił się komunikat powitalny. Potem sprawdzam działanie trybu (pierwsze to polecenie, drugie w nawiasie - wynik wykonania polecenia):
AT (OK)
i wersję programu:
AT+VERSION (+VERSION:2.0-20100601)
oraz nazwę/identyfikator modułu:
AT+NAME (+NAME:HC-05)
i w końcu zmieniam nazwę modułu na bardziej fantazyjną:
AT+NAME=FLEA-1 (OK)
na koniec sprawdzam ponownie nazwę:
AT+NAME (+NAME:FLEA-1)
czyli pełen sukces. 

Analogicznie (nie pokazane na obrazku) zmienia się hasło komendą:
AT+PSWD=4321 (OK)
i potem można się upewnić przez:
AT+PSWD (+PSWD:4321)

Ostatecznie, telefon też znalazł urządzenie pod nazwą FLEA-1. Więcej komend można znaleźć w materiałach źródłowych.

Jest jeszcze inna możliwość przejścia w tryb wydawania komend opisana znamienitym blogu mikrokontrolery.blogspot.com w artykule HC-05 (Bluetooth): Komendy AT - podstawowe zasadyOpcji tej jednak nie testowałem z racji na małą niedogodność związaną ze zmianą prędkości transmisji 38400bps na arudino. W tryb ten przechodzi się podpinając WAKEUP pod stan wysoki (pod 3,3V) i dopiero  wtedy włączając zasilanie. Jedyne, poczynione spostrzeżenie przy tej okazji jest takie, że LED miga świecąc ok. 2 sekundy po czym gaśnie na podobny okres czasu.

Źródła:
1) Specyfikacja BC417143
2) HC-05 fs-040 State Pin
3) Specyfikacja regulatora napięcia 662K
4) AT Command Mode of HC-05 and HC-06 Bluetooth Module
5) HC-05 (Bluetooth): Komendy AT - podstawowe zasady

Brak komentarzy:

Prześlij komentarz