一、项目概要
此项目实现蓝牙点对点通信,设置主从机,从机采集温湿度数据并发送给主机,主机接收数据并显示在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