HC-05蓝牙模块是任何Arduino项目必不可少的蓝牙模块!在Arduino IDE中进行连接和编码很容易。在大多数项目中,我们通常将HC05连接到Arduino,并使用它与其他智能设备(如手机)进行无线通信。这非常简单,我们已经用它建立了许多有趣的项目,例如蓝牙控制机器人,蓝牙语音控制,蓝牙家庭自动化等。但是,您是否需要将两个HC-05连接在一起?将HC05连接至智能手机并非那么简单,还涉及一些其他步骤。本教程将指导您完成此过程。让我们跳进去吧!
所需材料
- 2x Arduino(任何模型都可以;我使用的是Arduino Uno R3和Arduino Nano)
- 2个HC05蓝牙模块
- 面包板
- 跳线
- 2个1kΩ电阻
- 2个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主蓝牙电路和Arduino从蓝牙 电路。
HC05模块的初始配置
这是将两个HC05模块连接在一起所需的附加步骤。我们需要更改HC05蓝牙模块内部的某些设置,为此,我们必须进入HC05模块的AT命令模式,并通过Arduino IDE的串行监视器向其发送命令。为此,我们需要编写一个Arduino代码,以通过串行监视器将命令发送到HC05。
该配置HC05模块代码可以在这个页面的底部找到,该代码的解释如下
将SoftwareSerial库添加到此代码。
#include < SoftwareSerial.h>
定义发送(Tx)和接收(Rx)引脚号。我正在将引脚2用于Tx,将引脚3用于Rx。
#define tx 2 #define rx 3
给蓝牙连接起一个名字(这里我使用configBt),然后告诉SoftwareSerial库哪个引脚是Tx,哪个引脚是Rx。语法为bluetoothName(Rx,Tx);
SoftwareSerial configBt(rx,tx); // RX,TX
为了配置蓝牙模块,Arduino需要以38400波特的波特率向其发送命令。同样,我们将蓝牙连接的波特率也设置为38400波特。将发送(Tx)设置为输出引脚,将接收(Rx)设置为输入引脚
void setup(){串行.begin(38400); configBt.begin(38400); pinMode(tx,输出); pinMode(rx,INPUT); }
在永远循环中,我们拥有代码的主要部分。这里的想法是通过Arduino的Tx引脚将串行监视器中文本框中键入的内容发送到HC05。然后在串行监视器中显示HC05的输出。
void loop(){if(configBt.available())//如果HC05正在发送内容……{ Serial.print(configBt.readString()); //在串行监视器中打印} if(Serial.available())//如果串行监视器正在输出某些内容…{configBt.write(Serial.read()); //写入Arduino的Tx引脚}}
首先将此代码上传到连接到主HC05模块的Arduino。上传代码后,拔出Arduino电源线。按住HC05上的按钮。现在,在仍然按住HC05上的按钮的同时,插入Arduino电源线。好了,现在您可以释放HC05上的按钮了。这就是您进入HC05的AT模式的方式。要检查您是否已正确完成此操作,请确保HC05上的红灯大约每秒闪烁一次(缓慢闪烁!)。通常,在将HC05连接到任何蓝牙设备之前,它的红灯会以非常高的频率闪烁(快速闪烁!)。
接下来,打开串行监视器(串行监视器按钮在Arduino IDE的右上方)。如果尚未在“串行监视器”窗口的右下角,请确保将行结束设置设置为“ NL和CL两者”,并将波特率设置为38400。现在,在串行监视器中键入AT,如果一切顺利,您将从串行监视器窗口中显示的HC05中获得“确定”。恭喜你!您已成功登录HC05模块的AT命令模式。
现在,在下表中输入以下命令以配置 主HC05模块:
COMMAND(在串行监视器中输入此内容,然后按Enter) |
响应(来自HC05的回复,显示在串行监视器中) |
功能(此命令的作用是什么?) |
在 |
好 |
测试 |
AT + CMODE? |
好 |
检查CMODE或连接模式 ----------------------------- CMODE:0是从站 1是大师 |
AT + CMODE = 1 |
好 |
在配置主HC05时,将CMODE设置为1 |
AT + ADDR? |
+地址:FCA8:9A:58D5 好 *这是我的主HC05的地址。您的地址会有所不同! |
返回HC05的地址,请记下此内容,因为稍后我们将需要它! |
接下来,将您的计算机连接到另一台HC05从站:
COMMAND(在串行监视器中输入此内容,然后按Enter) |
响应(来自HC05的回复,显示在串行监视器中) |
功能(此命令的作用是什么?) |
在 |
好 |
测试 |
AT + CMODE? |
好 |
检查CMODE或连接模式 ----------------------------- CMODE:0是从站 1是大师 |
AT + CMODE = 0 |
好 |
在配置从属HC05时,将CMODE设置为0 |
AT + BIND = FCA8,9A,58D5 *将HC05主地址中的“:”替换为“,” *这里我使用的是上表中记下的HC05主设备的地址。您应该使用主机HC05的地址! |
好 |
设置主HC05的地址,该从HC05将在启动时自动连接到该主HC05 |
AT + BIND? |
+绑定:FCA8:9A:58D5 好 *这是我的主HC05的地址。您的地址会有所不同! |
检查从站的绑定地址。如果它与您的主控HC05的地址相匹配,那就好了! |
Arduino至Arduino蓝牙通信测试
首先,为主HCHC模块和从属HC05模块供电。接通电源并经过几秒钟后,查看HC05模块上的红灯。
红灯闪烁速度 |
这是什么意思 |
以很高的频率闪烁(快速闪烁!) |
不好!这意味着您的HC05模块没有相互连接!是时候进行故障排除了! |
以低频率闪烁(缓慢闪烁!) |
真好!你完成了!但是我们仍然需要再做一次检查,以确保此设置有效!继续! |
一旦您的红灯以低频闪烁(慢速闪烁!),您就可以确定两个HC05都已相互连接,但是我们尚未测试是否可以在主机和从机之间来回发送数据。毕竟,这是这里的主要目的。
将以下代码上传到Arduino之一,这是测试发射器(Tx)的代码,有关发射器和接收器的完整代码也可以在此页面的底部找到。
按照前面的代码,我们将SoftwareSerial库添加到此代码中,并定义发送(Tx)和接收(Rx)引脚号。然后,我们命名蓝牙连接,并将Tx和Rx引脚号传递到库中。
#include < SoftwareSerial.h> #define tx 2 #define rx 3 SoftwareSerial bt(rx,tx); // RX,TX
在设置功能中,我们将再次设置Arduino串行监视器和蓝牙的波特率。与以前的代码相比,您在这里看到区别吗?我们使用的波特率为9600波特。与其他蓝牙设备通信时,这是HC05蓝牙模块的默认预设通信波特率。因此,请注意38400波特用于通过AT命令配置HC05,而9600波特是HC05模块的默认波特率。最后,就像之前我们将Tx引脚配置为输出并将Rx引脚配置为输入一样。
void setup(){串行.begin(9600); bt.begin(9600); pinMode(tx,输出); pinMode(rx,INPUT); }
在永久循环内部,我们要做的就是通过HC05传输一个随机值“ 123”。
void loop(){bt.write(123); }
将此代码上传到另一个Arduino,这是要测试接收(Rx)的代码:
与前面的代码完全相同,我们配置了SoftwareSerial库。
#include < SoftwareSerial.h> #define tx 2 #define rx 3 SoftwareSerial bt(rx,tx); // RX,TX
设置功能中的代码与测试发射(Tx)的代码完全相同。
void setup(){串行.begin(9600); bt.begin(9600); pinMode(tx,输出); pinMode(rx,INPUT); }
在永远的循环中,我们只需要接收从发送中的Arduino发送的内容即可。如果接收缓冲区已从HC05接收到某些数据,则显示串行监视器中接收到的内容。
void loop(){if(bt.available()> 0){串行.println(bt.read()); }}
将相应的代码上传到每个Arduino之后,将串行监视器打开到接收的Arduino。确保在串行监视器中将波特率选择为9600,将行结尾选择为换行。如果一切正常,您应该会看到123。
注意:如果已将发送和接收Arduinos都连接到同一台笔记本电脑,请确保在“工具”>“端口”下选择正确的COM端口。您应该连接到接收Arduino的COM端口。
如果一切顺利,请交换HC05模块,以确保双向通信可以完成,并且我们完成了!