Arduino kan kommunikere med andre enheder via Bluetooth ved hjælp af modulet HC-05 (master/slave). Det gør det muligt for Arduino at forbinde og udveksle data med andre enheder såsom smartphone, computer eller andre mikrocontrollere. Bluetooth-kommunikation kan f.eks. bruges til at fjernstyre en robot, vise og gemme data på din computer eller på din smartphone.
Forudsætning: Arduino Seriel kommunikation
Materiale
- Computer
- Arduino UNO x2
- USB-kabel
- Bluetooth-modul HC-05 ZS-040 x2 (eller 1x HC-05 og 1x HC-06)
- Dupontkabler M/F
Oversigt over modul HC-05
Bluetooth-modulet HC-05 har 6 stifter, 2 til strøm, 2 til at etablere forbindelse, 1 til at gå ind i konfigurationstilstand og den anden til at kende forbindelsestilstanden.
- VCC strømforsyning. Typisk tilsluttet 5V-stiften på Arduino’en.
- GND jord. Typisk tilsluttet til GND-stiften på Arduino
- RX-modtagningsstift. Typisk tilsluttet Arduino
- TX transmissionsstiften (TX) på Arduino
- TX transmissionsstiften. Typisk tilsluttet Arduino
- Stilling er HØJ, når modulet er tilsluttet
- Key ou EN skal være sat til HØJ (3,3 V) for at gå ind i konfigurationstilstand og skal være frakoblet for at gå ind i kommunikationstilstand.
Det særlige ved HC-05 er, at det kan bruges som slavemodul (svarende til HC-06) og som mastermodul, hvilket betyder, at det kan parre sig selv til en anden enhed på egen hånd.
Skemaer til konfiguration
VARNTIGHED :
- Vi bruger pin 2 og 3 på Arduino Uno. Afhængigt af mikrocontrolleren understøtter nogle stifter muligvis ikke seriel kommunikation. Især Arduino Mega, Micro og Leonardo. Tjek dokumentationen.
- Da Bluetooth-modulet bruger 3,3V-logik, anbefales det at tilføje en spændingsdeler for at reducere 5V-spændingen fra Arduino. (modstand 1k mellem pin3 og Rx; 2k Ohm mellem Rx og GND).
Konfiguration af modulet HC-05
Konfigurering af modulet HC-05 kan være interessant for at verificere, at det virker, er tilsluttet korrekt og for at ændre dets parametre såsom dets navn (nyttigt, når du bruger flere moduler), PIN-kode og kommunikationshastighed (baudrate). Især hvis du ønsker at bruge det som et mastermodul. For at muliggøre konfigurationen skal modulet HC-05 være forsynet med strøm, men ikke parret, og KEY/EN-pinden skal være sat til HIGH, før modulet tændes. Når modulet er i konfigurationstilstand, blinker LED’en to sekunder hvert andet sekund.
Åbn den serielle monitor og vælg endelinjeindstillingen “New line” og en baudrate på 9600.
Bemærk, at HC-05 går ind i konfigurationstilstand med en baudrate på 38400bps.
Konfigurationskode
Med følgende kode kan du ændre og kontrollere parametrene ved hjælp af den serielle monitor og AT-kommandoer.
#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-kommandoer
I forhold til modulet HC-06 kan HC-05 bruges som et mastermodul, og du kan også kontrollere de gemte parametre ved hjælp af AT-kommandoerne.
Generelt vil indtastning af kommandoen AT+<command>? bede om den gemte parameter (f.eks.: AT+PSWD? vil vise modulets PIN-kode). Hvis du indtaster AT+<kommando>=<Param>, kan du indstille parameterværdien (f.eks.: AT+PWSD=0000 for at ændre PIN-koden til 0000).
Her er nogle af AT-kommandoerne:
- For at teste kommunikationen skal du indtaste AT i den serielle skærm i Arduino IDE. Hvis alt er indstillet korrekt, skal den vise OK.
- For at ændre modulnavnet skal du indtaste AT+NAME=<Param>. Modulet bør svare OK (Defaut HC-05, Eksempel: For at ændre navnet til BTM1 indtastes AT+NAME=BTM1).
- For at ændre PIN-koden indtastes AT+PSWD=<Param> . Modulet skal svare OK (Standard 1234 Eksempel: For at ændre PIN-koden til 0000 skal du indtaste AT+PSWD=0000).
- AT+ROLE=<Param> for at ændre modulets rolle som slave eller master (Standard 0, Eksempel: For at ændre rollen som master skal du indtaste AT+ROLE=1, som slave skal du indtaste AT+ROLE=0).
- For at ændre baudrate skal du indtaste AT+UART=<Param1>,<Param2>,<Param3> med Param1, 2 og 3 serielle kommunikationsparametre: henholdsvis baudrate, stopbit og paritetsbit (Som standard indstillet til 9600,0,0. Eksempel: For at ændre baudrate til 115200 indtastes AT+UART=115200,0,0).
Der findes andre AT-kommandoer til Bluetooth-modulet HC-05, som du kan finde ved at følge linket.
FORSIGTIG: Der findes forskellige versioner af modulet HC-05, og konfigurationsproceduren kan variere. Sørg for at kontrollere modulets etiket og firmwareversion før brug. Til denne vejledning brugte vi et modul HC-05 mærket ZS-040 og firmwareversion 2.0-20100601.
N.B.: Hvis modulet ikke reagerer, skal du kontrollere ledninger, kablers ledningsevne og baudrate.
Tøv ikke med at efterlade en kommentar eller kontakte os, hvis du har problemer med at konfigurere dit HC-05-modul.
Slavekonfiguration
For at indstille modulet som slave kan du ændre navnet som AT+NAME=HC05-Slave og vælge de kommunikationsparametre og den PIN-kode, som du ønsker. Du skal sørge for, at master og slave som de samme kommunikationsparametre.
- AT returnerer OK
- AT+NAME=HC05-Slave
- AT+UART=9600,0,0
- AT+ROLE=0
- Indtast AT+ADDR for at få modulets adresse (f.eks.: +ADDR:98d3:32:21450e)
For slavemodulet kan du også bruge et HC-06-modul
Masterkonfiguration
For at indstille modulet som master skal du ændre rollen og indstille de samme kommunikationsparametre som slavemodulet.
- AT returnerer OK
- AT+NAME=HC05-Master
- AT+UART=9600,0,0
- AT+ROLE=1
- Slavemodulets adresse skal indtastes i mastermodulet for at gøre det muligt for det at appair: AT+BIND=98d3,32,21450e (erstat prikker “:” med kommaer “,”)
Skemaer for kommunikation
I kommunikationstilstand er Key/EN-stiften ikke tilsluttet.
Kommunikationskode
Når begge moduler er konfigureret, skal du uploade følgende koder til Arduino-kortene, der er tilsluttet dine moduler. Tænd modulerne for at gå i kommunikationstilstand. Master-modulet bør oprette forbindelse til slavemodulet, og LED’en bør blinke hvert sekund.
Vi bruger det samme bibliotek SoftwareSerial.h som til HC-06-modulet:
- SoftwareSerial hc05(Rx,Tx) for at definere stifterne i den serielle port
- hc05.begin() for at definere baudrate (værdien bør være den samme som for dit modul)
- hc05.available() for at teste, om der er data til rådighed i modulets buffer
- hc05.read() for at læse data en byte ad gangen
- hc05.print() for at sende en streng i ASCII-form
- hc05.write() for at sende data én byte ad gangen
Masterkode
#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();}
Slavekode
#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();}
Hvis du åbner begge serielle monitorer, og hvis du indtaster en kommando i masterkortets monitor, bør du se følgende resultater. Masterkortet sender en kommando, som modtages og sendes tilbage af slavekortet. Kommunikationen fungerer korrekt i begge retninger.
Hvis du har problemer med at konfigurere eller parre dine Bluetooth-moduler, så tøv ikke med at kontakte os eller efterlade en kommentar.
Anvendelse
- Kør din robot fjernstyret med din smartphone
- Send temperaturmåling til din smartphone