将HC05连接到Arduino的教程分享

通信网络

642人已加入

描述

  HC-05 蓝牙模块是任何Arduino 项目的首选蓝牙模块!在 Arduino IDE 中连接和编码很容易。在大多数项目中,我们通常将 HC05 连接到 Arduino,并使用它与其他智能设备(如手机)进行无线通信。

  您是否需要将两个 HC-05 连接在一起?将 HC05 连接到智能手机并不那么简单,还涉及一些额外的步骤。本教程将指导您完成此过程。让我们直接跳进去!

蓝牙通信

  所需材料

  2x Arduino(任何型号都可以;我使用的是 Arduino Uno R3 和 Arduino Nano)

  2x HC05 蓝牙模块

  面包板

  跳线

  2x 1kΩ 电阻

  2x 2.2kΩ 电阻

  电路原理图

  这是基本电路图。连接这些电路中的 2 个,一个用于主机,一个用于从机。对于连接,我们在这里所做的就是将 HC05 连接到 Arduino。HC05 的接收器 (Rx) 引脚在 0V 至 3.3V 范围内工作,而 Arduino 在 0V 至 5V 范围内工作。因此,我们将使用电阻器(R1 和 R2)创建一个分压器,将 Arduino 的 5V 输出降低到 3.3V,以免损坏 HC05 模块。

蓝牙通信

蓝牙通信

  我对 R1 使用 1kΩ,对 R2 使用 2.2KΩ,但您可以使用任何电阻值,只要 R2 大约是 R1 值的两倍(R2 ≈ 2R1)。同样,重复主从电路,Arduino Master蓝牙电路和Arduino Slave蓝牙 电路如下图所示。

蓝牙通信

蓝牙通信

  HC05 模块的初始配置

  这是将两个 HC05 模块连接在一起所需的额外步骤。我们需要更改 HC05 蓝牙模块内部的一些设置,为此,我们必须进入 HC05 模块的AT 命令模式并通过 Arduino IDE 的串行监视器向它发送命令。为此,我们需要编写一个 Arduino 代码,通过串行监视器向 HC05 发送命令。

  配置HC05模块的代码可以在本页底部找到,代码解释如下

  将 SoftwareSerial 库添加到此代码中。

  #include 《 SoftwareSerial .h》

  定义发送 (Tx) 和接收 (Rx) 引脚编号。我将引脚 2 用于 Tx,将引脚 3 用于 Rx。

  #定义发送 2

  #define rx 3

  为蓝牙连接命名(这里我使用的是 configBt),然后告诉 SoftwareSerial 库哪个引脚是 Tx,哪个引脚是 Rx。语法是bluetoothName(Rx, Tx);

  SoftwareSerial configBt(rx, tx); // 接收,发送

  为了配置蓝牙模块,Arduino 需要以 38400 波特的波特率向其发送命令。同样,我们将蓝牙连接的波特率也设置为 38400 波特。将发送 (Tx) 设置为输出引脚,将接收 (Rx) 设置为输入引脚

  无效设置()

  {

  序列号.begin(38400);

  configBt.开始(38400);

  pinMode(TX,输出);

  pinMode(rx,输入);

  }

  在永远循环中,我们有代码的主要部分。这里的想法是通过 Arduino 的 Tx 引脚将在串行监视器的文本框中键入的任何内容发送到 HC05。然后在串行监视器中显示 HC05 输出的任何内容。

  无效循环()

  {

  if(configBt.available()) // 如果 HC05 正在发送一些东西……

  {

  串行.print(configBt.readString()); // 在串行监视器中打印

  }

  if( Serial .available()) // 如果串行监视器正在输出一些东西……

  {

  configBt.write(串行.read());// 写入 Arduino 的 Tx 引脚

  }

  }

  首先将此代码上传到连接到主 HC05 模块的 Arduino 中。上传代码后,拔掉 Arduino 电源线。按住HC05 上的按钮。现在插入 Arduino 电源线,同时按住 HC05 上的按钮。好了,现在你可以松开HC05上的按钮了。这就是您进入 HC05 的 AT 模式的方式。要检查您是否正确执行此操作,请确保HC05 上的红灯大约每秒钟闪烁一次(缓慢闪烁!)。通常在HC05连接到任何蓝牙设备之前,它的红灯会以非常高的频率闪烁(快速闪烁!)。

  接下来,打开串口监视器(串口监视器按钮位于 Arduino IDE 的右上角)。在串行监视器窗口的右下角,如果您还没有这样做,请确保将行结束设置设置为“NL 和 CL”,波特率设置为38400。现在,在串口监视器中输入 AT,如果一切顺利,您将在串口监视器窗口中显示 HC05 的“OK”。恭喜!您已成功登录 HC05 模块的 AT 命令模式。

  现在,在下表中输入以下命令来配置 主 HC05 模块:

