fbpixel
Etiquetas: , , , ,

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

module-bluetooth-hc05 Tu Arduino se comunica con el módulo 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

arduino-bluetooth-hc05_bb Tu Arduino se comunica con el módulo HC-05


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.

arduino-bluetooth-hc05-communication Tu Arduino se comunica con el módulo HC-05

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).
arduino-bluetooth-hc05-voltage-div_bb Tu Arduino se comunica con el módulo HC-05

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.

master-and-slave-connected-hc05 Tu Arduino se comunica con el módulo HC-05

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

Encuentre otros tutoriales y ejemplos en el generador de código automático
Arquitecto de Código