我在这里问一个关于如何向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)和另一个盾牌)尝试过这段代码。我希望你能帮助我。