Go Down

Topic: Problema con el modulo HC-05 bluetooth (Read 46920 times) previous topic - next topic

Sholojov

Buenas , a mí me ocurría exactamente lo mismo, con el mismo módulo (el del botón).

La manera con la que se solucionó el problema fue realizar un divisor de tensión entre  TX de arduino y RX (HC-05):


                                           RX(HC-05)
                                             |
                                             |
TX(Arduino) ---1kΩ----  ---- 2kΩ ------GND

De esta manera el nivel lógico será de 3.3V

Saludos!

barkalez

Saludos,

Pues ayer por la tarde me llego mi HC-05 (uno de esos con botoncito, y de código GW-040), y estaba como vosotros con que no podía acceder al modo AT. Pero tras explorar por internet y hacer muchas pruebas, al final lo conseguí de forma muy rápida. Por si les ayuda, les dejo mis pasos con un Arduino Nano.

1) Conexiones:

HC-05       Arduino
STATE               (sin conectar)
RX            10
TX            11
GND          GND
VCC          5V
KEY           3V3 (No se si hace falta, pero yo lo puse)

2) Sketch
Usé el modo 3) de esta página:http://www.martyncurrey.com/arduino-with-hc-05-bluetooth-module-at-mode/
con una modificación de los pines software serial. El código me quedó así:

Code: [Select]
#include <SoftwareSerial.h>
SoftwareSerial BTserial(10,11); // RX | TX

char c = ' ';
 
void setup() {
    Serial.begin(9600);
    Serial.println("Arduino is ready");
    BTserial.begin(9600); 
    Serial.println("BTserial started at 9600");
}
 
void loop(){
    if (BTserial.available()){ 
        c = BTserial.read();
        Serial.write(c);
    }
    if (Serial.available()){
        c =  Serial.read();
        Serial.write(c);
        BTserial.write(c); 
    }
}


3) Ejecución
Subid el código y abrid el puerto serie con el Arduino IDE usando el puerto COM correspondiente a vuestra placa. Yo le puse en el modo "Ambos NL&CR" y 9600 Baudios.
El módulo HC-05 se enciende y parpadea rápidamente. Ahora dadle al botoncito (seguirá parpadeando igual, pero habrá entrado en modo comandos AT).
Escribid AT y dadle al intro... debería devolveros un OK.

Y ya está!, ya podeis aplicar cualquier cambio que queráis con comandos AT, por ejemplo, como los que proponen aquí: Ver paso 4. Podéis ponerlo en maestro/esclavo, cambiarle el nombre, etc, etc. Bueno, ya sabéis. Lo que yo hice fue asegurarme de que ahora en adelante el módulo si o si tiene velocidad 9600 baudios. Para eso usé el comando AT+UART=9600,1,0  Con eso ya no tengo problemas de si se comunica a 38400 baudios.

Una vez acabado de hacer cambios en el módulo, lo desconectáis y listo para trabajar!
Espero que os sirva. A mi me resolvió la vida (con el HC-05, quiero decir).

4) Extras
Y ya de paso, si queréis que se conecte automáticamente a otro dispositivo H-06 escalvo o un HC-05 en modo esclavo, no tenéis más que seguir estos pasos: Conexión de 2 dispositivos automáticamente

Espero que os haya sido de utilidad.
un saludo,
Para mí la clave ha sido poner el comando AT+UART=9600.1.0.0

Porque cuando hacía AT+UART?  me daba 9600.0.0 y se conoce que era necesario el 1 en el segundo parámetro.

Gracias a madepablo

SILVER_1217

en los ultimos dias adquiri un modulo hc05 y tuve problemas para ingresar al modo AT pero logre solucionarlo de la siguiente manera.

luego de presionar el boton que trae el modulo y verificar que parpadee de forma lenta lo siguiente que hay que hacer es quitar el cable que esta conecta al pin KEY y por ultimo al abrir el monitor serial colocar en 38400 y en AMbos NL&CR.

espero les sirva haciendolo de esta forma

MrJacky

#33
Jun 18, 2016, 03:47 pm Last Edit: Jun 18, 2016, 03:53 pm by MrJacky
Yo recientemente recibí un modulo de estos, para ser exactos el MC-05 ZS-040 y no se si funciona exactamente igual que los demás.