蓝牙通信

  接下来将您的计算机连接到您的另一个 HC05,从机:

蓝牙通信

  Arduino 到 Arduino 蓝牙通信测试

  首先,给主从HC05模块供电。通电几秒钟后,查看 HC05 模块上的红灯。

蓝牙通信

  一旦您的红灯以低频闪烁(慢闪!),您可以确定您的两个 HC05 已相互连接,但我们尚未测试是否可以在主从之间来回发送数据。毕竟,这是这里的主要目的。

  将以下代码上传到其中一个 Arduino,这是测试发射器 (Tx)的代码,发射器和接收器的完整代码可以在此页面底部找到。

  在前面的代码之后,我们将 SoftwareSerial 库添加到此代码中,并定义发送 (Tx) 和接收 (Rx) 引脚号。然后我们命名蓝牙连接并将 Tx 和 Rx 引脚号传递给库。

  #include 《 SoftwareSerial .h》

  #定义发送 2

  #define rx 3

  软件串行 bt(rx,tx); //接收,发送

  在设置功能中,我们再次设置 Arduino 串行监视器和蓝牙的波特率。与之前的代码相比,您看到这里的区别了吗?我们使用 9600 波特的波特率。这是HC05蓝牙模块与其他蓝牙设备通信时默认预设的通信波特率。因此,请注意 38400 波特用于使用 AT 命令配置HC05,而 9600 波特是 HC05 模块的默认波特率。最后,就像我们之前将 Tx 引脚配置为输出,将 Rx 引脚配置为输入一样。

  无效设置()

  {

  序列号.begin(9600);

  bt.开始(9600);

  pinMode(TX,输出);

  pinMode(rx,输入);

  }

  在永远循环中,我们所做的只是通过 HC05 传输一个随机值“123”。

  无效循环()

  {

  bt.write(123);

  }

  将此代码上传到另一个 Arduino,这是测试接收 (Rx) 的代码:

  和前面的代码一模一样,我们配置SoftwareSerial库。

  #include 《 SoftwareSerial .h》

  #定义发送 2

  #define rx 3

  SoftwareSerial bt(rx, tx); //接收,发送

  设置函数中的代码与测试传输 (Tx) 的代码完全相同。

  无效设置()

  {

  序列号.begin(9600);

  bt.开始(9600);

  pinMode(TX,输出);

  pinMode(rx,输入);

  }

  在永远循环中,我们只需要接收我们从发送 Arduino 发送的内容。如果接收缓冲区从 HC05 接收到一些数据,则在串行监视器中显示接收到的任何数据。

  无效循环()

  {

  如果(bt.available()》0)

  {

  串行.println(bt.read());

  }

  }

  将各自的代码上传到每个 Arduino 后,打开接收 Arduino 的串行监视器。确保在串行监视器中选择波特率为 9600 并以换行符结尾的行。如果一切正常,您应该会看到 123。

蓝牙通信

  注意:如果您已将发送和接收 Arduinos 连接到同一台笔记本电脑,请确保在 TOOLS 》 PORT 下选择正确的 COM 端口。您应该连接到接收 Arduino 的 COM 端口。

蓝牙通信

  如果一切顺利,更换 HC05 模块以确保可以双向通信,我们完成了!

HC05配置:

#include
#定义发送 2
#define rx 3
SoftwareSerial configBt(rx, tx); // 接收,发送
无效设置()
{
序列号.开始(38400);
configBt.开始(38400);
pinMode(TX,输出);
pinMode(rx,输入);
}
无效循环()
{
if(configBt.available()) //如果蓝牙模块正在发送一些东西...
{
Serial.print(configBt.readString()); //打印蓝牙模块发送的任何内容
}

if(Serial.available()) //如果我们在串行监视器输入文本框中输入了任何内容...
{
configBt.write(Serial.read()); //将我们在串口监视器输入文本框中输入的任何内容写入蓝牙模块
}
}


接收者:

#include
#定义发送 2
#define rx 3
SoftwareSerial bt(rx, tx); //接收,发送
无效设置()
{
序列号.开始(9600);
bt.开始(9600);
pinMode(TX,输出);
pinMode(rx,输入);
}
无效循环()
{
如果(bt.available()>0)
{
Serial.println(bt.read());
}
}


发件人:

#include
#定义发送 2
#define rx 3
软件串行 bt(rx,tx); //接收,发送
无效设置()
{
序列号.开始(9600);
bt.开始(9600);
pinMode(TX,输出);
pinMode(rx,输入);
}
无效循环()
{
bt.write(123);
}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分