51单片机蓝牙点对点通信

一、项目概要

此项目实现蓝牙点对点通信,设置主从机,从机采集温湿度数据并发送给主机,主机接收数据并显示在OLED屏上。通过此项目理解蓝牙与蓝牙通信的原理,熟悉AT指令,熟悉51单片机串口通信原理与代码编写。

二、实现步骤

1、配置蓝牙主从机模式

(1) 配置从机(蓝牙B)

  • 打开串口助手,蓝牙模块与电脑连接并进入配置模式
  • 修改密码:修改蓝牙B的配对密码为1212(密码可自行设置,但主从机的密码必须保持一致)AT+PSWD=1212
  • 修改波特率:波特率改为9600;AT+UART=9600,1,0(主从机的波特率也必须保持一致)
  • 设置从机模式:AT+ROLE=0(0为从机模式,1为主机模式)
  • 查询蓝牙B的地址:AT+ADDR?【如2015:2:120758】(将地址记下来,后面主机绑定从机地址会用到)

(2)配置主机(蓝牙A)

  •  修改密码:密码与蓝牙A保持一致
  • 修改波特率:与蓝牙A保持一致
  • 设置主机模式:AT+ROLE=1(0为从机模式,1为主机模式)
  • 绑定蓝牙B地址:AT+BIND=2015,2,120758 【注意把地址的冒号换成逗号】(注意地址保持一致,否则不能配对)

2、 编写接收与发送函数代码

(1) 接收函数

接收函数代码功能在注释中有解释

unsigned int Receive(void)
{
	unsigned int dat;
	while(RI==0);   //只要接收中断标志位RI没有被置“1”,等待  直到接收到RI=1为止
	RI=0;           //为了下一次接收,需要手动清0
	dat=SBUF;       //SBUF接收缓冲器,将接收缓冲器中的数据存于dat中
	return dat;     //返回接收到的数据   
}

(2) 发送函数

发送函数代码功能在注释中有解释

void Send(unsigned char dat)
{
	SBUF=dat;  //将数据写入发送缓冲器
	while(TI==0)   //等待发送完成,发送完成后TI被置“1”
		;
	TI=0;  //发送完成需手动将TI清0
}

(3) 编写串口通信代码

注意PCON的值,波特率要与蓝牙的波特率保持一致

    TMOD=0x20;
	SCON=0x50;
	PCON=0x00;  //PCON=0000 0000B,设置波特率为9600b/s
	TH1=0xfd;
	TL1=0xfd;
	TR1=1;
	REN=1;

 3、接收数据与发送数据代码

(1) 接收数据代码

        Send(RH);
		delayms();
		delayms();
		Send(TH);

此处发送数据不需要进行ASCII码的转换,相当于单片机与单片机之间进行数据传输,所支持的数据格式相同。 

(2) 发送数据代码

	
		RH=Receive();
		delayms();
		delayms();
		TH=Receive();

 此处需保持延时时间和延时次数一致,不然接收到的数据可能会有偏差

4、编写DHT11采集数据代码与OLED显示代码

此文章主要讲蓝牙部分的代码,DHT11和OLED代码在后面完整项目代码中

三、注意事项

  • 蓝牙配置部分可以用串口助手直接配置,也可以将AT指令直接写在代码中
  • 蓝牙通信距离在10米左右,在通信时注意距离

四、完整项目代码

链接:https://pan.baidu.com/s/13D7-MxXzRL_M9rN10WJOOA 
提取码:0011

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值