Arduino puede comunicarse con otros dispositivos a través de Bluetooth utilizando el módulo HC-05 (maestro/esclavo). Permite que el Arduino se conecte e intercambie datos con otros dispositivos como el Smartphone, el ordenador u otros microcontroladores.La comunicación Bluetooth se puede utilizar para controlar un robot de forma remota, Visualizar y almacenar datos en el ordenador o en el smartphone, por ejemplo.
Requisito previo: Arduino Comunicación en serie
Material
- Ordenador
- Arduino UNO x2
- Cable USB
- Módulo Bluetooth HC-05 ZS-040 x2 (o 1x HC-05 y 1x HC-06)
- Cables de conexión M/F
Resumen del módulo HC-05
El módulo Bluetooth HC-05 tiene 6 pines, 2 para alimentación, 2 para establecer la conexión, 1 para entrar en modo de configuración y el otro para conocer el estado de la conexión.
- Fuente de alimentación VCC. Normalmente se conecta al pin de 5V del Arduino.
- GND tierra. Normalmente se conecta al pin GND del Arduino.
- Pin de recepción RX. Normalmente se conecta al pin de transmisión (TX) del Arduino
- Pin de transmisión TX. Típicamente conectado al pin de recepción (RX) del Arduino
- El estado es ALTO cuando el módulo está conectado
- La tecla ou EN debe estar en ALTO (3,3V) para entrar en el modo de configuración y debe estar desconectada para entrar en el modo de comunicación.
La particularidad del HC-05 es que puede utilizarse como módulo esclavo (equivalente al HC-06) y como módulo maestro, lo que significa que puede emparejarse a otro dispositivo por sí mismo.
Esquemas para la configuración
AVISO :
- 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. Compruebe la documentación.
- Dado que el módulo Bluetooth está utilizando 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 de 1k entre el pin3 y Rx; 2k Ohm entre Rx y GND).
Configuración del módulo HC-05
Configurar el módulo HC-05 puede ser interesante para comprobar que funciona, que se conecta correctamente y para modificar sus parámetros como el nombre (útil cuando se utilizan varios módulos), el código PIN y la velocidad de comunicación (baudrate). Sobre todo si quieres utilizarlo como módulo maestro. Para permitir la configuración, el módulo HC-05 debe estar alimentado pero no emparejado y el pin KEY/EN debe estar en HIGH antes de encender el módulo. Cuando esté en modo de configuración el LED parpadeará dos segundos cada dos segundos.
Abra el monitor serie y seleccione la opción de fin de línea «Nueva línea» y una velocidad de transmisión de 9600.
Note que el HC-05 entra en modo de configuración con una velocidad de transmisión de 38400bps.
Código de configuración
El siguiente código permite modificar y comprobar los parámetros utilizando el monitor serie y los comandos AT.
#include <SoftwareSerial.h>#define rxPin 2#define txPin 3#define baudrate 38400String 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 AT
En comparación con el módulo HC-06, el HC-05 puede utilizarse como módulo maestro y también puede comprobar los parámetros guardados utilizando los comandos AT.
En general, al teclear el comando AT+<command>? se mostrará el parámetro guardado (por ejemplo: AT+PSWD? mostrará el código PIN del módulo). Si introduce AT+<command>=<Param>, podrá establecer el valor del parámetro (ej: AT+PWSD=0000 para modificar el código PIN a 0000).
Aquí tiene algunos de los comandos AT:
- Para probar la comunicación, introduzca AT en el monitor serie del Arduino IDE. Si todo está configurado correctamente debería mostrar OK.
- Para modificar el nombre del módulo, introduzca AT+NAME=<Param>. El módulo debe responder OK (Defaut HC-05, Ej: Para cambiar el nombre a BTM1 introduzca AT+NAME=BTM1).
- Para modificar el código PIN, introduzca AT+PSWD=<Param> . El módulo debe responder OK(Por defecto 1234 Ej: Para cambiar el PIN a 0000 introduzca AT+PSWD=0000).
- AT+ROLE=<Param> para midy el rol del módulo como esclavo o maestro (Por defecto 0, Ej: para cambiar el rol como maestro introduzca AT+ROLE=1, como esclavo introduzca AT+ROLE=0).
- Para modificar la velocidad de transmisión, introduzca AT+UART=<Param1>,<Param2>,<Param3> con los parámetros de comunicación en serie Param1, 2 y 3: velocidad de transmisión, bit de parada y bit de paridad respectivamente (Por defecto, ajustado a 9600,0,0. Ejemplo: para modificar el baudrate a 115200 introduzca AT+UART=115200,0,0).
Existen otros comandos AT para el módulo Bluetooth HC-05 que puede encontrar siguiendo el enlace.
CAUCIÓN: Existen diferentes versiones del módulo HC-05 y el procedimiento de configuración puede variar. Asegúrese de comprobar la etiqueta del módulo y la versión del firmware antes de utilizarlo. Para este tutorial, hemos utilizado un módulo HC-05 con la etiqueta ZS-040 y la versión de firmware 2.0-20100601.
N.B.: Si el módulo no responde, compruebe el cableado, la conductividad de los cables y la velocidad de transmisión.
No dude en dejar un comentario o en ponerse en contacto con nosotros si tiene problemas para configurar su módulo HC-05.
Configuración de esclavos
Para configurar el módulo como esclavo, puede cambiar el nombre como AT+NAME=HC05-Slave y elegir los parámetros de comunicación y el código PIN que desee. Tendrás que asegurarte de que el maestro y el esclavo tienen los mismos parámetros de comunicación.
- AT devuelve OK
- AT+NAME=HC05-Slave
- AT+UART=9600,0,0
- AT+ROLE=0
- Ingrese AT+ADDR para obtener la dirección del módulo (ej: +ADDR:98d3:32:21450e)
Para el módulo esclavo, también se puede utilizar un módulo HC-06
Configuración maestra
Para configurar el módulo como maestro, es necesario cambiar el rol y establecer el mismo parámetro de comunicación que el módulo esclavo.
- AT devuelve OK
- AT+NAME=HC05-Master
- AT+UART=9600,0,0
- AT+ROLE=1
- La dirección del módulo esclavo debe ser introducida en el módulo maestro para que éste se pueda acoplar: AT+BIND=98d3,32,21450e (sustituya los puntos «:» por la coma «,»)
Esquemas para la comunicación
En el modo de comunicación, el pin Key/EN no está conectado.
Código de comunicación
Cuando ambos módulos estén configurados, cargue los siguientes códigos en las placas Arduino conectadas a sus módulos. Encienda los módulos para entrar en el modo de comunicación. El módulo maestro debe conectarse al módulo esclavo y el LED debe parpadear cada segundo.
Utilizamos la misma librería SoftwareSerial.h que para el módulo HC-06:
- SoftwareSerial hc05(Rx,Tx) para definir los pines del puerto serie
- hc05.begin() para definir la velocidad de transmisión (el valor debe ser el mismo que el de su módulo)
- hc05.available() para probar si hay datos disponibles en el buffer del módulo
- hc05.read() para leer datos un byte a la vez
- hc05.print() para enviar una cadena en forma ASCII
- hc05.write() para enviar datos un byte a la vez
Código maestro
#include <SoftwareSerial.h>SoftwareSerial ArduinoSlave(2,3);String answer;String msg;void setup(){Serial.begin(9600);Serial.println("ENTER Commands:");ArduinoSlave.begin(9600);}void loop(){//Read command from monitorreadSerialPort();//Read answer from slavewhile (ArduinoSlave.available()) {delay(10); if (ArduinoSlave.available() >0) {char c = ArduinoSlave.read(); //gets one byte from serial bufferanswer += c; //makes the string readString}}//Send data to slaveif(msg!=""){Serial.print("Master sent : ");Serial.println(msg);ArduinoSlave.print(msg);msg="";}//Send answer to monitorif(answer!=""){Serial.print("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 buffermsg += c; //makes the string readString}}Serial.flush();}
Código esclavo
#include <SoftwareSerial.h>SoftwareSerial ArduinoMaster(2,3);String msg;void setup(){Serial.begin(9600);ArduinoMaster.begin(9600); }void loop(){readSerialPort();// Send answer to masterif(msg!=""){Serial.print("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 buffermsg += c; //makes the string readString}}ArduinoMaster.flush();}
Si abres ambos monitores serie y si introduces un comando en el monitor de la placa maestra, deberías ver los siguientes resultados. La placa maestra envía un comando que es recibido y devuelto por la placa esclava. La comunicación funciona correctamente en ambas direcciones.
Si tienes problemas para configurar o emparejar tus módulos Bluetooth, no dudes en ponerte en contacto con nosotros o en dejar un comentario.
Aplicación
- Conduce tu robot a distancia con tu smartphone
- Envía la medición de la temperatura a tu smartphone