Puede comunicar con su Arduino a través de Bluetooth utilizando un módulo HC-06 (esclavo). Con este modulo puede conectar Arduino a otro sistema (teléfono inteligente, computadora o otros microcontroladores) para enviar y recibir datos. La comunicación Bluetooth le permite, por ejemplo, controlar su robot a través de una aplicación de smartphone o recuperar las valores de un sensor en su computadora.
Equipo
- Ordenador
- Arduino UNO
- Cable USB
- Módulo Bluetooth HC-06
- Cables Dupont M / F
Presentación del módulo HC-06.
El módulo Bluetooth HC-06 tiene 4 pins para establecer la conexión.
- Alimentación VCC pin. Normalmente conectado al pin 5V del Arduino.
- Masa GND. Normalmente conectado al pin GND del Arduino.
- Pin de recepción RX. Normalmente conectado al pin de transmisión Arduino (TX)
- Pin de transmisión TX. Normalmente conectado al pin de recepción Arduino (RX)
NB: El módulo HC-06 es un módulo esclavo. No puede conectarse a otros dispositivos por sí mismo. Para eso, necesitará un módulo maestro como el módulo Bluetooth HC-05 .
Diagrama de cableado
Algunos módulos HC-06 funcionan con 3V3 y no admiten el nivel de tensión de 5V en el pin Rx. En este caso, se necesita un puente divisor de tensión para convertir la señal lógica (resistencia de 1k entre pin3 y Rx, y 2k Ohm entre Rx y GND).
CUIDADO: usamos los pin 2 y 3 de Arduino Uno. Dependiendo del microcontrolador, algunos pines pueden no ser compatibles con la comunicación en SoftwareSerial. Especialmente, Arduino Mega, Micro y Leonardo. Consultar la documentacion.
Configuración del módulo HC-06
La configuración del módulo Bluetooth puede ser interesante para verificar el funcionamiento del módulo y para modificar sus parámetros, especialmente cuando se utilizan varios módulos. El módulo debe estar alimentado pero no sincronizado (el LED debe parpadear).
El siguiente código se usa para cambiar el nombre, el código PIN y la velocidad de comunicación (baudrate) del módulo HC-06
#include <SoftwareSerial.h> SoftwareSerial hc06(2,3); void setup(){ //Initialize Serial Monitor Serial.begin(9600); Serial.println("ENTER AT Commands:"); //Initialize Bluetooth Serial Port hc06.begin(9600); } void loop(){ //Write data from HC06 to Serial Monitor if (hc06.available()){ Serial.write(hc06.read()); } //Write from Serial Monitor to HC06 if (Serial.available()){ hc06.write(Serial.read()); } }
Para probar la comunicación, escriba AT en el monitor de serie del IDE de Arduino. Seleciona las optiones «No fin de linea» y baudrate 9600 por la comunicación. Si todo está bien, el módulo debe responder OK. Si no funciona, compruebe la conexión y la versión del módulo.
Para cambiar el nombre del módulo, escriba AT + NAMEmodulename. El módulo debe responder OK setname. (Por ejemplo: si desea cambiar el nombre del módulo a BTM1, escriba AT + NAMEBTM1)
Para cambiar el código PIN del módulo, escriba AT + PINxxxx. El módulo debe responder OKsetPIN. (Por ejemplo: si desea cambiar el PIN a 0000, escriba AT + PIN0000)
Para cambiar la velocidad de comunicación del módulo (solo si es necesario), escriba AT + BAUDx. Ej: si desea cambiar la tasa de baudios en 9600 tipo AT + BAUD4. El módulo debe responder OK9600.
Nota:
- 1 para 1200
- 2 para 2400,
- 3 para 4800
- 4 para 9600
- 5 para 19200
- 6 para 38400
- 7 para 57600
- 8 para 115200)
PRECAUCIÓN: Existen diferentes versiones del módulo HC-06 y la lista de comandos AT puede variar. Verifique el número de serie escrito en el módulo y la versión de firmware escribiendo el comando AT + VERSION.
Por ejemplo, el módulo HC-06 etiquetado ZS-040 con la versión 3.0-20170609 devuelve ERROR (0) cuando se envía el comando AT + NAMExxxx (con xxxx el nuevo nombre elegido para el módulo). Los comandos AT para este módulo son:
- AT + NAME = xxxx para configurar el nombre del módulo
- AT + PSWD: «xxxx» para configurar la contraseña del módulo
No dude en dejar un comentario si tiene problemas para configurar su módulo Bluetooth HC-06.
Sincronización
Cuando haya configurado el módulo como desee, puede emparejar el HC-06 con el otro sistema como cualquier otro dispositivo Bluetooth. Seleccione el nombre de la lista de dispositivos detectados (predeterminado: HC-06) e ingrese el código PIN que eligió (predeterminado: 1234). Cuando se hace esto, el LED en el módulo debe dejar de parpadear.
Código
Cuando su módulo esté emparejado, puede modificar el siguiente código para obtener la funcionalidad deseada. En el siguiente ejemplo, asumimos que una aplicación envía ON o OFF al módulo Bluetooth para activar una función.
Para administrar el módulo HC-06 en el programa, la biblioteca utilizada es SoftwareSerial.h, que administra los enlaces seriales de la placa Arduino. Las funciones a conocer son:
- SoftwareSerial hc06 (Rx, Tx) para definir el puerto serie y los pines para la comunicación
- hc06.begin () para establecer la velocidad de comunicación
- hc06.available () para probar si los datos están disponibles en el búfer del puerto serie
- hc06.read () para leer datos de puerto serie, un byte a la vez
- hc06.print () para enviar una cadena en ASCII
- hc06.write () para enviar datos, un byte a la vez.
#include <SoftwareSerial.h> SoftwareSerial hc06(2,3); String cmd=""; float sensor_val=0; void setup(){ //Initialize Serial Monitor Serial.begin(9600); //Initialize Bluetooth Serial Port hc06.begin(9600); } void loop(){ //Read data from HC06 while(hc06.available()>0){ cmd+=(char)hc06.read(); } //Select function with cmd if(cmd!=""){ Serial.print("Command recieved : "); Serial.println(cmd); // We expect ON or OFF from bluetooth if(cmd=="ON"){ Serial.println("Function is on"); }else if(cmd=="OFF"){ Serial.println("Function is off"); }else{ Serial.println("Function is off by default"); } cmd=""; //reset cmd } // Simulate sensor measurement sensor_val=(float)random(256); // random number between 0 and 255 //Write sensor data to HC06 hc06.print(sensor_val); delay(100); }
Bonus: Scan de baudrate
Si tienes problemas para encontrar la velocidad de comunicación de tu módulo Bluetooth, aquí tienes un código que por cada valor de baudrate inicializa el módulo Bluetooth HC-06 y envía el comando AT.
#include <SoftwareSerial.h> SoftwareSerial hc06(2, 3); void setup() { //Initialize Serial Monitor Serial.begin(9600); // scan scanBaudrate(); } void loop() {} void scanBaudrate() { unsigned long bauds[12] = {300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 74880, 115200, 230400, 250000}; for (int i = 0; i < 12; i++) { hc06.begin(bauds[i]); delay(10); Serial.print(F("Baudrate ")); Serial.println(bauds[i]); command("AT", 2000); } } String command(const char *toSend, unsigned long milliseconds) { String result; Serial.print("Sending: "); Serial.println(toSend); hc06.print(toSend); unsigned long startTime = millis(); Serial.print(F("Received: ")); while (millis() - startTime < milliseconds) { if (hc06.available()) { char c = hc06.read(); Serial.write(c); result += c; // append to the result string } } Serial.println(); // new line after timeout. return result; }
Cuando el valor de baudrate es correcto, el módulo Bluetooth debería responder OK. Este código le permitirá averiguar fácilmente si su módulo funciona y qué velocidad de transmisión utiliza.
Aplicaciones
- Comunicarse entre dos Arduino a través de Bluetooth
- Controla tu robot con tu smartphone
- Obtén las medidas de un sensor en tu smartphone
- Todos nuestros robots pueden ser controlados por smartphone.
Fuentes
Encuentre otros tutoriales y ejemplos en el generador de código automático
Arquitecto de Código
Soy recién llegado a este mundo de Arduino y se me ocurre preguntar : cómo se puede hacer que un sensor que remita un umbral de ruido sea enviado a una pequeña alarma mediante Bluetooth.
Me gustaría lograr montar éste proyecto.
Gracias
Si necesita ayuda, no lo dude contactarnos!
Hola, tengo una consulta.
Estoy aprendiendo y seguí los pasos de varios tutoriales. El tema es que me funcionó uno que no encuentro cuál es (lo hice hace días a la noche) y cuando inreso nuevamente estos códigos para intentar «reconfigurarlo» lo sube y demás pero el dispositivo sigue conectado con el mismo nombre, es más, cuando intento cambiarle el nombre en la consola de arduino no me sale nada.
¿Qué puede ser? ¿Hay manera de resetearlo todo y volver a configurarlo?
Hola, ¿Puede enviar las respuestas del serial monitor para los comandos AT?
Hola, tengo un módulo bluetooth 4.2 ble. Logre conectarlo con la aplicación y enviar datos hacia el celular. Pero no logro recibir datos desde el celular. Mi modilo es el DX-BT16. Necesito poder controlar u robot. Podrían orientarme con la programación?
Tal vez con este tutorial puede alcanzar su objetivo
Hola tengo el módulo HC-06 la versión 3.0-20170609 me devuelve ERROR (0) en el monitor serie eso en la opción (AMBOS NL CR) porque si es en (SIN AJUSTE DE LINEA) no responde nada que puedo hacer en este caso gracias
¿Qué comando estás tratando de enviar?
A mi me sucede lo mismo con todos los comandos..
NO PUEDO CONFIGURAR EL MODULO HC06, NO ME DEVUELVE LOS CODIGOS AT. PUSE EL PUERTO COM CORRECTO Y LA PLACA ES ARDUINO UNO. YA NO SE COMO CONTINUAR.. SI ALGUNO SE LE OCURRE ALGO..
comprueba el cableado del microcontrolador, cambia los pines del puerto serie y comprueba la velocidad (baudrate).
Fijate en este blog, es probable que tu módulo Bluetooth tenga una versión de firmware más actual y tengas que programarlo un poco diferente (además de que la escritura de comandos AT varía ligeramente). https://juangiraldo0.blogspot.com/2018/07/configuracion-modulo-bluetooth-hc-06.html
Buenos días! Estoy intentando cambiar el PIN a un HC-06, con el comando AT+PSWD=Nombre_123 y me contesta con el error ERROR:(1D).
La versión del módulo es 3.0-20170609 y no encuentro la forma de validarlo..
Me podéis echar una mano??
Gracias
Hola, ¿puedes intentar AT+PSWD:»Nombre_123″?
Hola buen dia, lo que pasa es que tengo un modulo H0-06 de version LinvorV1.8 y ocupo aparearlo con un modulo HC-06, mi profesor jura que entrego material igual a los demas equipos de la clase, pero eso es incorrecto algunos compañeros a los que les he preguntado tienen la version 3.0-20170609, Quiero saber si deacuerdo a la version es posible o no que el modulo te responda al comando AT+ADDR, me responde a los demas comandos, AT+NAME. AT+PIN, AT+VERSION pero a para aparear ocupo la direccion MAC y no se si se la puedo sacar de otra manero o esa version no tiene direccion MAC.
En mi opinión, el único módulo que responde al comando AT+ADDR es el módulo HC-05 que puede conectarse a un HC-06. El módulo HC-06 no puede acoplarse a otro dispositivo porque es un módulo esclavo.
Muy bien, entonces lo que me dices es que el hc-06 como se aparea con un hc-05? Sabes de algún método diferente para realizar esta acción?
Si entiendo que el que realiza la acción de coneccion el es hc-05 pero como le digo que se conecte al hc-06 sabes de algún método?
Your mode of describing everything in this piece of writing is genuinely fastidious, all
be capable of easily know it, Thanks a lot https://linktr.ee/pub012