单片机蓝牙模块的使用,以及配置控制舵机的源码

原理(如下图)

​ 1、该模块与单片机采用串口通信,手机连接蓝牙模块,通过无线信号发送数据给蓝牙模块,蓝牙模块收到数据后会把数据通过**串口(USART)**发送给单片机,单片机收到数据(SUBF)以后,就可以对数据进行处理,解析,从而完成单片机对外设的控制。这里注意手机端发送的一般是16进制数据(HEX),或者也可以设置为发送ASCLL格式的数据。

​ 2、此实验需要把蓝牙模块配置为从机模式,若模块出厂默认就是从机模式,就不需要配置了,(如果不知道默认是什么模式,可以查芯片手册或询问客服),如果是主从一体的模块,可用AT指令配置成为从机模式就可以了。以HC-05主从一体机为例,在出厂设定的就是从机模式(主机发送数据,从机接受数据)

如何进入AT模式:

HC-05与HC-06不同,HC-06没有连接上时,就是AT模式,而HC-05需要有个开关,注意到模块上的小黑点没有,不按的时候是可配对状态,1秒闪2次。按它再上电就使HC-05进入AT模式了,严格的讲,它只是一个开的作用,无法退出AT模式。(退出的话可以在串口发送AT+RESET复位,或者重新上电)此时指示灯慢闪(2秒亮一次),模块进入AT状态。

线路连接图:

HC-05引脚说明

1. RXD: 接收端
2. TXD: 发送端
3. VCC: 模块供电正极(3.6V~6V)
4. GND: 模块供电负极
5. EN: 用于进入AT模式,高电平有效(默认悬空低电平)(模块上的小黑点就是配置这个引脚的)
6. STATE:配对状态输出:配对成功输出高电平,未配对输出低电平

LED与KEY与HC-05不一致。可以忽略,只看连线就行
请添加图片描述请添加图片描述

AT指令配置说明:

这这里以STC官方烧录器为例,也是有串口助手功能的。不必多余下载:

常用的AT指令:
AT				测试指令
AT+ADDR?             读取蓝牙模块的地址
AT+NAME="XXX"   修改蓝牙模块名称为XXX
AT+ROLE=0             蓝牙模式为从模式
AT+CMODE=1        蓝牙连接模式为任意地址连接模式,也就是说该模块可以被任意蓝牙设备连接
AT+PSWD=1234            蓝牙配对密码为1234
AT+UART=9600,0,0        蓝牙通信串口波特率为9600,停止位1位,无校验位
AT+UART?		   读取读取蓝牙模块的波特率
AT+RESET                    复位指令             //指令与大小写均无关

at数据的发送格式是需要在指令后接回车换行的,如果按下回车后发送指令无效,那么可以在指令后加上:\r\n ,例如:AT\r\n,再次发送。

只跟手机进行配对的话,这些指令就足够了。可以发现,同样的指令后接‘=’就是修改,后接‘?’就是读取。

串口助手的配置:

请添加图片描述

文本模式进行发送(如果记不起来,想想HEX是没有字母T的是吧,否则咋发送AT指令呢)
请添加图片描述

​ 还有一点需要注意的是,模块的波特率不一定是38400或者9600,部分可能存在问题的模块,需要我们自己去测,调试,有的模块甚至是115200都有。

AT+UART?  				
AT+UART=9600,0,0		//蓝牙通信串口波特率为9600,停止位1位,无校验位

​ 而且有的时候如果发送数据蓝牙没有应答,可以尝试清空接收区,发送区。关闭打开串口,或者将USB与电脑重新连接。我当时买的那个主从一体的HC-05模块就是的,感觉反应迟钝,发送了过一会才能返回。每发送一次就需要清空等等,还是得多调试几次,或者更换串口调试软件。如果实在不行,不排除模块有质量问题的可能。

​ 与此同时用电脑检测手机与模块之间的通讯情况时,一般从手机发过来的是HEX数据,然后将串口调至刚刚用AT指令 AT+UART? 查的波特率,如果波特率不调可能收不到数据,HEX模式不调可能出现的数据不是发送的数据,或者乱码。当然,手机发送的是字母类型的数据(手机上的蓝牙串口助手有一个选项的)电脑端依旧用文本模式进行收取。
请添加图片描述

总体架构图:

请添加图片描述

源码:

主函数

舵机的信号线接单片机P3^7。蓝牙与单片机的TX,RX交错连接

/*
			Ä£Äâ¶æ»ú¿ØÖÆÔ­Àí£º0~180¡ã
				0.5ms-----0¶È
				1.0ms-----45¶È
				1.5ms-----90¶È
				2.0ms-----135¶È
				2.5ms-----180¶È
*/
#include <REGX52.H>
#include "timer0.h"
#include "Uart.h"

sbit SG_PWM=P3^7;							//ÐźſØÖÆÒý½Å
unsigned char count=0;					     //¼Æ´Î  ¸³³õֵΪ0
unsigned char PWM_count=0;                  //0--0¶È£¬2--45¶È£¬4--90¶È£¬6--135¶È£¬8--180¶È

