0

我一直在尝试将两个 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 秒闪烁一次所示。但是,当我应该收到对我的命令的确认时,使用串行监视器向模块发送命令后,我没有收到任何响应。

有什么想法我哪里出错了吗?

4

1 回答 1

1

这是最终对我有用的解决方案:我将此电路与分压器一起使用:

  • VCC -----> 5V
  • 地线---->地线
  • D2 ------> 发送
  • D3 ------> 接收

我最终不得不购买一个 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 之间交替,直到找到可行的组合,并调整串行监视器中的速度以使其有意义。

然后我就可以正常使用命令模式了。

于 2020-03-30T17:25:45.360 回答