https://blog.csdn.net/JH39456194/article/details/94431610(电脑端)
环境:
1、任意单片机开发板即可(当时用的芯片STC90C516RD+),约定为下位机
2、无线蓝牙串口透传模块 HC-06从机
3、windows xp操作系统
4、Android智能手机(蓝牙串口通信助手软件),约定为上位机
原理图:
连接线:
51与HC-06蓝牙连线:
RXD (P3^0) ------ TXD
TXD(P3^1)------ RXD
上位机软件可以用蓝牙串口通信助手软件
程序:
#include <reg52.h>
#include <intrins.h>
unsigned char tmp;
unsigned int c=0;
sbit led1=P2^0; //指示灯0
sbit led2=P2^1; //指示灯1
sbit led3=P2^4; //指示灯3
void init(); //串口初始化
void send(unsigned char a); //单字节发送函数
void ctrl(); //接收处理函数
void main()
{
init();
while(1)
{
if(RI==1) //是否有数据到来
{
RI = 0;
tmp = SBUF; //暂存接收到的数据
ctrl();
}
}
}
void init() //串口初始化
{
ES=0; //关中断
SCON = 0x50; // REN=1允许串行接受状态,串口工作模式1,
//10位UART(1位起始位,8位数据位,1位停止位,无奇偶校验),波特率可变
TMOD = 0x20; //定时器1工作于方式2,8位自动重载模式,用于产生波特率
TH1=TL1=0xFD; //波特率9600 (本次测试采用晶振为11.0592)
PCON &= 0x7f; //波特率不倍增
TR1 = 1; //定时器1开始工作,产生波特率
TI=0; //接收标志位置0
RI=0;
//EA=0;
ES=1;
led1=0; //初始化设置3个指示灯全亮
led2=0;
led3=0;
}
void send(unsigned char a) //单字节数据发送
{ //注意:若单片机TXD(P3.1)无上拉能力,必须在P3.1端接上拉电阻1k。本次测试需要接上拉电阻
TI=0;
SBUF=a;
while(TI==0);
TI=0;
if(c%2) //发送指示灯标志,每接收一次,此灯亮灭交替
led3=1;
else
led3=0;
c++;
}
void ctrl() //接收处理函数 虽然定义 了三个灯,但本人挺懒,测试只用到了一个灯,不过你可以试试别的灯。
{
switch(tmp)
{
case '0':
led1=0; //收到字符1,指示灯0灭
send(tmp);
break;
case '1': //收到字符1,指示灯0亮
led1=1;
send(tmp);
break;
}
}
第二种方法:Arduino使用HC05蓝牙模块与手机连接
步骤:
- 进入 AT 模式进行蓝牙基本参数设置
- Arduino 蓝牙控制 LED 电路设计以及代码编写
- 利用 Andorid 蓝牙串口调试软件测试功能
进入 At 模式进行蓝牙基本参数设置
想要使用 Arduino 的蓝牙模块,首先要对蓝牙模块进行基本参数设置。基本参设置主要包含:蓝牙名称、模式以及匹配密码等。设置蓝牙模块可以使用 USB-TTL 连接电脑使用串口调试软件进入 AT 模式进行设置,也可以使用 Arduino 连接蓝牙模块进行设置,本文主要介绍后一种方法。
Arduino HC05 AT模式接线
进入 AT 模式设置蓝牙的接线如下:
Arduino 5V - VCC
Arduino GND - GND
Arduino Pin10 - TXD
Arduino Pin11 - RXD

Arduino 进入 AT 模式代码
使用 Arduino 设置蓝牙模块 AT 模式编写程序,我们可以通过 Arduino IDE 提供的串口监视器来设置蓝牙模块。详细的 Arduino 代码如下:
#include <SoftwareSerial.h>
// Pin10为RX,接HC05的TXD
// Pin11为TX,接HC05的RXD
SoftwareSerial BT(10, 11);
char val;
void setup() {
Serial.begin(9600);
Serial.println("BT is ready!");
// HC-05默认,960000
BT.begin(9600);
}
void loop() {
if (Serial.available()) {
val = Serial.read();
BT.print(val);
}
if (BT.available()) {
val = BT.read();
Serial.print(val);
}
}
用 Arduino IDE 串口监视器进行调试
首先,将 Arduino 断电,然后按着蓝牙模块上的黑色按钮,再让 Arduino 通电,如果蓝牙模块指示灯按2秒的频率闪烁,表明蓝牙模块已经正确进入 AT 模式。
打开 Arduino IDE 的串口监视器,选择正确的端口,将输出格式设置为 Both: NL & CR ,波特率设置为 9600 ,可以看到串口监视器中显示 BT is ready! 的信息。然后,输入 AT ,如果一切正常,串口显示器会显示 OK。
我们即可对蓝牙模块进行设置,常用 AT 命令如下:
AT+ORGL # 恢复出厂模式
AT+NAME=<Name> # 设置蓝牙名称
AT+ROLE=0# 设置蓝牙为从模式
AT+CMODE=1# 设置蓝牙为任意设备连接模式
AT+PSWD=<Pwd> # 设置蓝牙匹配密码
正常情况下,命令发送后,会返回 OK ,如果没有返回任何信息,请检查接线是否正确,蓝牙模块是否已经进入 AT 模式,如果上述两点都没有问题,可能是蓝牙模块的问题,可以找蓝牙模块供应商咨询。
设置完毕后,断开电源,再次通电,这是,蓝牙模块指示灯会快速闪烁,这表明蓝牙已经进入正常工作模式。
利用 Andorid 手机连接 Arduino 并控制 LED灯开关
我们完成了对蓝牙模块的设置后,我们将做一个可以通过手机蓝牙连接,控制 Arduino 开关 LED 灯的小实验。
Arduino 电路设计
这里的电路设计比较简单,主要是两部分:
- Arduino 与 HC05 模块连接
- Arduino 与 LED 连接
Arduino 上的 TXD 应与 HC05 模块上的 RXD 端连接,Arduino 上的 RXD 应与 HC05 模块上的 TXD 连接。LED 是直接连接在 Arduino Pin13。

程序:
void setup()
{
// 设置波特率为 9600
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop()
{
while(Serial.available())
{
char c=Serial.read();
if(c=='1')
{
Serial.println("BT is ready!");
// 返回到手机调试程序上
Serial.write("Serial--13--high");
digitalWrite(13, HIGH);
}
if(c=='2')
{
Serial.write("Serial--13--low");
digitalWrite(13, LOW);
}
}
}
Android 手机端调试
在 Android 端上进行调试,需要下载蓝牙串口 APP。下载安装完成 APP 后,我们先打开手机的蓝牙设置,搜索并匹配好我们的蓝牙模块。然后打开 蓝牙串口调试APP ,让 APP 连接上蓝牙模块,然后我们可以在 APP 中输入 1,接下来可以看到 LED 等亮了,并且能在 APP 中看到 Serial--13--high 的返回(有些 APP 返回值可能不是返回在同一行)。我们再在 APP 中输入 2,可以看到 LED 熄灭, APP 中返回 Serial--13--low。
685

被折叠的 条评论
为什么被折叠?



