Arduino może komunikować się z innymi urządzeniami poprzez Bluetooth za pomocą modułu HC-05 (master/slave). Umożliwia on Arduino łączenie się i wymianę danych z innymi urządzeniami, takimi jak smartfon, komputer lub inne mikrokontrolery.Komunikacja Bluetooth może być wykorzystana np. do zdalnego sterowania robotem, Wyświetlania i przechowywania danych na komputerze lub na smartfonie.
Wymagania wstępne: Arduino Komunikacja szeregowa
Materiał
- Komputer
- Arduino UNO x2
- Kabel USB
- Moduł Bluetooth HC-05 ZS-040 x2 (lub 1x HC-.05 i 1x HC-06)
- Kable Dupont M/F
Przegląd modułu HC-05
Moduł Bluetooth HC-05 posiada 6 pinów, 2 do zasilania, 2 do nawiązania połączenia, 1 do wejścia w tryb konfiguracji i drugi do poznania stanu połączenia.
- VCC zasilanie. Typowo podłączane do pinu 5V w Arduino.
- GND masa. Typowo podpinany do pinu GND układu Arduino
- Pin odbiorczy RX. Typowo podłączany do pinu nadawczego (TX) układu Arduino
- Pin nadawczy TX. Typowo podłączany do pinu odbiorczego (RX) układu Arduino
- Stan HIGH, gdy moduł jest podłączony
- Key ou EN musi być ustawiony na HIGH (3.3V), aby wejść w tryb konfiguracji i musi być odłączony, aby wejść w tryb komunikacji.
Szczególną cechą HC-05 jest to, że może on być używany jako moduł slave (odpowiednik HC-06) oraz jako moduł master, co oznacza, że może on samodzielnie parować się z innym urządzeniem.
Schemat do konfiguracji
UWAGA :
- Wykorzystujemy pin 2 i 3 mikrokontrolera Arduino Uno. W zależności od mikrokontrolera, niektóre piny mogą nie obsługiwać komunikacji szeregowej. Szczególnie dotyczy to Arduino Mega, Micro i Leonardo. Sprawdź dokumentację.
- Ponieważ moduł Bluetooth używa logiki 3.3V, zaleca się dodanie dzielnika napięcia, aby zredukować napięcie 5V z Arduino. (rezystor 1k pomiędzy pin3 i Rx; 2k Ohm pomiędzy Rx i GND).
Konfiguracja modułu HC-05
Konfiguracja modułu HC-05 może być interesująca, aby sprawdzić, czy działa, czy jest prawidłowo podłączony i aby zmienić jego parametry, takie jak nazwa (przydatne, gdy używasz kilku modułów), kod PIN i prędkość komunikacji (baudrate). Szczególnie, jeśli chcesz go używać jako modułu nadrzędnego. Aby umożliwić konfigurację, moduł HC-05 powinien być zasilany, ale nie sparowany, a pin KEY/EN powinien być ustawiony na HIGH przed włączeniem modułu. W trybie konfiguracji dioda LED będzie migać co dwie sekundy.
Otwórz monitor szeregowy i wybierz opcję linii końcowej „New line” oraz szybkość transmisji 9600.
Zauważ, że HC-05 wchodzi w tryb konfiguracji z szybkością transmisji 38400bps.
Kod konfiguracyjny
Następujący kod pozwala na modyfikację i sprawdzenie parametrów przy użyciu monitora szeregowego i komend AT.
#include <SoftwareSerial.h>#define rxPin 2#define txPin 3#define baudrate 38400String msg;SoftwareSerial hc05(rxPin ,txPin);void setup(){ pinMode(rxPin,INPUT); pinMode(txPin,OUTPUT); Serial.begin(9600); Serial.println("ENTER AT Commands:"); hc05.begin(baudrate);}void loop(){ readSerialPort(); if(msg!="") hc05.println(msg); if (hc05.available()>0){ Serial.write(hc05.read()); }}void readSerialPort(){ msg=""; while (Serial.available()) { delay(10); if (Serial.available() >0) { char c = Serial.read(); //gets one byte from serial buffer msg += c; //makes the string readString } }}
Komendy AT
W porównaniu z modułem HC-06, HC-05 może być używany jako moduł nadrzędny i można również sprawdzać zapisane parametry za pomocą komend AT.
Ogólnie, wpisanie komendy AT+<command>? spowoduje wyświetlenie zapytania o zapisany parametr (np. AT+PSWD? spowoduje wyświetlenie kodu PIN modułu). Jeśli wpiszesz AT+<command>=<Param>, możesz ustawić wartość parametru (ex: AT+PWSD=0000 aby zmodyfikować kod PIN na 0000).
Oto niektóre z komend AT:
- Aby przetestować komunikację, wpisz AT w monitorze szeregowym Arduino IDE. Jeśli wszystko jest skonfigurowane poprawnie, powinien wyświetlić OK.
- Aby zmodyfikować nazwę modułu, wpisz AT+NAME=<Param>. Moduł powinien odpowiedzieć OK (Defaut HC-05, Ex: Aby zmienić nazwę na BTM1 wpisz AT+NAME=BTM1).
- Aby zmodyfikować kod PIN, wpisz AT+PSWD=<Param> . Moduł powinien odpowiedzieć OK(Domyślnie 1234 Przykład: Aby zmienić PIN na 0000 wpisz AT+PSWD=0000).
- AT+ROLE=<Param> aby ustawić rolę modułu jako slave lub master (Domyślnie 0, Przykład: Aby zmienić rolę jako master wpisz AT+ROLE=1, jako slave wpisz AT+ROLE=0).
- Aby zmodyfikować prędkość transmisji należy wpisać AT+UART=<Param1>,<Param2>,<Param3> z parametrami komunikacji szeregowej Param1, 2 i 3: odpowiednio baudrate, bit stopu i bit parzystości (Domyślnie ustawione na 9600,0,0. Ex: aby zmienić baudrate na 115200 wprowadź AT+UART=115200,0,0).
Inne polecenia AT istnieją dla modułu Bluetooth HC-05, które można znaleźć pod linkiem.
UWAGA: Istnieją różne wersje modułu HC-05 i procedura konfiguracji może się różnić. Pamiętaj, aby sprawdzić etykietę modułu i wersję firmware przed użyciem. Do tego poradnika użyliśmy modułu HC-05 oznaczonego ZS-040 i wersji firmware 2.0-20100601.
N.B.: Jeśli moduł nie odpowiada, sprawdź okablowanie, przewodność kabli i szybkość transmisji.
Nie wahaj się zostawić komentarz lub skontaktować się z nami, jeśli masz problemy z konfiguracją modułu HC-05.
Konfiguracja Slave
Aby ustawić moduł jako slave, możesz zmienić nazwę jako AT+NAME=HC05-Slave i wybrać parametry komunikacji oraz kod PIN, które chcesz. Musisz się upewnić, że master i slave mają takie same parametry komunikacyjne.
- AT zwraca OK
- AT+NAME=HC05-Slave
- AT+UART=9600,0,0
- AT+ROLE=0
- Wprowadź AT+ADDR aby uzyskać adres modułu (ex: +ADDR:98d3:32:21450e)
Do modułu slave można również użyć modułu HC-06
Konfiguracja master
Aby ustawić moduł jako master, należy zmienić rolę i ustawić te same parametry komunikacyjne, co w przypadku modułu slave.
- AT zwraca OK
- AT+NAME=HC05-Master
- AT+UART=9600,0,0
- AT+ROLE=1
- Adres modułu slave musi być wprowadzony do modułu master, aby umożliwić jego działanie: AT+BIND=98d3,32,21450e (zamień kropki „:” na przecinek „,”)
Schemat do komunikacji
W trybie komunikacji pin Key/EN nie jest podłączony.
Kod komunikacyjny
Gdy oba moduły są skonfigurowane, wgraj poniższe kody do płytek Arduino podłączonych do Twoich modułów. Włącz moduły, aby wejść w tryb komunikacji. Moduł master powinien połączyć się z modułem slave, a dioda LED powinna migać co sekundę.
Używamy tej samej biblioteki SoftwareSerial.h co dla modułu HC-06:
- SoftwareSerial hc05(Rx,Tx) do zdefiniowania pinów portu szeregowego
- hc05.begin() do zdefiniowania prędkości transmisji (wartość powinna być taka sama jak w Twoim module)
- hc05.available() aby sprawdzić, czy dane są dostępne w buforze modułu
- hc05.read() aby odczytać dane po jednym bajcie
- hc05.print() aby wysłać ciąg znaków w postaci ASCII
- hc05.write() aby wysłać dane po jednym bajcie na raz
Kod master
#include <SoftwareSerial.h>SoftwareSerial ArduinoSlave(2,3);String answer;String msg;void setup(){Serial.begin(9600);Serial.println("ENTER Commands:");ArduinoSlave.begin(9600);}void loop(){//Read command from monitorreadSerialPort();//Read answer from slavewhile (ArduinoSlave.available()) {delay(10); if (ArduinoSlave.available() >0) {char c = ArduinoSlave.read(); //gets one byte from serial bufferanswer += c; //makes the string readString}}//Send data to slaveif(msg!=""){Serial.print("Master sent : ");Serial.println(msg);ArduinoSlave.print(msg);msg="";}//Send answer to monitorif(answer!=""){Serial.print("Slave recieved : ");Serial.println(answer);answer="";}}void readSerialPort(){while (Serial.available()) {delay(10); if (Serial.available() >0) {char c = Serial.read(); //gets one byte from serial buffermsg += c; //makes the string readString}}Serial.flush();}
Kod slave
#include <SoftwareSerial.h>SoftwareSerial ArduinoMaster(2,3);String msg;void setup(){Serial.begin(9600);ArduinoMaster.begin(9600); }void loop(){readSerialPort();// Send answer to masterif(msg!=""){Serial.print("Master sent : " );Serial.println(msg);ArduinoMaster.print(msg);msg=""; }}void readSerialPort(){while (ArduinoMaster.available()) {delay(10); if (ArduinoMaster.available() >0) {char c = ArduinoMaster.read(); //gets one byte from serial buffermsg += c; //makes the string readString}}ArduinoMaster.flush();}
Jeśli otworzysz oba monitory szeregowe i jeśli wpiszesz komendę w monitorze płyty głównej, powinieneś zobaczyć następujące wyniki. Płyta główna wysyła komendę, która jest odbierana i wysyłana z powrotem przez płytę podrzędną. Komunikacja działa poprawnie w obu kierunkach.
Jeśli masz problemy z konfiguracją lub parowaniem modułów Bluetooth, skontaktuj się z nami lub zostaw komentarz.
Aplikacja
- Prowadź zdalnie swojego robota za pomocą smartfona
- Wyślij pomiar temperatury do smartfona
.