HC-06

HC-06 蓝牙模块介绍

HC-06 蓝牙串口通信模块,是基于 Bluetooth Specification V2.0 带 EDR 蓝牙协议的数传模块。无线工作频段为 2.4GHz ISM,调制方式是 GFSK。模块最大发射功率为 4dBm,接收灵敏度-85dBm,板载 PCB 天线,可以实现 10 米 距离通信。

注意

模块的 电源为 3.3V,不能直接接 5V, 5V 的电源必须通过 LDO 降压到 3.3V 后再给模块供电。HC-06-USB 默认为主机HC-06 默认为从机;可以跟安卓手机连接,但是iPhone 搜索不到 HC-06 信号,我网上搜索过说不支持,所以就没搞;跟电脑连接需要 USB 转 TTL 模块 连接 HC-06模块再插入电脑!(切记 USB转TTL模块勿将 VCC与GND短接,不然可能会烧坏

步骤:

  • ① USB 转 TTL 接线然后插入电脑(注意别连错否则可能蓝牙模块报废)
HC06 串口线
STATE 不连
RXD TXD
TXD RXD
GND GND
VCC +5V
EN 不连

  • ② 打开串口调试助手 sscom

调好 ssom 的波特率(蓝牙模块一般默认 9600),测试通信:输入 " AT" 如果有回复 " `OK" 就行了

如果需要改蓝牙名字或者密码的也可以输入命令来修改:

修改蓝牙名字命令: AT+NAMExxx(xxx就是你需要改的名字)

修改蓝牙密码命令: AT+PINxxxx(密码默认1234,你可以修改成任意4位数密码)

具体命令可以去查看手册或者文档!

软件编程

手机下载 " SSP蓝牙串口" app用来连接蓝牙;蓝牙模块跟51单片机连接方式:

蓝牙模块 51开发板
VCC VCC
GND GND
TXD P30
RXD P31

main.c(蓝牙控制LED1亮灭例1)

# include <reg52.h>

  sbit P1_0 = P2^0; 
	bit  flag_REC=0; 
	bit  flag    =0;  
	

	unsigned char  i=0;
	unsigned char  dat=0;
  unsigned char  buff[5]=0; //接收缓冲字节


void BlueteethInit()
{
    SCON = 0x50;    
    TMOD = 0x20;    
    PCON = 0x00;    
    REN = 1;
    TH1 = 0xfd;    
    TL1 = 0xfd;
    RI = 0;
    EA = 1;
    ES = 1;
    TR1 = 1;
}
   


/************************************************************************/
void Serial() interrupt 4	  //中断接收3个字节
{ 
 
    if(RI)	                 //是否接收中断
    {
       RI=0;
       dat=SBUF;
       if(dat=='O'&&(i==0)) //接收数据第一帧
         {
            buff[i]=dat;
            flag=1;        //开始接收数据
         }
       else if(flag==1)
     {
      i++;
      buff[i]=dat;
      if(i>=2)
      {i=0;flag=0;flag_REC=1 ;}  // 停止接收
     }
	 }
}
/*********************************************************************/		 
/*--主函数--*/
	void main(void)
		{
		 BlueteethInit();
		 P1_0=1; //初始化P10口
		 TI = 0; 	
			while(1)							/*无限循环*/
			{ 
				if(flag_REC==1)				    //
				 {
				flag_REC=0;
				if(buff[0]=='O'&&buff[1]=='N')	//第一个字节为O,第二个字节为N,第三个字节为控制码
				{
						P1_0=0;
				}
				if(buff[0]=='O'&&buff[1]=='F'&&buff[2]=='F')	//第一个字节为O,第二个字节为N,第三个字节为控制码
				{
						P1_0=1;
				}
			 }
			}
		}	

main.c(蓝牙控制LED1亮灭例2)

/*-----------------------------------------------------------------------------
* 实 验 名		 : RS232串口试验
* 实验说明     : 单片机串口接收数据控制灯亮灭
* 连接方式     : 
* 注    意		 : 该试验使用的晶振是11.0592
*******************************************************************************/

# include<reg52.h>
# include<intrins.h>

# define uchar unsigned char
# define uint  unsigned int

uchar PuZh[36] = "广州汇承信息科技有限公司www.hc01.com";

//--定义使用的IO--//

sbit LED=P2^0;


//--声明全局函数--//   
void UsartConfiguration();
void Delay_1ms(uint i);


/********************************************************************
* 名称 : Com_Int()
* 功能 : 串口中断子函数
* 输入 : 无 * 输出 : 无
***********************************************************************/
void Com_Int(void) interrupt 4
{
	uchar i;
  uchar receive_data;
	
  EA = 0;
	
  if(RI == 1) //当硬件接收到一个数据时,RI会置位
	{ 		
		RI = 0;
		receive_data = SBUF;//接收到的数据
			
		if(receive_data == '1')	 
		{
				LED =0;//接收到1亮灯
		}
		else
		{
				LED =1; //其他情况灯灭
		}
		
	}
		
		for(i=0; i<36; i++)
		{
			SBUF = PuZh[i];   //将要发送的数据放入到发送寄存器
			while(!TI);		    //等待发送数据完成
			TI=0;			        //清除发送完成标志位
			Delay_1ms(1);
		}
		EA = 1;
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能		   : 主函数
* 输    入       : 无
* 输    出       : 无
*******************************************************************************/

void main()
{

	UsartConfiguration();//初始化串口
	
	while(1);	
}
	
/*******************************************************************************
* 函 数 名       : UsartConfiguration()
* 函数功能		   : 设置串口
* 输    入       : 无
* 输    出       : 无
*******************************************************************************/

void UsartConfiguration()
{	
	SCON=0X50;			//设置为工作方式1,8位数据,可变波特率
	TMOD=0X20;			//设置计数器工作方式2
	PCON=0X00;			//波特率不加倍
	TH1=0XFd;		    //计数器初始值设置,9600@11.0592MHz
	TL1=0XFd;
	TR1=1;					//打开计数器
	ES = 1;         //开串口中断
  EA = 1;         //开总中断
}


/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms
* x * 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)//1ms延时
{
  uchar x,j;
  
  for(j=0;j<i;j++)
    for(x=0;x<=148;x++);
}