Hasta ahora no le he dado ningún uso ya que sigo investigando como funciona. Y por el momento, tras mucho buscar por san gugel, encontré un post que indica 4 formas de entrar en modo AT.
información extraída de este enlace: http://www.martyncurrey.com/arduino-with-hc-05-bluetooth-module-at-mode/

La forma mas simple de entrar en modo AT es mantener pulsado el botón del modulo antes de darle corriente, sin embargo, no vas a mantener pulsado siempre el botón, cierto? por lo que el modulo pasa a modo AT Mini.

Esta opción puede ser útil para configurar ciertos parámetros, pero es un modo muy limitado, por lo que decido seguir investigando.

Tras probar de darle 3.3v al pin KEY antes de suministrarle corriente al modulo, con intención de entrar de esta forma en modo AT, al final me vi forzado a soldar un cable a mi modulo MC-05 en su pin 34, tal y como se indica en la pagina de antes, para forzar de esta manera el modo AT.

De esta forma conseguí mi propósito de entrar en el modo AT Full sin necesidad de pulsar el botón del modulo.

el codigo seria el siguiente:
Code: [Select]

#include <SoftwareSerial.h>
#define BT_RT 10
#define BT_TX 11
#define BTVCC 12
#define BTKEY 13

SoftwareSerial Bluetooth(BT_TX, BT_RT); // RX, TX


void setup() {
  Serial.begin(9600);
  pinMode(BTVCC, OUTPUT);                         // Marca el PIN de alimentacion para el HC-05 como salida
  pinMode(BTKEY, OUTPUT);                          // Marca el PIN del modo AT para el HC-05 como salida
  digitalWrite(BTKEY, HIGH);                         // Activa el modo AT Full
  delay (500) ;                                           // Espera antes de encender el modulo
  Serial.println("Alimentando el modulo HC-05");
  digitalWrite (BTVCC, HIGH);                       // Enciende el modulo
  //delay(600); digitalWrite (BTKEY, LOW);      // Cambia al modo AT Mini
  Serial.println("Esperando comandos AT:");
  Bluetooth.begin(38400);
}

void loop(){
  if (Bluetooth.available()){ Serial.write(Bluetooth.read()); }
  if (Serial.available()){ Bluetooth.write(Serial.read()); }
}




Si os fijáis, he tenido que invertir RX por TX en la llamada Bluetooth()

Mi duda es, si yo puse un puente reductor de voltaje tal y como se muestra en guia, al invertir RX por TX, debería también corregir el puente corrector?

Supongo que si, pero no termino de comprender que mi modulo tenga pintados de forma invertida los puertos de entrada y salida

MrJacky

#34
Jun 18, 2016, 07:42 pm Last Edit: Jun 18, 2016, 07:48 pm by MrJacky
He estado modificando el código, de manera que pueda iniciar el bluetooth en 3 modos diferentes desde la consola serial.

Teniendo en cuenta que al enviar los comandos AT debemos enviar el NL y CR, el sketch reconoce los comando de la misma forma.

Los comandos admitidos son (en minusculas):

bt at: inicia el MC-05 en modo AT Mini
bt atf: inicia el MC-05 en modo AT Full
bt on: inicia el MC-05 en modo Normal
bt off: apaga el modulo MC-05

Ademas de estos comandos, he conseguido que al estar en modo AT, dispongamos de todos los comandos, dependiendo del modo estarán disponibles o no lo estarán.

por ejemplo, despues de activar el modo at full, puedo lanzar cualquier comando AT

at+name
at+pswd
etc etc

NOTA: Sin embargo, en modo at mini no devolverá el nombre al usar at+name

Code: [Select]

#include <SoftwareSerial.h>
#define BT_RT 10
#define BT_TX 11
#define BTVCC 12
#define BTKEY 13

SoftwareSerial Bluetooth(BT_TX, BT_RT); // RX, TX

//Declaracion de variables
char inChar;
String string="";
int modoAT=0;

void setup() {
  Serial.begin(9600);
}

