Arduino---HC-05 蓝牙模块

摘要:
蓝牙基础知识回顾:(I)Arduino和HC-05连接注意:Arduino通过TX与HC-05通信,而Arduino的电压为5V,HC-05的允许电压为3.3V。无论何时需要发送AT数据,都需要重复上述操作(5)。其他方法也被用来解决这个问题。11.使用其他串行端口工具(未使用)。2.将AT指令#includeSoftware串行BT(8,9);Voidsetup(){//启用计算机通信串行端口。因为HC-05的波特率为38400,所以两者之间的通信是一致的。serial.begin;BT.begin;//告诉计算机serial.println(“BTisready!
蓝牙基础知识回顾:

(一)Arduino和HC-05连接

Arduino---HC-05 蓝牙模块第1张

注意:Arduino通过TX与HC-05进行通信,而Arduino的电压为5V,HC-05的允许电压为3.3V。短时间通信无妨(长时间可能烧毁HC-05)<接分压电路>

Arduino---HC-05 蓝牙模块第2张

U = 5*20/30 = 3.3V
I = 5V/(10K+20K) = 0.16mA

(二)Arduino和HC-05和手机通信

Arduino---HC-05 蓝牙模块第3张

1.手机发送信息给蓝牙
2.蓝牙将信息通过TX口发送给Arduino的串口缓冲区(Arduino可以接收)
3.Arduino只需要Serial.read()操作就可以取出蓝牙传过来的数据

缺点:使用Serial.read()读取数据,可能也会读取到电脑串口发送的数据(导致数据混乱)

所以推荐使用SoftwareSerial.h头文件进行蓝牙操作(操作方法下面有使用)--------软件串行接口

补充:串口透传---透明传输

蓝牙传输数据使用透明传输:在传输过程中数据不发生任何形式的变化,仿佛传输过程是透明的,数据原封不动的从发送方传输到接收端

补充:硬件串行接口和软件串行接口

Serial---硬件串行接口
SoftwareSerial---软件串行接口
一:问题

(一)出现在AT模式下只有第一个命令可以正确返回OK,其他返回ERROR(0)

(二)出现手机和蓝牙相连发送数据始终乱码,不正确问题

二:解决问题1:进入AT模式

(一)HC-05在AT模式下的频率必须是38400

(二)注意在命令结束后面都需要我们加上回车符

Arduino---HC-05 蓝牙模块第4张

(三)arduino下设置代码,进入AT模式

//HC-05进入设置AT模式
#include <SoftwareSerial.h>
SoftwareSerial BT(8,9);
voidsetup()
{
  //开启电脑通信串口,因为HC-05的波特率为38400,两者通信保持一致
  Serial.begin(38400);
//开启蓝牙,设置波特率38400,进入AT模式 BT.begin(
38400); //告诉电脑,蓝牙准备好了 Serial.println("BT is ready!"); } charAT_Cmd,AT_Rec; voidloop() { //若是电脑发送信息 if(Serial.available()>0) { //读取信息,并且将信息发送给蓝牙,进行AT设置 AT_Cmd = Serial.read(); BT.print(AT_Cmd); } //若是接收到蓝牙返回的信息:一般设置后返回OK if(BT.available()>0) { AT_Rec =BT.read(); Serial.print(AT_Rec); } }
疑惑:为什么在BT.available下,电脑依旧会一直显示蓝牙回收的信息(难道蓝牙在一直发送响应信息)?

(四)重点:解决问题一(除了第一个以外的其他命令返回error)

HC-05的EN脚先接3.3V,接着按着KEY键不放,然后给模块上电(供5V)后,这一瞬间模块进入了AT命令响应状态,
你才可以在串口调试助手里面输入一条AT命令;
如果想再输入一条AT命令,你必须重复刚才的过程(断电后再按KEY键再上电),
也就是说模块在进入了AT命令响应状态后只能响应一条AT命令(原因不明,不知道是不是只有我的这样)

Arduino---HC-05 蓝牙模块第5张

按住先断开HC-05的vcc接线(断电),然后一直按住Key,再接上vcc进行通电,通电后1s可以松开Key。
每当需要发送一条AT数据,都需要重复上面操作

(五)其他方法解决问题1

1.使用其他串口工具(未使用)

2.在调试代码中直接写入AT指令(测试可用)

#include <SoftwareSerial.h>
SoftwareSerial BT(8,9);
voidsetup()
{
  //开启电脑通信串口,因为HC-05的波特率为38400,两者通信保持一致
  Serial.begin(38400);
  BT.begin(38400);
  //告诉电脑,蓝牙准备好了
  Serial.println("BT is ready!");
  BT.println("AT");
  delay(100);
  BT.println("AT+NAME=HC-05");//命名模块名
  delay(100);
  BT.println("AT+ROLE=0");//设置主从模式:0从机,1主机
  delay(100);
  BT.println("AT+PSWD=1233");//设置配对密码,如1234
  delay(100);
  BT.println("AT+UART=9600,0,0");//设置波特率9600,停止位1,校验位无
  delay(100);
  BT.println("AT+RMAAD");//清空配对列表
}
只需要开始先断电一次,才可以进入AT模式,后面不需要断电操作

