Moduł bluetooth HC-05
Niewielki, gotowy do podłączenia do płytki stykowej. Najważniejsze cechy to:
- Bluetooth 2.0 (czyli starsza wersja, będzie działać z każdym urządzeniem)
- tryb pracy - port szeregowy
- zasilanie - 3.3V - 6.5V. Najlepiej pracuje dla zasilania 5V.
- domyślny tryb pracy - 9600 bodów, nazwa HC-05, PIN do sparowania - 1234
- UWAGA moduł działa w logice 3.3V. Napięcie ponad 3.6V może uszkodzić np piny TX/RX
Test połączenia
Najpierw proste połączenie - na komputerze będziemy odbierać dane wysłane z komórki. Potrzebne elementy:
- Moduł Bluetooth HC-05
- Konwerter USB/Serial np taki ze złączem mini USB lub Arduino UNO oryginalne albo klon
- smartfon z terminalem przez Bluetooth. Np Android i Serial Bluetooth Terminal
- płytka stykowa i przewody do podłączenia
Arduino jako konwerter USB/Serial
Arduino UNO może posłużyć jako konwerter USB/Serial. W tym celu przewodem łączymy gniazda RESET i GND na Arduino. By teraz skorzystać z konwertera USB/Serial na Arduino wejście TX na Arduino łączymy z TX na adapterze USB.
UWAGA Normalnie spotykasz się z połączeniem TX/RX na krzyż, czyli TX na modemie podłączamy z RX na Arduino. Ale to wtedy gdy chcesz skomunikować moduł Bluetooth z ATMegą na Arduino. Teraz chcemy wysyłać dane do komputera, wiec TX na Arduino (transmit, czyli nadawanie) jest miejscem gdzie jest podłączmy RX (receive, odbieranie) konwertera USB/Serial. A tam właśnie chcemy wysłać dane z modułu Bluetooth.
Połączenia:
Jako pierwsze GND na Arduino łączysz z RESET na Arduino. Ważne by to było pierwsze połączenie, jeśli łączysz na włączonym Arduino.
Moduł Bluetooth HC-05 | Arduino |
---|---|
GND | GND |
Vcc | 5V |
TX | TX |
Konwerter USB/Serial
Moduł USB/Serial podłączamy do modułu BT nieco inaczej (tutaj jest połączenie na krzyż):
Moduł Bluetooth HC-05 | Konwerter USB/Serial |
---|---|
GND | GND |
Vcc | Vcc |
TX | RX |
Parowanie telefonu
Po podłączeniu zasilania dioda na module BT miga szybko (2-3 razy na sekundę). Oznacza to że urządzenie nie jest sparowane. W telefonie włączasz Bluetooth i wyszukujesz urządzenia. Domyślna nazwa modułu to "HC-05". Sparuj telefon z urządzeniem, jeśli spyta się o PIN, to domyślny PIN jest "1234".
Na telefonie zainstaluj aplikację terminala szeregowego. My do tego celu użyliśmy Serial Bluetooth Terminal.
Po sparowaniu telefonu dioda na module miga o wiele rzadziej, co 2, 3 sekundy.
Test działania
Na komputerze uruchamiamy Arduino IDE i włączamy monitor portu szeregowego (menu Tools/Serial Monitor
lub Ctrl+Shift+M
), wybieramy prędkość 9600 bodów. Teraz uruchamiamy aplikację Serial Bluetooth Terminal.
Klikamy w ikonkę dwóch złącz, obok kosza, na górze ekranu. Aplikacja spróbuje nawiązać połączenie.
Teraz wpisujemy testowy tekst i wysyłamy go do modułu
Na monitorze portu szeregowego powinno się pojawić, to co wysłaliśmy do modułu. Komunikacja nawiązana, moduł przetestowany.
Komunikacja dwustronna
Moduł HC-05 pracuje z napięciami do 3.6V na wszystkich swoich portach I/O. Podanie większej wartości może uszkodzić moduł. W internecie możesz znaleźć przykłady, że ludzie podłączają piny RX HC-05 bezpośrednio do Arduino i im działa, ale ryzykujesz uszkodzenie modułu.
Najlepiej jest skorzystać z konwertera poziomów logicznych (np. któryś z konwerterów poziomów w ofercie Nettigo), lub zrobić taki samemu z dwóch rezystorów. Komunikacja UART jest na każdej linii jednokierunkowa, dlatego tak prosty konwerter z dwóch rezystorów będzie wystarczający.
Jak działa taki konwerter? Używając dwóch rezystorów możemy obniżyć napięcie. Jeśli weźmiemy dwa takie same rezystory, to korzystając ze schematu poniżej uzyskamy obniżenie napięcia o połowę. Czyli dla sygnału wejściowego 5V otrzymamy 2.5V, które jest jednocześnie bezpieczne dla HC-05 i jednoznacznie odczytywane jako logiczna jedynka.
UWAGA Tak obniżać napięcie możemy tylko przy bardzo niskich prądach przepływających przez dzielnik. Jeżeli ten warunek nie będzie spełniony, podział napięcia będzie zależał od chwilowego obciążenia i nie będzie się dało łatwo przewidzieć napięcia wyjściowego. Czyli taki dzielnik nie nadaje się do budowy zasilacza, ale jako jednokierunkowy konwerter sygnału będzie w sam raz. Staraj się użyć dużych rezystorów (rzędu 10kΩ i więcej) do budowy takiego dzielnika, by minimalizować prąd płynący przez taki dzielnik.
Szkic na Arduino
W celu testu komunikacji dwukierunkowej, każdy odebrany znak zamienimy na znak z kodem ASCI o jeden większym (czyli 'a' na 'b', 'x' na 'y', 'A' na 'B') i odeślemy. Podłączamy układ jak schemacie powyżej i wgrywamy szkic:
void setup() {
Serial.begin(9600);
}
char c;
void loop() {
if (Serial.available()) {
c = Serial.read() + 1;
Serial.print(c);
}
}
UWAGA - podczas programowania musisz odłączyć moduł HC-05. Z dwóch powodów. Na linii TX modułu może się pojawić napięcie 5V (bo programowanie odbywa się właśnie przez TX/RX na ATmega328). Drugim powodem jest to, że UART jest szyną dla dwóch urządzeń. W przypadku gdy są trzy urządzenia podpięte do linii TX/RX komunikacja i tak się może nie udać (trzy urządzenia to ATMega328 w Arduino UNO, HC-05 oraz ATmega16u2 w Arduino UNO.)
Podłączamy znowu telefon do modułu BT i przykład komunikacji między telefonem i Arduino:
Trochę bardziej użyteczny kod - podajemy numer portu analogowego a Arduino odsyła nam odczyt z tego portu. Pamiętajmy by w opcjach terminala portu szeregowego nie zapomnieć wyłączyć wysyłania znaków nowej linii na koniec. Nasz kod będzie próbował znaki nowej linii odczytać jako numer wejścia analogowego...
void setup() {
Serial.begin(9600);
}
char c;
unsigned int resp;
void loop() {
if (Serial.available()) {
c = Serial.read() - 48;
if (c >= 0 && c < 6) {
resp = analogRead(A0);
Serial.print("Odczyt z portu A");
Serial.print(c, DEC);
Serial.print(": ");
Serial.println(String(resp));
} else {
Serial.println("Podaj numer portu analogowe od 0 do 5");
}
}
}
Zmiana konfiguracji modułu
Domyślne ustawienia transmisji modułu bluetooth to:
- prędkość 9600 bodów
- nazwa HC-05
- PIN: 1234
- tryb pracy slave
Ustawienia te można zmienić. Wymaga to przejście w tzw tryb pracy AT. W tym trybie moduł nie przesyła dalej otrzymanych znaków tylko można wydawać komendy, które zmienią parametry pracy. Tryb ten wywołujemy utrzymując w stanie wysokim pin KEY34
podczas startu modułu.
Pin KEY34
jest wyprowadzony na płytkę PCB zgodnie z opisem na zdjęciu. Uwaga, nie jest wyprowadzony na nóżkę modułu. By skutecznie się do niego dostać, potrzebny jest przylutowany do tego pola przewód. Pole na zdjęciu opisane jako zasilanie
to jest napięcie zasilające moduł Bluetooth ze stabilizatora napięcia. Można bezpiecznie je użyć jako napięcie do podania na KEY34
. Nie jest to napięcie z pinu VCC, jeśli podasz na pin VCC napięcie 5V, to na polu zaznaczonym strzałką będzie bezpieczne 3.3V.
Po podaniu napięcia na KEY34
można zasilić cały moduł, wystartuje w trybie komend AT. Można poznać to po wolno migającej diodzie. Normalnie po włączeniu zasilania miga kila razy na sekundę. W trybie komend AT miga raz na 2 lub 3 sekundy. Zamiast włączać zasilanie całego układu (co jest czasem kłopotliwe), można na chwilę zewrzeć do masy (GND) pole lutownicze z lewej strony modułu. Na zdjęciu to pole lutownicze opisane jest jako RESET.
Gdy moduł znajduje się w trybie pracy komend AT, jego port szeregowy pracuje z prędkością 38400 bodów. Tym razem pokażemy jeszcze jedną możliwość nawiązania komunikacji z modułem, gdzie Arduino będzie komunikować się z UART modułu korzystając z biblioteki SoftwareSerial a z komputerem przez UART. Wgraj szkic na Arduino:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
void setup() {
Serial.begin(9600);
pinMode(9,OUTPUT); digitalWrite(9,HIGH);
Serial.println("Enter AT commands:");
mySerial.begin(38400);
}
void loop()
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
}
Po wgraniu szkicu, podłącz moduł HC-05 do pinów 10 i 11 na Arduino (TX modułu HC-05 do pinu 10 a RX do pinu 11 pamiętając o konwerterze napięcia z rezystorów w tym drugim połączeniu). Wprowadzamy moduł HC-05 w tryb komend AT i otwieramy monitor portu szeregowego. Ustawiamy go na prędkość 9600 (prędkość 38400 jest pomiędzy Arduino a HC-05) tryb końca linii na CR+LF i możemy wydawać komendy:
AT
: Sprawdzenie połączeniaAT+NAME
: Wyświetla nazwę modułuAT+ADDR
: Wyświetla adres modułuAT+VERSION
: Wyświetla wersję oprogramowaniaAT+UART
: Wyświetla prędkość transmisjiAT+ROLE
: Wyświetla tryb pracy modułu(1=master/0=slave)AT+RESET
: Resetuje moduł i wychodzi z trybu ATAT+ORGL
: Przywraca fabryczne ustawieniaAT+PSWD
: Wyświetla standardowe hasło