void loop(){

  if (Serial.available()){
    inChar = Serial.read();
    if(inChar=='\n'){
      Serial.print("Comando recibido: "); Serial.println(string);   
      if(string=="bt at\r"){ Serial.println("Iniciando Bluetooth modo AT Mini"); modoBT(1); }       // Arranca el modulo MC-05 en modo AT Mini
      else if(string=="bt atf\r"){ Serial.println("Iniciando Bluetooth modo AT Full"); modoBT(2); } // Arranca el modulo MC-05 en modo AT Full
      else if(string=="bt on\r"){ Serial.println("Iniciando Bluetooth modo Normal"); modoBT(3); }   // Arranca el modulo MC-05 en modo Normal
      else if(string=="bt off\r"){ Serial.println("Apagando Bluetooth"); modoBT(0); }               // Apaga el modulo MC-05 (modo off= consumo zero)
      else if(string.startsWith("at")){
        Bluetooth.write("AT");                                                                     // Inicia conversacion con bluetooth
        for(int x=2;x<string.length();x++){ Bluetooth.write(string.charAt(x)); }                    // Escribe caracteres del comando AT
        Bluetooth.write('\n');                                                                      // Finaliza conversacion con bluetooth
      }
      string="";                                                                                    // Resetea el string (inicia la espera de nuevos comandos)
    }
    else {string+=inChar;}
   
  }
  if(modoAT==1){
    if (Bluetooth.available()){ Serial.write(Bluetooth.read()); } // En modo AT envia de bluetooth a serial
  }
}
void modoBT(int x){
  modoAT=0; pinMode(BTVCC, LOW); pinMode(BTKEY, LOW);   // Apaga el modulo HC-05
  delay(500);
  pinMode(BTVCC, OUTPUT);                               // Marca el PIN de alimentacion para el HC-05 como salida
  if((x == 1)||(x == 2)){
    modoAT=1;
    pinMode(BTKEY, OUTPUT);                             // Marca el PIN del modo AT para el HC-05 como salida
    digitalWrite(BTKEY, HIGH);                          // Activa el modo AT Full
  }
  delay (500) ;                                         // Espera antes de encender el modulo
  if(x == 0){ return; }                                 // Mantiene apagado el modulo y vuelve al loop
  Serial.println("Alimentando el modulo HC-05");
  digitalWrite(BTVCC, HIGH);                           // Enciende el modulo
  if(x == 1) {
    delay(600); digitalWrite(BTKEY, LOW);              // Cambia al modo AT Mini
    Serial.println("Esperando comandos AT Mini:");
  }
  else if(x == 2){ Serial.println("Esperando comandos AT Full:"); }
  Bluetooth.begin(38400);
}


creo que el código puede ser interesante y que alguien le de utilidad

johenrod

He estado modificando el código, de manera que pueda iniciar el bluetooth en 3 modos diferentes desde la consola serial.

Teniendo en cuenta que al enviar los comandos AT debemos enviar el NL y CR, el sketch reconoce los comando de la misma forma.

Los comandos admitidos son (en minusculas):

bt at: inicia el MC-05 en modo AT Mini
bt atf: inicia el MC-05 en modo AT Full
bt on: inicia el MC-05 en modo Normal
bt off: apaga el modulo MC-05

Ademas de estos comandos, he conseguido que al estar en modo AT, dispongamos de todos los comandos, dependiendo del modo estarán disponibles o no lo estarán.

por ejemplo, despues de activar el modo at full, puedo lanzar cualquier comando AT

at+name
at+pswd
etc etc

NOTA: Sin embargo, en modo at mini no devolverá el nombre al usar at+name

Code: [Select]

#include <SoftwareSerial.h>
#define BT_RT 10
#define BT_TX 11
#define BTVCC 12
#define BTKEY 13

SoftwareSerial Bluetooth(BT_TX, BT_RT); // RX, TX

//Declaracion de variables
char inChar;
String string="";
int modoAT=0;

void setup() {
  Serial.begin(9600);
}

