Tu tarjeta electronica Arduino puede comunicarse con otros dispositivos (smartphone, computadora u otros microcontroladores) a través de Bluetooth usando un módulo HC-05 (Maestro / Esclavo). Esto permite conectar la tarjeta Arduino a otro sistema para enviar y recibir datos. La comunicación a través de Bluetooth permite, por ejemplo, controlar un robot a través de una aplicación de smartphone, recuperar las mediciones de un sensor en tu computadora o permitir que dos robots se comuniquen entre ellos.
Materiales
- Computadora
- Tarjeta Arduino UNO x2
- Cable USB para conectar el Arduino a la computadora x2
- Modulo Bluetooth HC-05 ZS-040 x2 (o 1x HC-06 y 1x HC-05)
- Cables Dupont M/F
Presentacion del modulo Bluetooth HC-05
El módulo Bluetooth HC-05 tiene 6 pines para realizar la conexión.
- Fuente de 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)
- Estado devuelve 1 cuando el módulo está conectado
- La llave o la EN deben estar encendidas para ingresar al modo de configuración y no deben estar conectadas para estar en modo de comunicación.
La característica especial del módulo Bluetooth HC-05 es que se puede usar en modo esclavo (en este caso es equivalente a un módulo HC-06 y se usa de la misma manera o en modo maestro, lo que significa que puede conectarse de manera autónoma a otro módulo Bluetooth (HC-06, HC-05 en modo esclavo u otro) sin acción externa.
Diagrama de cableado para la configuración
CUIDADO:
- usamos los pin 2 y 3 de Arduino Uno. Dependiendo del microcontrolador, algunos pines pueden no ser compatibles con la comunicación SoftwareSerial. Especialmente, Arduino Mega, Micro y Leonardo. Consultar la documentacion.
- La lógica del módulo Bluetooth es 3.3V, se recomienda usar un puente divisor de voltaje para reducir el voltaje de 5V Arduino
Configuracion del modulo HC-05
La configuración del módulo Bluetooth puede ser interesante para verificar el funcionamiento correcto del módulo y para modificar sus parámetros, especialmente cuando se quiere usar el módulo en modo maestro. El módulo debe estar encendido pero no emparejado, y el pin Clave / EN debe recibir alimentación a 3 V cuando el módulo está encendido. Cuando el módulo está en modo de configuración, el LED se ilumina durante dos segundos cada dos segundos.
Abra el monitor de serie de Arduino y asegúrese de que la opción de final de línea muestre «Nueva linea» y que la velocidad en baudios esté establecida en 9600.
Tenga en cuenta que el módulo Bluetooth HC-05 ingresa al modo AT con una velocidad de comunicación (velocidad en baudios) de 38400 bps.
Codigo de configuracion
El siguiente código se utiliza para modificar los parámetros del módulo HC-05 (nombre, código PIN, velocidad de comunicación (velocidad en baudios), etc.) y para encontrar información como el número de versión del firmware.
#include <SoftwareSerial.h> #define rxPin 2 #define txPin 3 #define baudrate 38400 String msg; SoftwareSerial hc05(rxPin ,txPin); void setup(){ pinMode(rxPin,INPUT); pinMode(txPin,OUTPUT); Serial.begin(9600); Serial.println("ENTER AT Commands:"); hc05.begin(baudrate); } void loop(){ readSerialPort(); if(msg!="") hc05.println(msg); if (hc05.available()>0){ Serial.write(hc05.read()); } } void readSerialPort(){ msg=""; while (Serial.available()) { delay(10); if (Serial.available() >0) { char c = Serial.read(); //gets one byte from serial buffer msg += c; //makes the string readString } } }
Comandos de configuracion
Además del hecho de que se puede utilizar en modo maestro, el módulo Bluetooth HC-05 también le permite conocer sus parámetros guardados.
En general, si escribe en el monitor serie AT+<command>?, obtiene el valor guardado en el módulo (por ejemplo, AT + PSWD? para conocer el código PIN del módulo). Si entras en la linea AT+<command>=<Param>, Usted establece el valor del modulo (ej: AT+PWSD=0000 para modificar el codigo PIN en 0000).
Aquí hay algunos comandos básicos de AT:
- Para probar la comunicación, escribeAT En la serie monitor del IDE de Arduino. Si todo está bien, el módulo debe responder OK.
- Para cambiar el nombre del módulo, escribe AT+NAME=<Param> modulo. El módulo debe responder OK. (Ej: Para cambiar el nombre del módulo a tipo BTM1 escribe AT+NAME=BTM1)
- Para cambiar el código PIN del módulo, escribe AT+PSWD=<Param> . El módulo debe responder OK. (Ej: si quieres cambiar el PIN en 0000 escribe AT+PSWD=0000)
- AT+ROLE=<Param> para modificar la función del módulo esclavo o maestro (por ejemplo, para pasar el módulo a master AT + ROLE = 1).
- Para cambiar la velocidad de comunicación del módulo (solo si es necesario), escriba AT+UART=<Param1>,<Param2>,<Param3>
202/5000
con Param1, 2 y 3 los parámetros de comunicación en serie: la velocidad de transmisión, el bit de parada y el bit de paridad respectivamente. (Por defecto, 9600,0,0 Ej .: si desea cambiar la velocidad en baudios en el tipo 115200 escribe AT+UART=115200,0,0).
Existen otros comandos AT del módulo Bluetooth HC-05 que puedes encontrar siguiendo el enlace.
PRECAUCIÓN: Existen diferentes versiones del módulo HC-05 y la lista de comandos AT y el procedimiento pueden variar. Verifique el número de serie escrito en el módulo y la versión del firmware escribiendo AT + VERSION? En nuestro caso, el módulo HC-05 está etiquetado como ZS-040 y la versión es 2.0-20100601.
N.B .: Si no funciona, compruebe la conexión, la conductividad de los cables y la velocidad de comunicación (velocidad en baudios).
No dude en dejar un comentario si tiene problemas para configurar su módulo Bluetooth HC-05.
Configuración del módulo esclavo
Para el modo esclavo, puede cambiar el nombre escribiendo AT + NAME = HC05-Slave y elegir los parámetros de comunicación y la contraseña que desee. Deberá asegurarse de que sean iguales a los del módulo maestro.
- AT retourne OK
- AT+NAME=HC05-Slave
- AT+UART=9600,0,0
- AT+ROLE=0
- Ingrese AT + ADDR para obtener la dirección del módulo esclavo (en nuestro caso, +ADDR:98d3:32:21450e)
Para el módulo esclavo, también puedes usar un módulo HC-06.
Configuracion del Modulo Maestro
Para el modo maestro, se debe cambiar la función del módulo y elegir los mismos parámetros de comunicación que para el módulo esclavo
- AT retorno OK
- AT+NAME=HC05-Master
- AT+UART=9600,0,0
- AT+ROLE=1
- Se debe registrar la dirección del módulo esclavo para que el módulo maestro pueda emparejarse: AT + BIND = 98d3,32,21450e (reemplace los dos puntos «:» con comas «,»)
Diagrama de cableado para la comunicación
En el modo de comunicación, el pin Clave / EN no debe estar encendido.
Cuidado:
- Utilizamos los pines 2 y 3 de Arduino Uno. Dependiendo del microcontrolador, algunos pines pueden no soportar la comunicación en serie. Especialmente, Arduino Mega, Micro y Leonardo. Consulta la documentación.
- Dado que el módulo Bluetooth utiliza la lógica de 3,3V, se aconseja añadir un divisor de tensión para reducir la tensión de 5V de Arduino. (resistencia 1k entre pin3 y Rx; 2k Ohm entre Rx y GND).
Codigo de comunicacion
Cuando los módulos están configurados, puede desenchufar la llave de contacto o EN, cargar los siguientes códigos en dos placas Arduino y encender su HC-05 para ingresar al modo de comunicación.
En cuanto al módulo HC-06, usamos la biblioteca SoftwareSerial.h que aquí tiene algunas funciones:
- SoftwareSerial hc05(Rx,Tx) Para definir el puerto serie y los pines para la comunicación
- hc05.begin()para establecer la velocidad de comunicación
- hc05.available()para probar si los datos están disponibles en el búfer del puerto serie
- hc05.read()para leer datos de puerto serie, un byte a la vez
- hc05.print()para enviar una cadena en ASCII
- hc05.write()para enviar datos, un byte a la vez.
- hc05.flush()para vaciar los datos del buffer
Codigo Maestro
#include <SoftwareSerial.h> SoftwareSerial ArduinoSlave(2,3); String answer; String msg; void setup(){ Serial.begin(9600); Serial.println(F("ENTER Commands:")); ArduinoSlave.begin(9600); } void loop(){ //Read command from monitor readSerialPort(); //Read answer from slave while (ArduinoSlave.available()) { delay(10); if (ArduinoSlave.available() >0) { char c = ArduinoSlave.read(); //gets one byte from serial buffer answer += c; //makes the string readString } } //Send data to slave if(msg!=""){ Serial.print(F("Master sent : ")); Serial.println(msg); ArduinoSlave.print(msg); msg=""; } //Send answer to monitor if(answer!=""){ Serial.print(F("Slave recieved : ")); Serial.println(answer); answer=""; } } void readSerialPort(){ while (Serial.available()) { delay(10); if (Serial.available() >0) { char c = Serial.read(); //gets one byte from serial buffer msg += c; //makes the string readString } } Serial.flush(); }
Code Esclave
#include <SoftwareSerial.h> SoftwareSerial ArduinoMaster(2,3); String msg; void setup(){ Serial.begin(9600); ArduinoMaster.begin(9600); } void loop(){ readSerialPort(); // Send answer to master if(msg!=""){ Serial.print(F("Master sent : ") ); Serial.println(msg); ArduinoMaster.print(msg); msg=""; } } void readSerialPort(){ while (ArduinoMaster.available()) { delay(10); if (ArduinoMaster.available() >0) { char c = ArduinoMaster.read(); //gets one byte from serial buffer msg += c; //makes the string readString } } ArduinoMaster.flush(); }
Si abre los dos monitores en serie correspondientes y escribe un comando en el monitor de la tarjeta maestra, puede ver el siguiente resultado: la tarjeta maestra envía una cadena de caracteres que la tarjeta esclavo recibe y devuelve. Esto asegura que la comunicación vaya bien en ambas direcciones.
Si tiene problemas para configurar o comunicarse con su módulo Bluetooth HC-05, no dude en contactarnos o dejar un comentario.
Application
¿Y qué harías si tu placa Arduino pudiera comunicarse con otros sistemas? No dudes en respondernos en el comentario.
Source
- Software Serial Example
- Usando el módulo HC-06 con Arduino
- Module Bluetooth HC-05
- AT Commands
- Crea tu aplicación de teléfono inteligente con App Inventor 2
Encuentre otros tutoriales y ejemplos en el generador de código automático
Arquitecto de Código
Muy buen aporte, saludos
Si, muy interesante el proyecto!