En esta entrada vamos a realizar un enlace inalámbrico por bluetooth entre placas arduinos. El funcionamiento básico es bastante parecido a la comunicación serie que vimos en otra entrada, con la salvedad del emparejamiento de los dos módulos bluetooth.
Lo primero que necesitamos, además obviamente de las placas arduino, son los módulos bluetooth. En el mercado pueden encontrarse básicamente dos modelos diferentes denominados de forma genérica como HC-05 y HC-06. La diferencia entre ambos tipos de módulos es que mientras los primeros pueden configurarse para funcionar como maestros o como esclavos, los segundos deben adquirirse para operar como maestros o como esclavos y no permiten cambiar su modo de funcionamiento de uno a otro.
En nuestro caso hemos hecho uso de dos módulos HC-05, lo cual nos va a permitir también aprender a configurarlos para funcionar en un modo o en otro haciendo uso de los llamados comandos AT.
Estos módulos los adquirí en ebay al precio de 6,24 euros cada uno. En principio puede adquirirse únicamente el módulo bluetooth o montado sobre una placa "base board", la cual al disponer de varios pines con un espaciado estándar de 2,54 milímetros, facilita enormemente la conexión de estos módulos a nuestra placa arduino.
Lo primero que tenemos que hacer es configurar uno de los módulos como maestro, ya que por defecto todos los módulos están configurados como esclavos. La forma que me ha resultado más fácil para hacerlo después de leer la abundante información que sobre este tema existe en internet, es conectar el módulo bluetooth a una de nuestras placas arduino y hacer uso del monitor serie que está incluido en el IDE de arduino para enviar los comandos AT de configuración.
Nos cercioramos que nuestra placa arduino no tiene cargado ningún sketch que haga uso del puerto serie. En caso de tenerlo, pues cargamos cualquier sketch que no use el puerto serie (por ejemplo, el ejemplo blink que viene en el IDE arduino).
Conectamos en primer lugar el terminal identificado como KEY a los 3,3v dela placa arduino y posteriormente los terminales 5,0v y GND. Este orden es muy importante, ya que de no hacerlo de esta forma, el módulo bluetooth no entrará en modo AT. Si lo hemos hecho bien, un pequeño led rojo destellará con una cadencia de 1Hz. No debemos olvidarnos tampoco de conectar los terminales RX/TX entre el modulo bluetooth y la placa arduino pero sin cruzarlos, es decir, RX del módulo bluetooth con RX de la placa arduino, y TX del módulo bluetooth con TX de la placa arduino. Entramos en el monitor serie del entorno arduino, seleccionamos 38.400 baudios y tecleamos AT, a lo cual si todo ha ido bien el modulo bluetooth responderá con un OK.
Lo primero que necesitamos, además obviamente de las placas arduino, son los módulos bluetooth. En el mercado pueden encontrarse básicamente dos modelos diferentes denominados de forma genérica como HC-05 y HC-06. La diferencia entre ambos tipos de módulos es que mientras los primeros pueden configurarse para funcionar como maestros o como esclavos, los segundos deben adquirirse para operar como maestros o como esclavos y no permiten cambiar su modo de funcionamiento de uno a otro.
En nuestro caso hemos hecho uso de dos módulos HC-05, lo cual nos va a permitir también aprender a configurarlos para funcionar en un modo o en otro haciendo uso de los llamados comandos AT.
Estos módulos los adquirí en ebay al precio de 6,24 euros cada uno. En principio puede adquirirse únicamente el módulo bluetooth o montado sobre una placa "base board", la cual al disponer de varios pines con un espaciado estándar de 2,54 milímetros, facilita enormemente la conexión de estos módulos a nuestra placa arduino.
Lo primero que tenemos que hacer es configurar uno de los módulos como maestro, ya que por defecto todos los módulos están configurados como esclavos. La forma que me ha resultado más fácil para hacerlo después de leer la abundante información que sobre este tema existe en internet, es conectar el módulo bluetooth a una de nuestras placas arduino y hacer uso del monitor serie que está incluido en el IDE de arduino para enviar los comandos AT de configuración.
Nos cercioramos que nuestra placa arduino no tiene cargado ningún sketch que haga uso del puerto serie. En caso de tenerlo, pues cargamos cualquier sketch que no use el puerto serie (por ejemplo, el ejemplo blink que viene en el IDE arduino).
Conectamos en primer lugar el terminal identificado como KEY a los 3,3v dela placa arduino y posteriormente los terminales 5,0v y GND. Este orden es muy importante, ya que de no hacerlo de esta forma, el módulo bluetooth no entrará en modo AT. Si lo hemos hecho bien, un pequeño led rojo destellará con una cadencia de 1Hz. No debemos olvidarnos tampoco de conectar los terminales RX/TX entre el modulo bluetooth y la placa arduino pero sin cruzarlos, es decir, RX del módulo bluetooth con RX de la placa arduino, y TX del módulo bluetooth con TX de la placa arduino. Entramos en el monitor serie del entorno arduino, seleccionamos 38.400 baudios y tecleamos AT, a lo cual si todo ha ido bien el modulo bluetooth responderá con un OK.
- AT+VERSION? -> El módulo bluetooth devuelve la versión del firmware.
- AT+NAME? -> Nos devuelve el nombre del módulo bluetooth.
- AT+BIND? -> Permite obtener la dirección de enlace con otro módulo bluetooth.
- AT+UART? -> Muestra la velocidad de funcionamiento del módulo bluetooth.
- AT+ADDR? -> Devuelve la dirección del módulo bluetooth.
Si en lugar de finalizar el comando con "?" introducimos un "=" y añadimos el parámetro correspondiente, podremos modificar los valores por defecto.
Recomiendo identificar claramente ambos módulos estableciendo, por ejemplo, el nombre del maestro como "maestro" y el esclavo como "esclavo". Por otra parte para permitir un enlace directo entre ambos módulos es necesario identificar en el modulo maestro la dirección de puerto del módulo esclavo, para lo cual debemos obtener primero la dirección del puerto del módulo esclavo y luego introducirla a través del comando "AT+bind" en el módulo maestro.
Para ejemplificar el uso de enlace bluetooth entre arduinos, hemos utilizado prácticamente el mismo ejemplo que se utilizó cuando hablamos de comunicación serie, con la única diferencia que se ha utilizado la librería softwareserie para permitir utilizar como salida pines diferentes a los identificados como RX/TX en la placa que actúa de esclava, ya que de lo contrario no podremos sacar los datos recibidos a través del monitor serial del entorno arduino.
Este sería el programa que he cargado en la placa arduino que envía datos:
// Programa de prueba para enviar datos por bluetooth
unsigned int i;
void setup() {
Serial.begin(38400);
}
void SendCommand(String string) {
Serial.println(string);
}
void loop() {
SendCommand("Mensaje de prueba: "+String(i++));
delay(1000);
}
Y este es el programa a cargar en el arduino que actúa como esclavo:
// Programa de prueba para recibir datos por bluetooth
#include <SoftwareSerial.h>
SoftwareSerial bt(2,3); // Pines que actúan como RX, TX, respectivamente
void setup() {
Serial.begin(38400);
bt.begin(38400);
}
String SerialCommand() {
char c;
String string="";
while (c!='\n') {
c = bt.read();
if (c!=-1) {
string+=c;
}
delayMicroseconds(500);
}
return string;
}
void loop() {
if (bt.available()) {
Serial.print(SerialCommand());
}
}
En relación a la domótica, uno de mis temas favoritos, y por lo que llevo aprendido hasta ahora, soy consciente que la comunicación bluetooth presenta dos serios inconvenientes para una instalación domótica real, a saber: reducido alcance de la comunicación entre dispositivos, con los módulos que he podido probar el alcances es de apenas 10 metros, y dificultad para crear una red multipunto. No obstante, no deja de ser una tecnología muy útil para controlar a corta distancia los más variados "cacharos" que se nos vayan ocurriendo, y por otra parte, no podemos negar que actualmente la mayoría de teléfonos móviles y ordenadores incorporan enlace bluetooth, por lo que su utilización se encuentra ampliamente difundida.
Recomiendo identificar claramente ambos módulos estableciendo, por ejemplo, el nombre del maestro como "maestro" y el esclavo como "esclavo". Por otra parte para permitir un enlace directo entre ambos módulos es necesario identificar en el modulo maestro la dirección de puerto del módulo esclavo, para lo cual debemos obtener primero la dirección del puerto del módulo esclavo y luego introducirla a través del comando "AT+bind" en el módulo maestro.
Para ejemplificar el uso de enlace bluetooth entre arduinos, hemos utilizado prácticamente el mismo ejemplo que se utilizó cuando hablamos de comunicación serie, con la única diferencia que se ha utilizado la librería softwareserie para permitir utilizar como salida pines diferentes a los identificados como RX/TX en la placa que actúa de esclava, ya que de lo contrario no podremos sacar los datos recibidos a través del monitor serial del entorno arduino.
Este sería el programa que he cargado en la placa arduino que envía datos:
// Programa de prueba para enviar datos por bluetooth
unsigned int i;
void setup() {
Serial.begin(38400);
}
void SendCommand(String string) {
Serial.println(string);
}
void loop() {
SendCommand("Mensaje de prueba: "+String(i++));
delay(1000);
}
Y este es el programa a cargar en el arduino que actúa como esclavo:
// Programa de prueba para recibir datos por bluetooth
#include <SoftwareSerial.h>
SoftwareSerial bt(2,3); // Pines que actúan como RX, TX, respectivamente
void setup() {
Serial.begin(38400);
bt.begin(38400);
}
String SerialCommand() {
char c;
String string="";
while (c!='\n') {
c = bt.read();
if (c!=-1) {
string+=c;
}
delayMicroseconds(500);
}
return string;
}
void loop() {
if (bt.available()) {
Serial.print(SerialCommand());
}
}
En relación a la domótica, uno de mis temas favoritos, y por lo que llevo aprendido hasta ahora, soy consciente que la comunicación bluetooth presenta dos serios inconvenientes para una instalación domótica real, a saber: reducido alcance de la comunicación entre dispositivos, con los módulos que he podido probar el alcances es de apenas 10 metros, y dificultad para crear una red multipunto. No obstante, no deja de ser una tecnología muy útil para controlar a corta distancia los más variados "cacharos" que se nos vayan ocurriendo, y por otra parte, no podemos negar que actualmente la mayoría de teléfonos móviles y ordenadores incorporan enlace bluetooth, por lo que su utilización se encuentra ampliamente difundida.
Gracias por tu artículo.
ResponderEliminarEntiendo que antes de ejecutar los programas de arduino los has emparejado.
¿No te pide el pasword para la comunicación?
Otra cosa, ¿cómo puede comunicarse un módulo HC05 (en configuración maestro) con un HC06 (Esclavo) si este último, que yo sepa, no tiene una dirección?.
Gracias de antemano, un saludo, GMB
excelente iformacion gracias
ResponderEliminarMuchas gracias amigo, funciono en una :D revelaste un detalle que en otras webs no decían. una vez mas gracias :D
ResponderEliminar