void loop(){

  if (Serial.available()){
    inChar = Serial.read();
    if(inChar=='\n'){
      Serial.print("Comando recibido: "); Serial.println(string);   
      if(string=="bt at\r"){ Serial.println("Iniciando Bluetooth modo AT Mini"); modoBT(1); }       // Arranca el modulo MC-05 en modo AT Mini
      else if(string=="bt atf\r"){ Serial.println("Iniciando Bluetooth modo AT Full"); modoBT(2); } // Arranca el modulo MC-05 en modo AT Full
      else if(string=="bt on\r"){ Serial.println("Iniciando Bluetooth modo Normal"); modoBT(3); }   // Arranca el modulo MC-05 en modo Normal
      else if(string=="bt off\r"){ Serial.println("Apagando Bluetooth"); modoBT(0); }               // Apaga el modulo MC-05 (modo off= consumo zero)
      else if(string.startsWith("at")){
        Bluetooth.write("AT");                                                                     // Inicia conversacion con bluetooth
        for(int x=2;x<string.length();x++){ Bluetooth.write(string.charAt(x)); }                    // Escribe caracteres del comando AT
        Bluetooth.write('\n');                                                                      // Finaliza conversacion con bluetooth
      }
      string="";                                                                                    // Resetea el string (inicia la espera de nuevos comandos)
    }
    else {string+=inChar;}
   
  }
  if(modoAT==1){
    if (Bluetooth.available()){ Serial.write(Bluetooth.read()); } // En modo AT envia de bluetooth a serial
  }
}
void modoBT(int x){
  modoAT=0; pinMode(BTVCC, LOW); pinMode(BTKEY, LOW);   // Apaga el modulo HC-05
  delay(500);
  pinMode(BTVCC, OUTPUT);                               // Marca el PIN de alimentacion para el HC-05 como salida
  if((x == 1)||(x == 2)){
    modoAT=1;
    pinMode(BTKEY, OUTPUT);                             // Marca el PIN del modo AT para el HC-05 como salida
    digitalWrite(BTKEY, HIGH);                          // Activa el modo AT Full
  }
  delay (500) ;                                         // Espera antes de encender el modulo
  if(x == 0){ return; }                                 // Mantiene apagado el modulo y vuelve al loop
  Serial.println("Alimentando el modulo HC-05");
  digitalWrite(BTVCC, HIGH);                           // Enciende el modulo
  if(x == 1) {
    delay(600); digitalWrite(BTKEY, LOW);              // Cambia al modo AT Mini
    Serial.println("Esperando comandos AT Mini:");
  }
  else if(x == 2){ Serial.println("Esperando comandos AT Full:"); }
  Bluetooth.begin(38400);
}


creo que el código puede ser interesante y que alguien le de utilidad
Cordial saludo, esto a veces es un chicharron,,en mi caso compre el hc 05 y tan pronto lo conectaba parpadeaba rápidamente pero me dejaba entrar a comandos AT (sin hundir el botón, ni conectar el pin 34) pero cuando pedia AT+NAME no salía nada también podía entrar presionando el botoncito, un día lo tome de nuevo y no me dejaba entrar  de ninguna manera y pensé que se había dañado el modulo aunque podía establecer una comunicación desde el celu con una apk., pero en el monitor serial no salía nada.
toda esta carreta, es porque deje presionado el botón por mas de 10 segundos y a partir de allí ya volvió a trabajar de nuevo con solo encenderlo y dejar presionado el botón  hasta que parpadea despacio, lo que no volvió a dejar hacer es que con solo encenderlo se podían ingresar comandos AT, en un apartado leí que estos módulos tienen modo AT1 y AT2 , supongo que los modos mini y full son para esto // pero el compañero lo hace desde el programa, como seria para hacerlos desde el monitor serial??

Hentor_Rivera

Hola, recientemente yo restaure mi modulo HC-05 y no entraba en modo AT y tampoco enviaba datos, buscando información encontré el siguiente método y me sirvio para recuperarlo, seguí el método 1 y me funciono, lo volví a configurar y a restaurar de fabrica (AT+ORGL) y de nuevo lo configure los BAUT a 9600 y el AT+CMODE

nativeforest

solucion : en el COM#( terminal arduino) debes poner la opcion;

autoscroll 
ambos NL & CR   
38400

saludos

surbyte

NO respondas hilos viejos y menos si tienen aÑos sin cambios.
Aun cuando los tienen mucha gente responde a hilos viejos y se van regenerando.
Si recibes un Warning prestale atención.
Si te interesa el tema lee las normas del foro y luego crea tu propio hilo y haz la aclaración para este o cualquier tema.


Go Up