void main()
{
  Timer0_Init();
  Uart_Init();
  while(1)
  {
		
   }
}

void Timer0() interrupt 1      //Ìرð×¢Òâ´Ë´¦£¬0--ÍⲿÖжÏ0£¬1--¶¨Ê±Æ÷ÖжÏ0£¬2--ÍⲿÖжÏ1£¬3--¶¨Ê±Æ÷ÖжÏ1£¬4--´®ÐпÚÖжÏ1
{

  TL0 = 0x33;		
  TH0 = 0xFE;			 	//ÖØи³¼ÆÊý³õֵΪ0.5ms

  count++;					//¼Æ´Î£¬Ã¿500us  count+1
  count%=40;				//ÖÜÆÚΪ20ms
	
  if(count<PWM_count)
  {									
    SG_PWM=1;
  }
  else
  {
    SG_PWM=0;
  }
}


void UART_Routine()  interrupt 4	//´®¿ÚÖжϷþÎñº¯Êý
{	
	if(RI==1)						//Èç¹û½ÓÊÕÖжϱê־λΪ1
	{	
	   P1=SBUF;					   //·¢Ë͵ÄÊý¾ÝSBUF£¬¸³¸øP1
	 if(P1==0X01)				   //0x01Õâ¸öÖµ¿ÉÒÔͨ¹ýÀ¶ÑÀµ÷ÊÔÆ÷±à¼­Ä£Ê½ÉèÖÃ
	 {                             //ͬÑùµÄ£¬ÏÂÃæµÄ0X02,0X03,0X04,,,Ò²ÊÇ¿ÉÒÔͨ¹ýÀ¶ÑÀµ÷ÊÔÆ÷±à¼­Ä£Ê½ÉèÖÃ
	   PWM_count=1;
	 }
	 if(P1==0X02)				  
	 {
	   PWM_count=2;
	 }
	 if(P1==0X03)				 
	 {
	   PWM_count=3;
	 }
	 if(P1==0X04)				  
	 {
	   PWM_count=4;
	 }
	 if(P1==0X05)				  
	 {
	   PWM_count=5;
	 }
		RI=0;						//½ÓÊÕÖжϱê־λÈí¼þÇåÁã
  }
}

串口初始化:

#include <REGX52.H>
void Uart_Init()   //9600bps@11.0592MHz
{
	PCON |= 0x80;		//ʹÄܲ¨ÌØÂʼӱ¶	
	SCON = 0x50;		//½ÓÊÕ8λÊý¾Ý
	TMOD &= 0x0F;		//Çå³ý¶¨Ê±Æ÷1ģʽ
	TMOD |= 0x20;		//É趨¶¨Ê±Æ÷8Ϊ×Ô¶¯
	TL1 = 0xFA;			//É趨³õʼֵ
	TH1 = 0xFA;			//É趨³õʼֵ
	ET1 = 0;		
    TR1 = 1;
    EA = 1;
    ES =1 ; 	
}

定时器0初始化:

#include <REGX52.H>
void Timer0_Init()	
{
	TMOD &= 0xF0;		//ÉèÖö¨Ê±Æ÷ģʽ
	TMOD |= 0x01;		//ÉèÖö¨Ê±Æ÷ģʽ
	TL0 = 0x33;		    //ÉèÖö¨Ê±³õʼֵ
	TH0 = 0xFE;		    //ÉèÖö¨Ê±³õʼֵ
	ET0 = 1;            //´ò¿ª¶¨Ê±Æ÷0µÄÖжÏ
	TF0 = 0;			//Çå³ýÒç³öÖжϱê־λ
	TR0 = 1;			//¶¨Ê±Æ÷0¿ªÊ¼¼Æʱ
	EA = 1;      	    //¿ª×ÜÖжÏ
}

总结/大致步骤:

1,用上位机(USB->TTL)将蓝牙模块(预先调至AT指令模式)与电脑USB连接,打开电脑上的串口助手调节通讯波特率与发送方式,按照AT指令集修改蓝牙模块的配置参数

2,把单片机和蓝牙模块对应的引脚用导线连接好,下载好程序,给单片机上电(TX->RX,RX->TX)

3,在手机上搜到蓝牙模块的名称,输入自己设置好的密码,连接后发送指令。

4,在连接单片机之前,依旧可以先用上位机(USB->TTL)将蓝牙模块与电脑USB连接,但是此时蓝牙模块不必调至AT模式,手机连接上以后直接发送数据,在电脑的接受端口如果可以接受到,那么说明配置成功了,下一步连接到单片机上也不迟。

注:手机上一般下载一个蓝牙调试助手,可以向单片机发送数据就行。部分软件有编辑按钮的设置,就是可以自定义某一个按钮发送一个事先定义好的HEX/ASCLL数据

参考博文:https://blog.csdn.net/zx3517288/article/details/52291027

  • 15
    点赞
  • 141
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值