1

我在这里问一个关于如何向BT Shield发送AT命令的问题。我已经用 iteadstudio 的指南尝试了所有这些方法......

硬件:Arduino UNO R3 BT Shield(主从)iteadstudio

程序: 编写代码:

#include <SoftwareSerial.h>   //Inlcui a biblioteca SoftwareSerial.h

#define RxD         6 //Define RxD como 6
#define TxD         7 //Define TxD como 7

#define LED_AMARELO    2 //LED_AMARELO_BLINK como 2
#define LED_VERMELHO    3 //LED_VERMELHO_FADE como 3
#define RELE_LAMPADA         4 //RELE_LAMPADA como 4

SoftwareSerial blueToothSerial(RxD,TxD); //Instância a biblioteca SoftwareSerial.h

void setup()
{

  pinMode(LED_AMARELO, OUTPUT); //Configura o pino 2 como saída
  pinMode(LED_VERMELHO, OUTPUT); //Configura o pino 3 como saída
  pinMode(RELE_LAMPADA, OUTPUT); //Configura o pino 4 como saída
parear_dispositivo(); //Executa a função para parear o dispositivo
}

void loop()
{
  char letra; //Variável char para armazenar o caractere recebido
if(blueToothSerial.available()) //Se algo for recebido pela serial do módulo bluetooth
    {
      letra = blueToothSerial.read(); //Armazena o caractere recebido na variável letra
if(letra == 'A') digitalWrite(LED_AMARELO, HIGH); //Se o caractere recebido for a letra A, liga o LED Amarelo
      else if(letra == 'a') digitalWrite(LED_AMARELO, LOW); //Senão se o caractere recebido for a letra a, desliga o LED Amarelo
      else if(letra == 'B') digitalWrite(LED_VERMELHO, HIGH); //Senão se o caractere recebido for a letra B, liga o LED Vermelho
      else if(letra == 'b') digitalWrite(LED_VERMELHO, LOW); //Senão se o caractere recebido for a letra b, delisga o LED Vermelho
      else if(letra == 'C') digitalWrite(RELE_LAMPADA, HIGH); //Senão se o caractere recebido for a letra C, liga a Lâmpada
      else if(letra == 'c') digitalWrite(RELE_LAMPADA, LOW); //Senão se o caractere recebido for a letra c, desliga a Lâmpada
      else if(letra == 'H') digitalWrite(9, LOW);
      else if(letra == 'h') digitalWrite(9, HIGH);
  }
}

void parear_dispositivo()
{
  blueToothSerial.begin(9600); // Configura o baud rate do bluetooth como 38400
  blueToothSerial.print("\r\n+STWMOD=0\r\n"); // Configura o módulo bluetooth para trabalhar como slave
  blueToothSerial.print("\r\n+STNA=SeedBTShield\r\n"); // Configura o nome do disopsitivo bluetooth
  blueToothSerial.print("\r\n+STOAUT=1\r\n"); // Permite que outros dispositivos encontrem o módulo bluetooth
  blueToothSerial.print("\r\n+STAUTO=0\r\n"); // Desabilita a auto conexão
  delay(2000); // Aguarda 2 segundos
  blueToothSerial.print("\r\n+INQ=1\r\n"); // Habilita modo de paridade
  delay(2000); // Aguarda 2 segundos
  blueToothSerial.flush(); // Dá um flush na serial do módulo bluetooth
}

模式设置开关:CMD

UART 多路复用器:D0 作为 RX,D1 作为 TX -> 手册上说:“使用图 4 的连接时,HC-05 与 FT232RL 芯片连接,FT232RL 通过 USB 连接到 PC。这个配置你可以使用PC 上的串行软件来控制或配置 HC-05 模块。”

PS.:我已经尝试过将 D0 作为 TX,将 D1 作为 RX。

程序:

-> 将模式设置开关设置为 CMD。

-> 在 Arduino 中插入 BT Shield

-> 在 PC 上连接 Arduino

-> 选择了正确的串口

-> 将程序刷新/上传到 Arduino UNO(根据代码)。(我还在 File->Examples->SoftwareSerial->SoftwareSerialExample 尝试了默认示例)。

-> 最后打开 Monitor Serial

发生什么了:

-> 当我打开监视器串行并发送命令为:AT\n\r 或只是 AT 没有任何反应...

-> 我征服的最大值是 SoftwareSerialExample.ino 代码......它出现“测试正常”(是的,我刚刚修改了字符串)。

-> 所以,我不能发送任何 AT 命令,因为它不起作用。

PS.:我只是想发送 AT,因为当我从我的应用程序发送命令为“A”或“b”时,BT 不工作,所以程序不能使用这个屏蔽(在你问我之前,是的,我已经用另一个arduino(也是UNO)和另一个盾牌)尝试过这段代码。我希望你能帮助我。

4

1 回答 1

2

我找到了一种方法来做我需要的事情。只要按照这个 seteps,你就可以做我想做的事情。XD。

第1步

从 arduino 断开屏蔽并上传默认的闪烁草图。验证草图是否正在运行。第2步

Image_PIN_MODE

在未连接的屏蔽上设置跳线,如图所示。将开关切换到 CMD

第 3 步

将屏蔽连接到 arduino 并将 arduino 连接到 PC。配置PC上的com口(使用windows下的设备管理器)使用

Baud    38400
data bits   8
stop bits   1
parity  none
flow control    none

并使用像 TeraTerm 这样的终端程序连接到屏蔽层。确保终端程序使用相同的端口设置。

在 TeraTerm 下,会出现一个空窗口,当我点击返回时,我得到 ERROR:(0)。不用担心,只需键入 AT 并返回,您应该会得到 OK 作为答案。您可能需要多次重新键入此命令。之后,可以发出任何记录在案的 AT 命令。我使用 AT+NAME=ArduinoBT 进行测试 请注意,UART 端口速度仅影响板与 arduino 通信的端口速度!使用 AT 命令设置的端口速度固定为 38400。

我在以下位置找到了这个示例:参考

于 2014-08-24T18:15:23.360 回答