注意:只有当蓝牙模块没有和其他设备(除了开发板之外)连接AT指令才会执行给蓝牙模块本身,否则会被当成数据发送给其他设备

三:解决问题2:手机连接蓝牙后传输数据乱码

(一)原因:HC-05的默认频率可能是38400,而手机的频率为9600,两种的频率不同,数据传输出错

(二)解决方法:进入AT模式,设置频率为9600(如上面的设置)

BT.println("AT+UART=9600,0,0");//设置波特率9600,停止位1,校验位无

(三)补充部分AT指令(注意:不同模块AT指令不同05,06就有所差别)

AT+UART?查询波特率
AT+UART=参数1,参数2,参数3设置波特率,停止位,校验位
更多指令可查:https://wenku.baidu.com/view/a6ebe6b18e9951e79a892765.html
四:案例使用---蓝牙点亮小灯
voidsetup() {
  //put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(11,OUTPUT);
}
charch;
voidloop() {
  //put your main code here, to run repeatedly:
  if(Serial.available()>0)
  {
    ch =Serial.read();
    if(ch=='1')
        digitalWrite(11,HIGH);  //开启小灯
    else
        digitalWrite(11,LOW); //关闭小灯
Serial.print(ch);
  }
}
代码推荐使用SoftwareSerial实现
#include <SoftwareSerial.h>
SoftwareSerial BT(8,9);
charch;
voidsetup() {
  //put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(11,OUTPUT);
  BT.begin(9600);
}
voidloop() {
  //put your main code here, to run repeatedly:
  if(Serial.available()>0)
  {
    ch =Serial.read();
    BT.print(ch);
  }
  if(BT.available()>0)
  {
    ch =BT.read();
    Serial.print(ch);
    if(ch=='1')
    {
      digitalWrite(11,HIGH);
      BT.println("Command: LED ON");
      delay(5);
    }
    else
    {
      digitalWrite(11,LOW);
      BT.println("Command: LED OFF");
      delay(5);
    }
  }
}
五:Arduino无线蓝牙模块HC06安卓应用Arduino Bluetooth Controller下载(百度网盘)《或者手机应用下载蓝牙串口》

免责声明:文章转载自《Arduino---HC-05 蓝牙模块》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Abp的swagger UI 出现Failed to load API definition.教你一招:[转载]使用 Easy Sysprep v4 封装 Windows 7 精品下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

解决VMwareworkstation无法在windows上运行

步骤 1.在我的电脑上搜索控制面板   2.打开控制面板 3.点击程序 4.点程序和功能 5.点击已安装更新 6.找到最上面的一次微软更新,然后将最新的微软更新更新卸载。 7.重启后就能用了 说白了,就是最后一句话! 图示: 但是,这只能解决一时的问题,电脑终究要更新的,还有一种方法直接到官方下载新版本,里面的东西不会变的...

驱动开发之 用DeviceIoControl实现应用程序与驱动程序通信

Ring3测试程序:http://blog.csdn.net/zj510/article/details/8216321 1.readfile和writefile可以实现应用程序与驱动程序通信,另外一个Win32 API 是DeviceIoControl。 应用程序自定义一中IO控制码,然后调用DeviceIoControl函数,IO管理器会产生一个Maj...

基于802.11Fuzz技术的研究

转自安全客 关于无线的Fuzz最开始接触了解时,国内基本毛线都搜不到。经过几个月的资料搜集和学习,将大约全网的fuzz资料整理翻译分析并读懂写下,就为填补国内空白,也希望无线爱好者能多多交流。  在各个安全领域的漏洞挖掘方法中,Fuzz都挺流行的. Fuzz是一种黑盒软件测试技术,这基本上是使用畸形或半自动化的方式在一个畸形的数据注入发现执行错误,运用在协...

adb命令——简单常用命令介绍:将文件从手机上传输到电脑里:adb pull /sdcard/123.png c:usersdeldesktop

adb pull <手机路径>   <本机路径>  从手机中拉取信息到本地电脑上             示例:adb    pull      /sdcard/123.png       c:usersdeldesktop ------------------------------------------------------...

js获取键盘的keyCode-------Day42

济南今天是大雨倾盆啊,这闷热一扫而空,只是有些电闪雷鸣的,原想在公司里就完毕今天的博客记录的,只是不知道为什么怎么也登不上博客,预计是CSDN当时的server出问题了吧,好在到了晚上,这雷声小了也少了,才敢继续打开电脑,闲话不多说了,开搞。 非常多时候我认为自己是个奇怪的人,对待同一件事物假设感兴趣了,能够亢奋到不知疲惫,可假设不感兴趣了,每一刻都是煎...

联想笔记本如何安装固态硬盘-联想G50-80如何安装固态硬盘(全流程+装系统)(专用)

在现在,大家普遍想让自己的电脑运行的更流畅,于是装固态就成了一个不错的选择。下面以联想G50-80为例介绍如何加装内存条。 一、硬件准备 联想G50-80 东芝固态硬盘:TOSHIBA TR2000 480G(参考价格:379元人民币) 启动U盘(用于装系统,需要事先制作好) 二、详细步骤 1、断电、关机。拔掉电源插头,关机。一定确保电脑断电、关机,严...