700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > arduino 蓝牙示例_(转载)HC-05蓝牙模块使用教程[Arduino]

arduino 蓝牙示例_(转载)HC-05蓝牙模块使用教程[Arduino]

时间:2023-12-29 21:25:29

相关推荐

arduino 蓝牙示例_(转载)HC-05蓝牙模块使用教程[Arduino]

BlueTooth HC-05蓝牙模块使用教程

模块简介

嵌入式蓝牙串口通讯模块(简称蓝牙模块)具有两种工作模式:命令响应工作模式和自动连接工作模式。

命令响应模式(AT模式)

首先按住蓝牙模块上的复位键然后再上电,看见蓝牙模块上的LED灯以2s间隔闪烁,就表示进入了AT模式 记住串口助手的波特率设置为38400,停止位1位,数据为8位,奇偶校验无,另外一定要勾上“发送新行”!

当模块处于命令响应工作模式(或者AT模式)时能才能执行 AT 命令,用户可向模块发送各种 AT指令,为模块设定控制参数或发布控制命令。(AT指令就是我们PC与一些终端设备(例如蓝牙,WiFi模块)之间进行通信的,配置这些终端设备参数的一套指令。)

自动链接模式

我们发送AT+RESET之后,当模块LED以0.5s间隔闪烁时表示进入自动连接模式。 在自动连接工作模式下模块又可分为主(Master)、从(Slave)和回环(Loopback)三种工作角色。 当模块处于自动连接工作模式时,将自动根据事先设定的方式连接的数据传输。

主模式:该模块可以主动搜索并连接其它蓝牙模块并接收发送数据。

从模式:只能被搜索被其它蓝牙模块连接进行接收发送数据。

回环:蓝牙模块就是将接收的数据原样返回给远程的主设备。

连接串口通信模块

HC05的VCC连接+5V,GND连接GND,TXD连接Pin10,RXD连接Pin11。 HC-05模块是蓝牙SPP(串行端口协议)模块,这意味着它通过串行通信与Arduino通信。 我使用的这个模块可以在3.6到6V的电压下工作,因为它带有一个包含电压调节器的分线板。但是,数据引脚的逻辑电压电平为3.3V。 因此,Arduino的TX(具有5V输出的发送引脚)和蓝牙模块RX(仅支持3.3V的接收引脚)之间的线路需要通过分压器连接,以免烧毁模块。 另一方面,蓝牙模块TX引脚和Arduino RX引脚之间的线路可以直接连接,因为来自蓝牙模块的3.3V信号足以被Arduino开发板上的高逻辑识别。

常用 AT 命令如下

AT+ORGL # 恢复出厂模式

AT+NAME= # 设置蓝牙名称

AT+ROLE=0 # 设置蓝牙为从模式

AT+CMODE=1 # 设置蓝牙为任意设备连接模式

AT+PSWD= # 设置蓝牙匹配密码

## Other AT command

AT+VERSION? # 查看版本信息

AT+ADDR? # 查看蓝牙地址

AT+UART? # 查看串口参数

AT : Ceck the connection.

AT+ROLE: See role of bt module(1=master/0=slave)

AT+RESET : Reset and exit AT mode

正常情况下,命令发送后,会返回 OK ,如果没有返回任何信息,请检查接线是否正确, 蓝牙模块是否已经进入 AT 模式,如果上述两点都没有问题,可能是蓝牙模块的问题, 可以找蓝牙模块供应商咨询。设置完毕后,断开电源,再次通电, 这时,蓝牙模块指示灯会快速闪烁,这表明蓝牙已经进入正常工作模式。

从机设置的AT代码

AT returns OK

AT+NAME=HC05-Slave

AT+UART=9600,0,0

AT+ROLE=0

主机设置的AT代码

AT returns OK

AT+NAME=HC05-Master

AT+UART=9600,0,0

AT+ROLE=1

Arduino 通信示例代码

#include

// Pin10为RX,接HC05的TXD

// Pin11为TX,接HC05的RXD

SoftwareSerial BT(10, 11);

char val;

void setup() {

Serial.begin(38400);

Serial.println("BT is ready!");

// HC-05默认,38400

BT.begin(38400);

}

void loop() {

if (Serial.available()) {

val = Serial.read();

BT.print(val);

}

if (BT.available()) {

val = BT.read();

Serial.print(val);

}

}

示例二:效果一样

#include

#define rxPin 2

#define txPin 3

#define baudrate 38400

String 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

}

}

}

示例三:主从机通信

Arduino 连接蓝牙主机代码

#include

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 monitor

readSerialPort();

//Read answer from slave

while (ArduinoSlave.available()) {

delay(10);

if (ArduinoSlave.available() >0) {

char c = ArduinoSlave.read(); //gets one byte from serial buffer

answer += c; //makes the string readString

}

}

//Send data to slave

if(msg!=""){

Serial.print("Master sent : ");

Serial.println(msg);

ArduinoSlave.print(msg);

msg="";

}

//Send answer to monitor

if(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 buffer

msg += c; //makes the string readString

}

}

Serial.flush();

}

Arduino 连接蓝牙从机代码

#include

SoftwareSerial ArduinoMaster(2,3);

String msg;

void setup(){

Serial.begin(9600);

ArduinoMaster.begin(9600);

}

void loop(){

readSerialPort();

// Send answer to master

if(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 buffer

msg += c; //makes the string readString

}

}

ArduinoMaster.flush();

}

使用步骤

写入代码后,将 Arduino 断电,然后按着蓝牙模块上的黑色按钮,再让 Arduino 通电, 如果蓝牙模块指示灯按2秒的频率闪烁,表明蓝牙模块已经正确进入 AT 模式。 打开 Arduino IDE 的串口监视器,选择正确的端口,将输出格式设置为 Both: NL & CR , 波特率设置为 38400 ,可以看到串口监视器中显示 BT is ready! 的信息。 然后,输入 AT ,如果一切正常,串口显示器会显示 OK。接下来,我们即可对蓝牙模块进行设置。

示例:蓝牙控制小灯

#include

// Pin3为RX,接HC05的TXD

// Pin2为TX,接HC05的RXD

SoftwareSerial BT(3, 2);

char val;

int ledPin=5;

void setup() {

Serial.begin(38400);

Serial.println("BT is ready!");

// HC-05默认,38400

BT.begin(38400);

pinMode(ledPin, OUTPUT);

}

void loop() {

if (Serial.available()) {

val = Serial.read();

BT.print(val);

}

if (BT.available()) {

val = BT.read();

Serial.print(val);

if (val == '1')

{

// 返回到手机调试程序上

Serial.write("Serial--ledPin--high");

digitalWrite(ledPin, HIGH);

}

if (val == '2')

{

Serial.write("Serial--ledPin--low");

digitalWrite(ledPin, LOW);

}

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。