fbpixel
Etiquetas: , , , ,

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.

module-bluetooth-hc06 Comunicación con Arduino y el 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

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

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).

arduino-bluetooth-hc06-voltage-div_bb-1 Comunicación con Arduino y el módulo HC-06


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.

arduino-bluetooth-hc06-scan-baudrate Comunicación con Arduino y el módulo HC-06

Aplicaciones

Fuentes

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