Arduino - HC 05/06 蓝牙无线模块实例测试

优酷视频教学

蓝牙模块购买地址

蓝牙,顾名思义,蓝色的牙齿,并不能用来咬人,而是一种无线数据传输标准。 
HC-05和HC-06是现在使用较多的两种蓝牙模块。两者之间的区别是HC-05是主从一体机,既能向自己的’主子’打小报告,也可以接收下达的命令;而HC-06只能工作在从机模式下,那就只能乖乖接收上级的命令啦。 
在很多情况下,我们都想当“霸道总裁”,让下级乖乖听话就OK了,不需要他多废话。那就用HC-06就够了。 
 

进入AT模式 (文章:参考Arduino+HC-05蓝牙模块AT模式设置):
在HC-05蓝牙模块的正面会有一个圆形按键,摁住的过程中给蓝牙模块上电,蓝牙模块的指示灯慢闪(1秒亮一次),即说明已经进入AT模式。

蓝牙模块基本配置 :
模块默认波特率为9600、默认配对密码为1234、默认名称为HC-05, AT模式波特率固定38400,8位数据位、1位停止位、无奇偶校验的通信格式。

AT+NAME=”XXX” //修改蓝牙模块名称为XXX
AT+ROLE=0 //蓝牙模式为从模式
AT+CMODE=1 //蓝牙连接模式为任意地址连接模式,也就是说该模块可以被任意蓝牙设备连接
AT+PSWD=1234 //蓝牙配对密码为1234
AT+UART=9600,0,0 //蓝牙通信串口波特率为9600,停止位1位,无校验位
(更多配置请参考HC-05AT命令文档。)

我这里是这个(模块网址:HC-06)

设置AT模式代码如下:

void setup() {
  // put your setup code here, to run once:
  Serial.begin(38400);

}

void sendcmd()
{
    Serial.println("AT");
  while(Serial.available())
  {
    char ch;
    ch = Serial.read();
    Serial.print(ch);
  } // Get response: OK
  delay(1000); // wait for printing 


  Serial.println("AT+NAME=14jxcheng");
  while(Serial.available())
  {
    char ch;
    ch = Serial.read();
    Serial.print(ch);
  }
  delay(1000);

  Serial.println("AT+ADDR?");
  while(Serial.available())
  {
    char ch;
    ch = Serial.read();
    Serial.print(ch);
  }
  delay(1000);

  Serial.println("AT+PSWD=1125");
  while(Serial.available())
  {
    char ch;
    ch = Serial.read();
    Serial.print(ch);
  }
  delay(1000);

}


void loop() {
    sendcmd();
}
 

线路连接图:

VCC:接Arduino的5V或者3.3V
GND:接Arduino的GND
TXD:发送端,接Arduino的RX
RXD:接收端,接Arduino的TX

Arduino - HC 05/06 蓝牙无线模块实例测试_第1张图片

注意:上传代码的时候要注意拔掉arduino开发板上面的TX、RX,否则上传代码会报错。

 

代码:

void setup() {
Serial.begin(9600);
 pinMode(8, OUTPUT); // put your setup code here, to run once:
 }

void loop() {
  // put your main code here, to run repeatedly:
 if(Serial.available()>0)
   {     
      char data= Serial.read(); // reading the data received from the bluetooth module
      switch(data)
      {
        case 'a': digitalWrite(8, HIGH);break; // when a is pressed on the app on your smart phone
        case 'd': digitalWrite(8, LOW);break; // when d is pressed on the app on your smart phone
        default : break;
      }
      Serial.println(data);
   }
   delay(50);
}

 

 

Android APP地址:(安卓蓝牙调试app网上太多了)

iOS APP:

(注意:安卓手机与苹果手机,苹果手机老是检测不到蓝牙的问题)

 

 

 

更 新:

HC-06(参考文章:[Arduino]HC-06蓝牙模块使用小结)

/*
arduino数字口引脚与蓝牙引脚连接:

RX(接收)---------------9(发送)

TX(发送)---------------- 8(接收)
*/

#include 
//使用软件串口,能讲数字口模拟成串口
SoftwareSerial BT(8, 9);  //新建对象,接收脚为8,发送脚为9
char val;  //存储接收的变量

void setup() {
  Serial.begin(9600);   //与电脑的串口连接
  Serial.println("BT is ready!");
  BT.begin(9600);  //设置波特率
}

void loop() {
  //如果串口接收到数据,就输出到蓝牙串口
  if (Serial.available()) {
    val = Serial.read();
    BT.print(val);
  }

  //如果接收到蓝牙模块的数据,输出到屏幕
  if (BT.available()) {
    val = BT.read();
    Serial.print(val);
  }
}

通过串口对蓝牙AT的设置:

Arduino - HC 05/06 蓝牙无线模块实例测试_第2张图片

Arduino - HC 05/06 蓝牙无线模块实例测试_第3张图片

 

