4.5
(2)

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

.

Lämna ett svar

Din e-postadress kommer inte publiceras.