Icono del sitio AranaCorp

Comunicación con Arduino y el módulo HC-06

arduino and hc06
4.6
(9)

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

Presentación del módulo HC-06.

El módulo Bluetooth HC-06 tiene 4 pins para establecer la conexión.

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:

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:

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:

#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

Fuentes

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

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuarlo!

Promedio de puntuación 4.6 / 5. Recuento de votos: 9

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Salir de la versión móvil