Arduino může komunikovat s jinými zařízeními přes Bluetooth pomocí modulu HC-05 (master/slave). Umožňuje Arduinu připojit se a vyměňovat si data s dalšími zařízeními, jako je smartphone, počítač nebo jiné mikrokontroléry. komunikaci Bluetooth lze použít například k dálkovému ovládání robota, zobrazení a ukládání dat v počítači nebo smartphonu
Předpoklad: Arduino Sériová komunikace
Materiál
- Počítač
- Arduino UNO x2
- Kabel USB
- Modul Bluetooth HC-05 ZS-040 x2 (nebo 1x HC-.05 a 1x HC-06)
- Dupontní kabely M/F
Přehled modulu HC-05
Bluetooth modul HC-05 má 6 pinů, 2 pro napájení, 2 pro navázání spojení, 1 pro vstup do konfiguračního režimu a další pro zjištění stavu spojení.
- Napájení VCC. Obvykle se připojuje k 5V pinu Arduina.
- GND zem. Obvykle se připojuje k vývodu GND počítače Arduino
- Přijímací vývod RX. Obvykle připojen k vysílacímu kolíku (TX) Arduino
- TX vysílací kolík. Typicky připojen k přijímacímu pinu (RX) Arduina
- Stav je HIGH, když je modul připojen
- Key ou EN musí být nastaven na HIGH (3,3 V) pro vstup do konfiguračního režimu a musí být odpojen pro vstup do komunikačního režimu.
Zvláštností modulu HC-05 je, že jej lze použít jako podřízený modul (ekvivalent modulu HC-06) a jako hlavní modul, což znamená, že se může sám spárovat s jiným zařízením.
Schémata pro konfiguraci
Pozor :
- Používáme pin 2 a 3 Arduino Uno. V závislosti na mikrokontroléru nemusí některé piny podporovat sériovou komunikaci. Zejména se jedná o Arduino Mega, Micro a Leonardo. Podívejte se do dokumentace.
- Protože modul Bluetooth používá logiku 3,3 V, doporučujeme přidat dělič napětí, aby se snížilo napětí 5 V z Arduina. (rezistor 1k mezi pinem3 a Rx; 2k Ohm mezi Rx a GND).
Konfigurace modulu HC-05
Konfigurace modulu HC-05 může být zajímavá pro ověření, zda funguje, zda je správně zapojen, a pro úpravu jeho parametrů, jako je jeho název (užitečné, pokud používáte více modulů), PIN kód a rychlost komunikace (baudrate). Zejména pokud jej chcete používat jako nadřazený modul. Aby bylo možné modul HC-05 konfigurovat, měl by být napájen, ale ne spárován, a pin KEY/EN by měl být před zapnutím modulu nastaven na HIGH. V konfiguračním režimu bude LED blikat každé dvě sekundy.
Otevřete sériový monitor a zvolte možnost koncové linky „Nová linka“ a přenosovou rychlost 9600.
Všimněte si, že HC-05 vstoupí do konfiguračního režimu s přenosovou rychlostí 38400b/s.
Kód konfigurace
Následující kód umožňuje upravovat a kontrolovat parametry pomocí sériového monitoru a AT příkazů.
#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 } }}
Příkazy AT
V porovnání s modulem HC-06 lze modul HC-05 používat jako nadřazený modul a pomocí příkazů AT můžete také kontrolovat uložené parametry.
Všeobecně platí, že zadáním příkazu AT+<command>? se zobrazí dotaz na uložený parametr (například: AT+PSWD? zobrazí kód PIN modulu). Pokud zadáte AT+<command>=<Param>, můžete nastavit hodnotu parametru (např.: AT+PWSD=0000 upraví kód PIN na 0000).
Zde jsou uvedeny některé příkazy AT:
- Pro otestování komunikace zadejte AT do sériového monitoru Arduino IDE. Pokud je vše správně nastaveno, mělo by se zobrazit OK.
- Pro změnu názvu modulu zadejte AT+NAME=<Param>. Modul by měl odpovědět OK (Defaut HC-05, Například: Chcete-li změnit název na BTM1, zadejte AT+NAME=BTM1).
- Chcete-li změnit PIN kód, zadejte AT+PSWD=<Param> . Modul by měl odpovědět OK(Výchozí 1234, Příklad: Chcete-li změnit kód PIN na 0000, zadejte AT+PSWD=0000).
- AT+ROLE=<Param> pro midy roli modulu jako slave nebo master (Výchozí 0, Příklad: Chcete-li změnit roli jako master, zadejte AT+ROLE=1, jako slave zadejte AT+ROLE=0).
- Pro změnu přenosové rychlosti zadejte AT+UART=<Param1>,<Param2>,<Param3> s parametry sériové komunikace Param1, 2 a 3: přenosová rychlost, stop bit a paritní bit v tomto pořadí (Standardně,nastaveno na 9600,0,0. Příklad: pro změnu přenosové rychlosti na 115200 zadejte AT+UART=115200,0,0).
Pro modul Bluetooth HC-05 existují další příkazy AT, které najdete na následujícím odkazu.
UPOZORNĚNÍ: Existují různé verze modulu HC-05 a postup konfigurace se může lišit. Před použitím nezapomeňte zkontrolovat označení modulu a verzi firmwaru. Pro tento návod jsme použili modul HC-05 s označením ZS-040 a firmwarem verze 2.0-20100601.
N.B.: Pokud modul nereaguje, zkontrolujte zapojení, vodivost kabelů a přenosovou rychlost.
Pokud máte s konfigurací modulu HC-05 problémy, neváhejte nám zanechat komentář nebo nás kontaktovat.
Konfigurace slave
Pro nastavení modulu jako slave můžete změnit název jako AT+NAME=HC05-Slave a zvolit požadované komunikační parametry a kód PIN. Musíte se ujistit, že master a slave mají stejné komunikační parametry.
- AT vrátí OK
- AT+NAME=HC05-Slave
- AT+UART=9600,0,0
- AT+ROLE=0
- Zadáním AT+ADDR získáte adresu modulu (např: +ADDR:98d3:32:
Pro podřízený modul můžete také použít modul HC-06
Konfigurace master
Chcete-li nastavit modul jako master, musíte změnit roli a nastavit stejný komunikační parametr jako u podřízeného modulu.
- AT returns OK
- AT+NAME=HC05-Master
- AT+UART=9600,0,0
- AT+ROLE=1
- Adresa modulu slave musí být zadána v modulu master, aby se mohl připojit:
Schémata pro komunikaci
V komunikačním režimu není připojen pin Key/EN.
Komunikační kód
Když jsou oba moduly nakonfigurovány, nahrajte následující kódy do desek Arduino připojených k vašim modulům. Zapněte moduly, abyste vstoupili do komunikačního režimu. Master modul by se měl připojit k slave modulu a LED by měla blikat každou sekundu.
Použijeme stejnou knihovnu SoftwareSerial.h jako pro modul HC-06:
- SoftwareSerial hc05(Rx,Tx) pro definici pinů sériového portu
- hc05.begin() pro definici přenosové rychlosti (hodnota by měla být stejná jako u vašeho modulu)
- hc05.available() pro testování, zda jsou ve vyrovnávací paměti modulu dostupná data
- hc05.read() pro čtení dat po jednom bajtu
- hc05.print() pro odeslání řetězce ve tvaru ASCII
- hc05.write() pro odeslání dat po jednom bajtu
Kód 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();}
Kód 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();}
Pokud otevřete oba sériové monitory a pokud zadáte příkaz v monitoru desky Master, měli byste vidět následující výsledky. Deska master vyšle příkaz, který je přijat a odeslán zpět deskou slave. Komunikace funguje korektně v obou směrech.
Pokud máte problémy s konfigurací nebo párováním modulů Bluetooth, neváhejte nás kontaktovat nebo zanechat komentář.
Aplikace
- Řiďte robota na dálku pomocí smartphonu
- Odesílejte měření teploty do smartphonu
.