Problemas con HC-06

Buenas, he estado leyendo tutoriales por todos sitios hilos aqui en el foro, pero no consigo hacer funcionar un modulo HC-06,

con diferentes codigos e intentando enviar codigos AT.
Pero nada esta sordo. he probado tambien por PuttY pero nada.

a ver si me podeis exar una mano.

las conexiones son
3.3v
tx - rx
rx - tx
Gnd.

gracias

Hola,

Yo lo uso conectado a los 5v del arduino no a 3.3v

Otro error frecuente suele ser pretender usar el tx y rx de la placa al mismo tiempo que usamos el puerto usb.

Una vez que tienes estas dos cosas resueltas yo uso el siguiente codigo para configurarlo...

/*
 Incluimos las libreria SoftwareSerial.h para crear dos puertos virtuales que seran el 7 y 8
 creado el 19 de feb de 2014
 modificado el 09 de oct de 2015 by Cas6678
*/

#include <SoftwareSerial.h>
SoftwareSerial Serial3(7,8);        // Pin 7 y 8 para TX y RX

void setup()
{
Serial3.begin(9600);  // 
Serial.begin(9600);
Serial.println("Empieza delay");
delay(10000);
Serial.println("Termina delay");
Serial3.print("AT");
//Espera de 1 segundo seg√ļn datasheet entre envio de comandos AT
delay(1000);
//Cambio de nombre donde se envia AT+NAME y seguido el nombre que deseemos
Serial3.print("AT+NAMEMIBTHC06"); // para llamarlo MIBTHC06
//Espera de 1 segundo seg√ļn datasheet entre envio de comandos AT
delay(1000);
/*Cambio de la velocidad del modulo en baudios
Se envia AT+BAUD y seguido el numero correspondiente:

1 -- 1200 baudios
2 -- 2400 baudios
3 -- 4800 baudios
4 -- 9600 baudios (por defecto)
5 -- 19200 baudios
6 -- 38400 baudios
7 -- 57600 baudios
8 -- 115200 baudios

*/
Serial3.print("AT+BAUD6"); // para subirle la velocidad a 38400
//Espera de 1 segundo seg√ļn datasheet entre envio de comandos AT
delay(1000);
//Configuracion Password, se envia AT+PIN y seguido password que queremos
Serial3.print("AT+PIN1111"); // para ponerle el pin 1111
//Espera de 1 segundo seg√ļn datasheet entre envio de comandos AT
delay(1000);
//Mostramos tanto por puerto serial y por led la finalizacion de la
//configuracion AT del modulo bluetooth
Serial.println("TERMINADO");

}
void loop()
{ }

Los 10 segundos de delay es para que me de tiempo a cambiar el modulo. Yo hago lo siguiente. Cargo el codigo. Cuando me aparece en el monitor TERMINADO pongo el modulo y reseteo el arduino. Al aparecerme nuevamente TERMINADA ya lo tengo configurado.

Otro error suele ser cambiarle la velocidad, no acordarse o no saber si lo tomo o no y luego pretender conectar a la velocidad anterior.

Yo con los codigos que pemriten entrar los comados AT por el monitor siempre he tenido problemas y me he quedado con este que hace lo que quiero.

Espero te sirva.

Saludos.

1 Like

Hola, es mejor si tu pones una foto de este modulo porque existen muchos.

Después pienso que la tu conexión tiene un error, el arduino trabaja en un nivel lógico de 5V así tu puedes enviar datos da el bluetooth para arduino pero arduino no puede enviar datos, tienes que poner un voltage divider. Me parece que dos resistencia de 1k y 2k son perfectas. Dimé si así funciona

Pone también el código, si quieres te hago mirar uno que he hecho hace algunas semanas

gracias por la informacion, y por la ayuda, he puesto tu codigo y ahora aparece el nombre k tienes puesto en tu codigo.

gracias.

peor ahora estoy intentando cargar el mismo codigo pero con diferentes baudio y nombre y no me hace caso. me tiene negro.

aster94:
Hola, es mejor si tu pones una foto de este modulo porque existen muchos.

Después pienso que la tu conexión tiene un error, el arduino trabaja en un nivel lógico de 5V así tu puedes enviar datos da el bluetooth para arduino pero arduino no puede enviar datos, tienes que poner un voltage divider. Me parece que dos resistencia de 1k y 2k son perfectas. Dimé si así funciona

Pone también el código, si quieres te hago mirar uno que he hecho hace algunas semanas

no entiendo lo del divisor, se supone k el modulo trabaja a 5v, no entiendo el por k lo del divisor de de voltaje, a ver si me puedes ayudar con eso gracias

Por esto:
https://goo.gl/images/Djwdx1
Mira el nivel lógico es de 3.3 así tu lo vas a romper por esto te he preguntado una foto

podria ponerlo a 3.3v directamente no?

FOTO HC-06

El ESP8266 no funciona con los 3.3V del arduino, puede hacer una de muchas oportunidades y finalmente van a quemar los 3.3V que son generados por el FTDI y apenas puede entregar 60mA
Hay que usar una fuente de 3.3V o bien un regulador LDO AMS1170 o un step down a 3.3V. lo que fuere.
Luego sin SHIFT LEVELS no hay problema para el RX del arduino porque si reconoce los 3.3V del ESP pero no cuando el TX del arduino le envia al RX del ESP, hay o usas algo para reducir o vas a romper/destruir esa entrada del ESP.
O bien un divisor de tension o un zener de 3.3V o un LEVEL shifter como este


