Arduino---HC-05 蓝牙模块

蓝牙基础知识回顾:

(一)Arduino和HC-05连接

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

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

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

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

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

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

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

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

一:问题

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

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

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

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

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

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

//HC-05进入设置AT模式
#include <SoftwareSerial.h>

SoftwareSerial BT(8,9);

void setup()
{
  //开启电脑通信串口,因为HC-05的波特率为38400,两者通信保持一致
  Serial.begin(38400); //开启蓝牙,设置波特率38400,进入AT模式
  BT.begin(38400);

  //告诉电脑,蓝牙准备好了
  Serial.println("BT is ready!");
}

char AT_Cmd,AT_Rec;

void loop()
{
  //若是电脑发送信息
  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命令(原因不明,不知道是不是只有我的这样)

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

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

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

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

#include <SoftwareSerial.h>

SoftwareSerial BT(8,9);

void setup()
{
  //开启电脑通信串口,因为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模式,后面不需要断电操作

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

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

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

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

(三)补充部分AT指令

AT+UART?  查询波特率
AT+UART=参数1,参数2,参数3 设置波特率,停止位,校验位
更多指令可查:https://wenku.baidu.com/view/a6ebe6b18e9951e79a892765.html

四:案例使用---蓝牙点亮小灯

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(11,OUTPUT);
}

char ch;

void loop() {
  // 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实现

五:Arduino无线蓝牙模块HC06安卓应用Arduino Bluetooth Controller下载(百度网盘)《或者手机应用下载蓝牙串口》

原文地址:https://www.cnblogs.com/ssyfj/p/10843598.html

时间: 2024-10-10 17:38:13

Arduino---HC-05 蓝牙模块的相关文章

Arduino使用HC05蓝牙模块与手机连接

Arduino使用HC05蓝牙模块与手机连接 一切都是最好的选择 首先是线路连接,一定不要接错了 Arduino 代码 #include <SoftwareSerial.h> // Pin10为RX,接HC05的TXD // Pin11为TX,接HC05的RXD SoftwareSerial BT(10, 11); char val; void setup() { Serial.begin(38400); Serial.println("BT is ready!"); //

Arduino蓝牙模块实现通信

蓝牙参数特点 1.蓝牙核心模块使用HC-06从模块,引出接口包括VCC,GND,TXD,RXD,预留LED状态输出脚,单片机可通过该脚状态判断蓝牙是否已经连接 2.led指示蓝牙连接状态,闪烁表示没有蓝牙连接,常亮表示蓝牙已连接并打开了端口 3.输入电压3.6~6V,未配对时电流约30mA,配对后约10mA,输入电压禁止超过7V! 4.可以直接连接各种单片机(51,AVR,PIC,ARM,MSP430等),5V单片机也可直接连接 5.在未建立蓝牙连接时支持通过AT指令设置波特率.名称.配对密码,

基于hc-05蓝牙模块控制的步进电机指定旋转角度

一.蓝牙模块 蓝牙选用[HC-05主从机一体蓝牙模块 无线蓝牙串口透传 无线模块 电子模块],淘宝链接地址为:https://detail.tmall.com/item.htm?id=41281471872&spm=a1z09.2.0.0.u7iKss&_u=m10qactucc9f 二.手机端APP 手机端蓝牙串口调试助手,如图一所示: 图一 用手机数据线连接手机,下载上图所示[蓝牙串口调试助手].下载完毕后,打开手机APP,如图二所示: 图二                      

51单片机蓝牙模块

51单片机的蓝牙模块,是在蓝牙通讯的基础上,进行蓝牙51模块与外部蓝牙发射接收设备之间,相互收发数据.并且其引脚为VCC,GND,TXD,RXD,可以通过串口通信与外部上位机或单片机通信. 代码如下(注意蓝牙模块是5V供电) #include<reg52.h> void init();void delay(unsigned int ms); unsigned char input;void display(unsigned char num_decimal);unsigned char cod

android蓝牙模块

新建一个工程"blt". -----------------------MainActivity.java package com.example.blt; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Iterator

【Espruino】NO.13 蓝牙模块

http://blog.csdn.net/qwert1213131/article/details/31830809 本文属于个人理解,能力有限,纰漏在所难免,还望指正! [小鱼有点电] [Espruino中文社区] 这节主要是对蓝牙模块进行操作演示,开发板已经预留了市面上常见的蓝牙模块的位置,可以支持ble4.0和bt2.0的模块,HM-10.HC-05.HC-06等,本次使用的是FBT-06,主从一体,蓝牙协议栈为BT2.0,使用串口进行通讯.AT专用波特率为9600bps,开机PIO11为

Android4.42-Setting源码分析之蓝牙模块Bluetooth(下)

接着上一篇Android4.42-Settings源码分析之蓝牙模块Bluetooth(上) 继续蓝牙模块源码的研究 THREE,蓝牙模块功能实现 switch的分析以及本机蓝牙重命名和可见性的分析见上一篇,接下来进行第三章第三部分的介绍:关于蓝牙远程设备列表的加载.如果没有看过,建议看看上一篇关第一章蓝牙的布局,有助于理解 3>,设备列表的加载 因为这部分代码很多,所以在介绍时先说一下思路,程序首先通过底层的BluetoothAdapter的getBondedDevices()方法获取到已配对

HC-05 蓝牙模块的调试与使用

蓝牙模块BT-HC05模块是一款高性能的蓝牙串口模块. 1.可用于各种带蓝牙功能的电脑.蓝牙主机.手机.PDA.PSP等智能终端配对. 2.宽波特率范围4800~1382400,并且模块兼容单片机系统. 3.当主从模式两个蓝牙模块配对成功后,可以简单的,更改为无线的蓝牙,让您的设备或者产品更高级,更时尚. 4.您可以很容易的使用提供的蓝牙手机软件来等. HC-05 嵌入式蓝牙串口通讯模块(以下简称模块)具有两种工作模式:命令响应工作 模式和自动连接工作模式,在自动连接工作模式下模块又可分为主(M

Android 蓝牙模块

前天想找个蓝牙录音程序,发现居然没有!没办法,就自己动手DIY了.一些关键代码摘出来,希望对大家有用.    本代码基于android 2.2以上.IOS就不要问我了,不越狱的IOS设备,蓝牙除了用蓝牙耳机,再就是IOS设备之间联机游戏,不可理喻! 一.初始化添加权限:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android: