El Módulo HC-06 por defecto en cuanto se enciende se encuentra a la escucha de comandos AT.
En cuanto se empareja con algún dispositivo deja de aceptar dichos comandos, por lo que para configurarlo no debe estar conectado a ningún dispositivo (sus luces parpadean)
Para poder configurar el HC-06 mediante comandos AT debemos conectarnos con el Monitor Serie del Arduino IDE utilizando 9600 baud para la conexión. Aunque después configuremos el módulo para trabajar a otra frecuencia, por defecto la config es sobre 9600.
Para configurarlo conectamos el VCC a la toma de 5v , GND a GND , TX al pin 11 y RX al pin 10.
Tener en cuenta que la salida TX del módulo suele trabaja a 3,3v(serigrafiado en el propio módulo) y como los pin digitales de Arduino trabajan a 5v, podemos dañar el módulo asique tendremos que usar un divisor de voltaje como el siguiente:
Una vez tenemos conectado el módulo, cargamos el siguiente programa:
#include <SoftwareSerial.h>
SoftwareSerial hcSerial(11, 10); // RX, TX
String fromPC = "";
String fromBT = "";
void setup() {
Serial.begin(9600); // hardware serial for the USB-PC
hcSerial.begin(115200); // software serial Arduino to HC-06 (9600 is default)
// print instructions
Serial.println("HC-06 AT Command Programming");
Serial.println(" -- Command Reference ---");
Serial.println("AT (simply checks connection)");
Serial.println("AT+VERSION (sends the firmware verison)");
Serial.println("AT+NAMExxxxx (to change name to xxxxx");
Serial.println("AT+PINnnnn (to change password to 4 digit nnnn");
Serial.println("AT+BAUDn (to change to baud rate #1");
Serial.println(" BAUD1 = 1200");
Serial.println(" BAUD2 = 2400");
Serial.println(" BAUD3 = 4800");
Serial.println(" BAUD4 = 9600");
Serial.println(" BAUD5 = 19200");
Serial.println(" BAUD6 = 38400");
Serial.println(" BAUD7 = 57600");
Serial.println(" BAUD8 = 115200");
Serial.println("Configuring");
hcSerial.print("AT\r\n");
}
void loop() {
// Read from HC-06
if (hcSerial.available()) {
while(hcSerial.available()) { // While there is more to be read, keep reading.
fromBT = (char)hcSerial.read();
Serial.print(fromBT);
}
}
// Read from PC
if (Serial.available()){
delay(10); //
fromPC = (char)Serial.read();
hcSerial.print(fromPC); // show the HC-06 responce
Serial.print(fromPC); // echo it back to the PC
}
}
Si está bien conectado y el programa bien cargado, si enviamos el comando «AT» (sin saltos de linea en el monitor serie) nos debe contestar «OK».
Ahora le cambiamos el baud rate a 115200 ya que es el que necesitaremos para después conectarlo con GRBL, tan solo tenemos que mandar el comando «AT+BAUD8».
Una vez cambiado el baud rate, cambiamos la conexión de los pines RX y TX a los equivalentes en Arduino. El RX del módulo se conecta al TX de Arduino y viceversa.
Cargamos el código de GRBL ( en este fichero podemos vér en la variable BAUD_RATE porqué necesitamos cambiar el baud rate del módulo https://github.com/grbl/grbl/blob/master/grbl/config.h )
Ahora tenemos cargado GRBL y conectado como entrada y salida de datos el módulo Bluetooth, solo nos queda conectarnos por Bluetooth con nuestro dispositivo, la pass típica es 1234 o 0000 y en cuanto se establece la conexión veremos que las luces del módulo dejan de parpadear y se quedan fijas.
Ahora podemos utilizar Apps como «Serial Bluetooth Terminal» para comprobar que GRBL nos entiende, mandando cualquier código como por ejemplo:
G10 P0 L20 X0 Y0 Z0
Que hace un reset a las coordenadas 0,0,0 y si está todo bien nos contestará con un «ok».
Os recomiendo la app GRBL Controller que tiene soporte para controlar la CNC tipo GRBL directamente por Bluetooth o USB.
NOTA: Cuando tenemos el módulo conectado al Arduino con GRBL si tratamos de conectarnos utilizan el puerto USB en lugar del Bluetooth, no funciona correctamente, se queda en un bucle de lectura/escritura entre el USB y el módulo Bluetooth. Para poder tener las dos opciones disponibles yo le he puesto un interruptor a la alimentación del módulo Bluetooth para apagarlo, de forma que el USB vuelve a funcionar correctamente.
Fuentes utilizadas:
https://zeevy.github.io/grblcontroller/bluetooth-device-setup.html
https://www.instructables.com/Haciendo-Que-Mi-Cnc-Grbl-Sea-Bluetooth/
https://github.com/makertut/hc-06-setname/blob/master/code1.ino
https://www.youtube.com/watch?v=kOlXdzQ53zM
https://forum.arduino.cc/t/hc-06-bluetooth-module-pin-connect/476016/3
https://www.youtube.com/watch?v=A0uFtI_hX6Q
https://www.aranacorp.com/es/comunicacion-con-arduino-y-el-modulo-hc-06/