我一直在尝试将两个 HC-05 蓝牙模块连接在一起作为主设备和从设备。我知道要做到这一点,我需要使用 AT 命令模式将一个设备建立为从设备,将一个设备建立为主设备。我将 arduino nano 与每个模块一起使用,并且显示了我使用的电路:
Vcc -----> 5V
GND ----> GND
Rx ------> Rx
Tx ------> Tx
我遵循了各种在线教程并使用了此代码:
include SoftwareSerial.h
SoftwareSerial BTSerial(0, 1); // RX | TX
void setup()
{
Serial.begin(9600);
BTSerial.begin(9600); // HC-05 default speed in AT command more
Serial.println("Enter AT commands:");
}
void loop()
{
// Keep reading from HC-05 and send to Arduino Serial Monitor
if (BTSerial.available()){
Serial.write(BTSerial.read());
}
// Keep reading from Arduino Serial Monitor and send to HC-05
if (Serial.available()){
BTSerial.write(Serial.read());
}
}
使用模块上的按钮或将 EN 引脚设置为高电平,我可以将模块置于 AT 模式,如 LED 每 2 秒闪烁一次所示。但是,在使用串行监视器向模块发送命令后,当我应该收到命令的确认时,我没有收到任何响应。
有什么想法我哪里出错了吗?
这是最终对我有用的解决方案:我使用带有分压器的电路:
我最终不得不购买一个 Uno 来让它工作,我假设我的 Nano 在某种程度上有问题。然后我使用了以下代码:
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(2, 3); // RX | TX
void setup()
{
Serial.begin(9600);
BTSerial.begin(38400); // HC-05 default speed in AT command more
Serial.println("Enter AT commands:");
}
void loop()
{
// Keep reading from HC-05 and send to Arduino Serial Monitor
if (BTSerial.available()){
Serial.write(BTSerial.read());
}
// Keep reading from Arduino Serial Monitor and send to HC-05
if (Serial.available()){
BTSerial.write(Serial.read());
}
}
这使我能够进入 AT 模式并接收响应。
问题之一是我使用的 Tx 和 Rx 引脚也用于与计算机通信,因此不能同时与 HC-05 一起使用。
另一个问题是波特率:每次通信时我在 9600 和 38400 之间交替,直到找到有效的组合,并调整 串行监视器 中的速度,使其有意义。
然后就可以正常使用命令模式了
对于定期沟通,应该是以下内容: Uno RX 应连接到 BT05 的 TX Uno TX 应该连接到 BT05 的 RT
原因 - 他们互相沟通。一个从 TX 发送信息,另一个应该通过 RX 接收信息,反之亦然。
但是,采用上述方法,您将需要创建虚拟第二个串行端口并编写简单的代码以使用 AT 命令正确设置 BT05。而且,当您想使用它时,无需更换电线。
要使用空白代码设置 BT05,您可以使用反之亦然的连接: Uno RX 应连接至 BT05 的 RT Uno TX 应该连接到 BT05 的 TX
反之亦然,该引脚的连接在一种情况下也是正确的,但仅适用于您想直接通过串行监视器使用空白代码进行设置的情况。但是,在这种情况下,您需要将它们交换回来。 此连接连接 MC 的主串行端口,用于与 PC 通信,还带有 BT05。所以要小心不要使用 print(),因为它会用 BT 中断。