实例代码:

Arduino之间通过蓝牙进行连接

Arduino之间通过蓝牙进行通信

修改(20190304):

蓝牙之间的通信

-主模块有 传感器、主模式蓝牙 单片机nano等;

-从模块蓝牙有 从模式蓝牙 单片机 LED等显示。

功能描述:当主模块通过传感器采集数据 然后由主模块蓝牙传输给从模块的蓝牙接收打开/关闭LED照明设备。

/*  

-------------从模块-----------

arduino数字口引脚与蓝牙引脚连接:
RX(接收)---------------9(发送)
TX(发送)---------------- 8(接收)
*/
 
#include 
//使用软件串口,能讲数字口模拟成串口
SoftwareSerial BT(8, 9);  //新建对象,接收脚为8,发送脚为9
char val;  //存储接收的变量

int ledpin2 = 6;
int ledpin = 13;
 
void setup() {
  Serial.begin(9600);   //与电脑的串口连接
  Serial.println("BT is ready!");
  BT.begin(9600);  //设置波特率

  pinMode(ledpin,OUTPUT);
  pinMode(ledpin2,OUTPUT);
  digitalWrite(ledpin,HIGH);
  digitalWrite(ledpin2,HIGH); 
  
}
 
void loop() {

  //如果接收到蓝牙模块的数据,输出到屏幕
  if (BT.available()) {
    val = BT.read();
   if(val=='1')
   {
    digitalWrite(ledpin,LOW);
    digitalWrite(ledpin2,LOW);
   }
    if(val=='0')
    {
      digitalWrite(ledpin,HIGH);
      digitalWrite(ledpin2,HIGH);
      }
   }
    
    Serial.println(val);
    delay(1500);
  }
/*
-------------主模块-----------
arduino数字口引脚与蓝牙引脚连接:
RX(接收)---------------9(发送)
TX(发送)---------------- 8(接收)
*/
 
#include 
//使用软件串口,能讲数字口模拟成串口
SoftwareSerial BT(8, 9);  //新建对象,接收脚为8,发送脚为9
char val;  //存储接收的变量

int IRspin = 6;
int ledpin = 13;
int i=0;
 
void setup() {
  Serial.begin(9600);   //与电脑的串口连接
  Serial.println("BT is ready!");
  BT.begin(9600);  //设置波特率

  pinMode(IRspin,INPUT);
  pinMode(ledpin,OUTPUT);
  
}
 
void loop() {
   
  int val2 = digitalRead(IRspin);
  Serial.print(val2);

  //sleepping
  if(val2==1)
  {
     digitalWrite(ledpin,HIGH);
     i++;
     if(i>=3)
     {
       
       Serial.print("sleep i=");
       Serial.println(i);
       delay(5000);
       BT.print('1');
       
       i=0;
     }
     
    }
    //wake up!
  if(val2==0)
  {
    digitalWrite(ledpin,LOW);
    i++;
  if(i>=5)
  { 
    
    BT.print('0');
    Serial.print("wake i=");
    Serial.println(i);
    i=0;
  //delay(10000);
  }
 
 }
 delay(1500);


  }

修改(2019/04/27):

/*
arduino数字口引脚与蓝牙引脚连接:
RX(接收)---------------9(发送)
TX(发送)---------------- 8(接收)
作者:Naiva
日期:2019/04/27
*/
 
#include 
//使用软件串口,能讲数字口模拟成串口
SoftwareSerial BT(8, 9);  //新建对象,接收脚为8,发送脚为9
char val;  //存储接收的变量

int IRspin = 6;//红外线
int ledpin = 13;//13pin LED灯

int i = 0;//flag1旗标(睡眠)
int j = 0;//flag2旗标(清醒)
 
void setup() {
  Serial.begin(9600);   //与电脑的串口连接
  Serial.println("BT is ready!");
  BT.begin(9600);  //设置波特率

  pinMode(IRspin,INPUT);//读取
  pinMode(ledpin,OUTPUT);//输出
  
}
 
void loop() {
   
  int val2 = digitalRead(IRspin);
  Serial.print(val2);

  //判断是否进入睡眠
  if(val2 == 1)
  {
     digitalWrite(ledpin,HIGH);
     j = 0;
	 i++;
    else if(i >= 3)
     {
       
       Serial.print("sleep i=");
       Serial.println(i);
	   
       delay(3000);	   
       BT.print('1');
       
       i = 0;
     }
     delay(500);
    }
    //判断是否清醒
  if(val2 == 0)
  {
    digitalWrite(ledpin,LOW);
	i = 0;
    j++;
	
  else if(j >= 5)
  { 
    
    BT.print('0');
    Serial.print("wake i=");
    Serial.println(i);
	
    j = 0;
  }
	delay(500);
 }
 
 delay(200);

}

 

你可能感兴趣的:(Arduino)