Topoalm parece que el tu modulo usa el 5v como nivel lógico (para estar seguro sería mejor usar un tester) vale
Ahora pienso que el problema es de código, puede ponerlo?

a ver a ver....

en que parte me perdi...?

El titulo no pone HC-06?

Justamente me anime a contestar porque es algo que he tenido que sufrir bastante y que a base de errores he conseguido dominar algo. Pero de repente empiezan a surguir respuestas tecnicas que no dudo que esten bien (personalmente no tengo la menor idea) pero creo que no tiene que ver con la pregunta.

Perdonar que no contestara. Trabajo con un camión y haggo esto cuando paro a dormir o a hacer pausas.

El día k me registren el camión me detienen x terrorista.

Os dejo el.código.
Surbyte luego subo una foto se un shify lrvel a ver si vale.

.   http://giltesa.com/?p=11738
	09/08/2012
	(CC) BY-NC-SA: giltesa.com
ConfigBluetooth HC-06 from Arduino.
Change name, password and baud using serial port, only configurate one time
After upload code you have 10 seconds to connect the module
BT ---- Arduino
TX ----> RX
RX <---- TX
Once the LED off configuration will start and at the end LED will blink
After this you can pair your module
*/
// Options:

	char ssid[10]		= "Zowi";	// Name for Bluetooth.
	char baudios		 = '5';		   // 1=>1200 baudios, 2=>2400, 3=>4800, 4=>9600 (default), 5=>19200, 6=>38400, 7=>57600, 8=>115200
	char password[10]	= "1234";		// Password for pairing

void setup()
{
	Serial.begin(19200);

	// Waiting time (10 seconds):
		pinMode(9,OUTPUT);
		digitalWrite(9,HIGH);
		delay(10000);
		digitalWrite(9,LOW);

Serial.print("AT"); delay(1000); // Now configuration start

Serial.print("AT+NAME"); Serial.print(ssid); delay(1000);   // Change Name of BT

Serial.print("AT+BAUD"); Serial.print(baudios); delay(1000);    // Change Baud

Serial.print("AT+PIN"); Serial.print(password); delay(1000);	    // Change Password
}

void loop()
{
	// After LED Blinking is finish.
	digitalWrite(9, !digitalRead(9));
	delay(500);
}
  1. Te hice un comentario que ni contestastes. Tienes conectado el modulo BT a tx y rx al mismo tiempo que subes por algun otro medio tu codigo a la placa? Si es asi, vas mal.

  2. Estas queriendo comunicarte con el modulo a 19200. Salvo que PREVIAMENTE el modulo estuviese puesto a esa velocidad no te servira. Yo empezaria por 9600 y NO CAMBIARIA la velocidad, (baud4) hasta este seguro que controlo el cambio de nombres y pin. Si ya tienes problemas con intentarlo imagina si ni siquiera sabes a que velocidad tienes que hacerlo por haberlo cambiado y no saber si ese cambio ha tenido o no efecto.

  3. Si miras el codigo que te puse la forma de ESCRIBIR es la misma. Tu pones...

Serial.print("AT+NAME"); Serial.print(ssid); delay(1000);   // Change Name of BT (donde ssid es el nombre) aunque no entiendo porque es un array [10]

Yo te he puesto:

Serial3.print("AT+NAMEMIBTHC06"); // para llamarlo MIBTHC06

es decir lo mismo.

El problema lo tienes en la forma de conectar los 4 pines del modulo con la placa.

Vamos a ver. Si no me di cuenta en ese comentario que pusiste. Te explico lo k acabó de hacer

Sin conectar el bt cargo el sketc el tuyo.
Cuando pone en el terminal TERMINADO conecto el bt
5v gnd pin7 tx pin8 rx.
Y después reinicio el Arduino.
Empieza delay
Termina delay
TERMINADO

Es lo que yo entiendo x tu explicación.
Pero sigue sin cambiar el.nombre ni nada

Se me ocurren dos cosas. Ahora mismo no estoy en casa asi que no recuerdo exactamente si tx, rx se refiere al modulo bt o a la placa, proba invertirlos.

Otra, una cosa que me dio muchos problemas es la velocidad. En mi codigo me conecto a 9600 porque suele ser la velocidad inicial con que vienen seteados pero luego se la subo a 38400, (en tu codigo a 19200), esto hace que posiblemente el modulo ya este trabajando a otra velocidad asi que al hacer....

Serial3.begin(9600);

...seria posible que no estuvieses inicializando a la velocidad que actualmente tenga el modulo. Si no estas seguro que esta de fabrica a 9600 proba a distintas velocidad a las que con los codigos de prueba lo pudieras haber cambiado accidentalmente.

Es decir, si como en tu ejemplo le queres cambiar la velocidad a 19200 en caso de hacerlo en forma exitosa la siguiente vez deberas inicializarlo a esa velocidad para realizar nuevos cambios. Por eso te sugeria que no cambiaras la velocidad hasta controlar que dominabas los cambios.

Otra cosa. Decis que no cambia el nombre. Como sabes, lo escuchas con un dispositivo, por ejemplo un telefono?

Te lo pregunto porque muchas veces pasa que si enlazamos con un bt al que despues le cambiamos el nombre puede suceder que hasta despues de la primera conexion el dispositivo que escucha lo siga llamando con su nombre anterior (aunque actualmente tenga otro) me ha pasado muchas veces.

Suerte