4.5
(2)

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

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.