Arduino kan kommunicera med andra enheter via Bluetooth med hjälp av modulen HC-05 (master/slave). Den gör det möjligt för Arduino att ansluta och utbyta data med andra enheter som smartphone, dator eller andra mikrokontroller.Bluetooth-kommunikation kan till exempel användas för att fjärrstyra en robot, visa och lagra data på din dator eller på din smartphone.
Förutsättningar: Arduino Seriell kommunikation
Material
- Dator
- Arduino UNO x2
- USB-kabel
- Bluetooth-modul HC-05 ZS-040 x2 (eller 1x HC-05 och 1x HC-06)
- Dupontkablar M/F
Översikt över modul HC-05
Bluetooth-modulen HC-05 har 6 stift, 2 för ström, 2 för att upprätta anslutning, 1 för att gå in i konfigurationsläget och den andra för att känna till anslutningsläget.
- VCC strömförsörjning. Typiskt ansluten till 5V-stiftet på Arduino.
- GND jord. Typiskt ansluten till GND-stiftet i Arduino
- RX mottagningsstift. Typiskt ansluten till sändningsstift (TX) på Arduino
- TX-sändningsstift. Typiskt ansluten till mottagningspinnen (RX) på Arduino
- Status är HÖG när modulen är ansluten
- Key ou EN måste sättas till HÖG (3,3V) för att gå in i konfigurationsläget och måste kopplas bort för att gå in i kommunikationsläget.
Den speciella egenskapen hos HC-05 är att den kan användas som en slavmodul (motsvarande HC-06) och som en mastermodul, vilket innebär att den kan koppla ihop sig med en annan enhet på egen hand.
Schema för konfiguration
VARNING :
- Vi använder stift 2 och 3 i Arduino Uno. Beroende på mikrokontrollern kan det hända att vissa stift inte stöder seriell kommunikation. Särskilt Arduino Mega, Micro och Leonardo. Kontrollera dokumentationen.
- Då Bluetooth-modulen använder 3,3V-logik rekommenderas att lägga till en spänningsdelare för att minska 5V-spänningen från Arduino. (motstånd 1k mellan pin3 och Rx; 2k Ohm mellan Rx och GND).
Konfigurering av modulen HC-05
Konfigurering av modulen HC-05 kan vara intressant för att verifiera att den fungerar, att den är kopplad på rätt sätt och för att ändra parametrarna, t.ex. namn (användbart när du använder flera moduler), PIN-kod och kommunikationshastighet (baudrate). Särskilt om du vill använda den som en mastermodul. För att möjliggöra konfigurationen bör modulen HC-05 vara strömförsörjd men inte kopplad och KEY/EN-stiftet bör sättas till HIGH innan modulen slås på. I konfigurationsläget kommer lysdioden att blinka två sekunder varannan sekund.
Öppna seriemonitorn och välj slutlinjealternativet ”New line” och en baudrate på 9600.
Bemärk att HC-05 går in i konfigurationsläget med en baudrate på 38400bps.
Konfigureringskod
Med hjälp av följande kod kan du ändra och kontrollera parametrarna med hjälp av seriemonitorn och AT-kommandon.
#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 } }}
AT-kommandon
Till skillnad från modulen HC-06 kan HC-05 användas som mastermodul och du kan också kontrollera de sparade parametrarna med hjälp av AT-kommandon.
I allmänhet kommer du att få fram den sparade parametern genom att skriva kommandot AT+<command>? (t.ex. AT+PSWD? kommer att visa modulens PIN-kod). Om du anger AT+<command>=<Param> kan du ställa in parametervärdet (t.ex. AT+PWSD=0000 för att ändra PIN-koden till 0000).
Här är några av AT-kommandona:
- För att testa kommunikationen anger du AT i den seriella monitorn i Arduino IDE. Om allt är korrekt inställt bör den visa OK.
- För att ändra modulens namn anger du AT+NAME=<Param>. Modulen bör svara OK (Defaut HC-05, Ex: För att ändra namnet till BTM1 ange AT+NAME=BTM1).
- För att ändra PIN-koden ange AT+PSWD=<Param> . Modulen bör svara OK (Standard 1234 Ex: För att ändra PIN-koden till 0000 ange AT+PSWD=0000).
- AT+ROLE=<Param> för att ändra modulens roll som slav eller huvudman (Standard 0, Ex: För att ändra rollen som huvudman ange AT+ROLE=1, som slav ange AT+ROLE=0).
- För att ändra baudrate, ange AT+UART=<Param1>,<Param2>,<Param3> med parametrarna Param1, 2 och 3 för seriell kommunikation: baudrate, stopbits respektive paritetsbits (som standard inställd på 9600,0,0. Exempel: Om du vill ändra baudrate till 115200 anger du AT+UART=115200,0,0).
Det finns andra AT-kommandon för Bluetooth-modulen HC-05 som du hittar på länken.
ÅTTIGHET: Det finns olika versioner av modulen HC-05 och konfigurationsförfarandet kan variera. Var noga med att kontrollera modulens etikett och version av den inbyggda programvaran före användning. För den här handledningen använde vi en modul HC-05 märkt ZS-040 och firmwareversion 2.0-20100601.
N.B.: Om modulen inte svarar kontrollerar du ledningar, kablars ledningsförmåga och baudrate.
Till tveka inte att lämna en kommentar eller att kontakta oss om du har problem med att konfigurera din HC-05-modul.
Slavkonfiguration
För att ställa in modulen som slav kan du ändra namnet som AT+NAME=HC05-Slave och välja de kommunikationsparametrar och den PIN-kod som du vill ha. Du måste se till att master och slave som samma kommunikationsparametrar.
- AT returnerar OK
- AT+NAME=HC05-Slave
- AT+UART=9600,0,0
- AT+ROLE=0
- Inför AT+ADDR för att erhålla modulens adress (ex: +ADDR:98d3:32:21450e)
För slavmodulen kan du också använda en HC-06-modul
Mästarkonfiguration
För att ställa in modulen som master måste du ändra rollen och ställa in samma kommunikationsparameter som slavmodulen.
- AT returnerar OK
- AT+NAME=HC05-Master
- AT+UART=9600,0,0
- AT+ROLE=1
- Slavmodulens adress måste anges i mastermodulen för att den ska kunna appair: AT+BIND=98d3,32,21450e (ersätt punkterna ”:” med koma ”,”)
Schematiska instruktioner för kommunikation
I kommunikationsläget är Key/EN-stiftet inte anslutet.
Kommunikationskod
När båda modulerna är konfigurerade laddar du upp följande koder till Arduino-korten som är anslutna till dina moduler. Slå på modulerna för att gå in i kommunikationsläget. Master-modulen ska ansluta till slavmodulen och lysdioden ska blinka varje sekund.
Vi använder samma bibliotek SoftwareSerial.h som för HC-06-modulen:
- SoftwareSerial hc05(Rx,Tx) för att definiera stift för den seriella porten
- hc05.begin() för att definiera baudrate (värdet ska vara detsamma som för din modul)
- hc05.available() för att testa om data finns tillgängliga i modulens buffert
- hc05.read() för att läsa data en byte i taget
- hc05.print() för att skicka en sträng i ASCII-form
- hc05.write() för att skicka data en byte i taget
Mästarkod
#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();}
Slavkod
#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();}
Om du öppnar båda seriella monitorer och om du skriver in ett kommando i monitorn för huvudkortet bör du se följande resultat. Masterkortet skickar ett kommando som tas emot och skickas tillbaka av slavkortet. Kommunikationen fungerar korrekt i båda riktningarna.
Om du har problem med att konfigurera eller para dina Bluetooth-moduler, tveka inte att kontakta oss eller lämna en kommentar.
Användning
- Driv din robot på distans med din smartphone
- Sänd temperaturmätning till din smartphone
.