Descripción
Ya hemos visto los módulos como el HC-05 y el HC-06 de BlueTooth, sencillos de manejar y se comportan como receptores simples que nos envían por una puerta serie todo lo que recibe y emiten mediante el BlueTooth. Vimos también que estos módulos disponían de un modo característico de entrar en modo Comandos AT, con los que podíamos programar con mayor o menor comodidad ciertas características del módulo.
Ya hemos visto los módulos como el HC-05 y el HC-06 de BlueTooth, sencillos de manejar y se comportan como receptores simples que nos envían por una puerta serie todo lo que recibe y emiten mediante el BlueTooth. Vimos también que estos módulos disponían de un modo característico de entrar en modo Comandos AT, con los que podíamos programar con mayor o menor comodidad ciertas características del módulo.
Actualmente este tipo de módulos son muy baratos, y sencillos de manejar lo que les convierte en unos componentes ideales para enviar datos a nuestros Arduinos desde cualquiera de los móviles que llevamos en el bolsillo.
Pero había un problema. Los equipos de Apple no aceptan la conexión con este tipo de módulos porque requieren la versión 4.0 del Bluetooth.
Pero los fabricantes chinos han empezado a suminístrar de forma accesible, los modelos HC-08 y HC-10.
¿Qué es el nuevo Bluetooth 4.0? Pues un nuevo protocolo diseñado para disminuir todo lo posible las necesidades de energía de los dispositivos que lo usan, y de sobre todo de la propia comunicación que tradicionalmente ha sido de consumo insaciable.
Se le suele llamar también BLE por Bluetooth Low Energy, o simplemente Bluetooth LE.
Además de disminuir el consumo de energía de estos módulos, también ha bajado la distancia a la que se puede hacer una comunicación efectiva con este nuevo protocolo, de los 100m anteriores a la mitad.
El módulo BlueTooth HM-10, es pequeño al estilo de los que ya conocemos y de patillaje muy similar, pero no en el mismo orden, que nos convierte la información que llega vía BT a puerta serie y viceversa:
Este módulo HM-10 se puede utilizar directamente para enviar y recibir mensajes a través del Bluetooth sin más que pinchar sus pines serie Rxd y Txd a los correspondientes de Arduino y con el programa adecuado no necesitamos más.
El módulo BlueTooth HM-10, es pequeño al estilo de los que ya conocemos y de patillaje muy similar, pero no en el mismo orden, que nos convierte la información que llega vía BT a puerta serie y viceversa:
Este módulo HM-10 se puede utilizar directamente para enviar y recibir mensajes a través del Bluetooth sin más que pinchar sus pines serie Rxd y Txd a los correspondientes de Arduino y con el programa adecuado no necesitamos más.
Podemos hacer un pequeño montaje para entrar en modo de comandos AT y probar la comunicación con el modulo Bluetooth. Para ello basta con arrancarlo entra automáticamente en modo Comandos AT.
Materiales
Placa de Arduino
1 Módulo HM-10
1 Smartphone Android
Protoboard, cables para conexiones y un cable USB para conectar Arduino al PC y sirve además de Alimentación
Esquema
Impotante fijaté bien al montar las patillas, aunque ambos módulos traen la misma seriegrafía el HM-10 cambian el orden de las patillas, así que pon atención a la hora de cablear
Impotante fijaté bien al montar las patillas, aunque ambos módulos traen la misma seriegrafía el HM-10 cambian el orden de las patillas, así que pon atención a la hora de cablear
Montaje
#include <SoftwareSerial.h>
SoftwareSerial BT1(4, 2); // RX | TX
void setup(){
Serial.begin(9600);
Serial.println("Levantando el modulo HC-05");
Serial.println("Esperando comandos AT:");
BT1.begin(9600); // La mayoría de los HC-05 tienes que usar esta velocidad.
}
void loop(){
if (BT1.available())
Serial.write(BT1.read());
if (Serial.available())
BT1.write(Serial.read());
}
No he encontrado demasiados comandos AT para este módulo y probando he ido viendo que acepta un subset de los habituales comandos que vimos con los módulos HC-05 y HC-06
| Comando | Respuesta Esperada | Descripción |
| AT | OK | Comueba si el módulo responde y está vivo. |
| AT+RESET | OK+RESET | Reinicia el módulo por software. |
2. Configuración de Red y Bluetooth
| Comando | Respuesta Esperada | Descripción |
| AT+NAME? | OK+Get:=Nombre | Consulta el nombre actual del Bluetooth. |
| AT+NAME= nombre | OK+Set:=NuevoNombre | Cambia el nombre (Ej: AT+NAMEHM-10_Proyecto). Máx 20 caracteres. |
| AT+ADDR? | OK+Get:=Dirección_MAC | Muestra la dirección MAC física del módulo. |
| AT+ROLE? | OK+Get:[0 o 1] | Consulta el rol actual del módulo. |
| AT+ROLE0 | OK+Set:0 | Configura el módulo como Esclavo (Periférico - por defecto). |
| AT+ROLE1 | OK+Set:1 | Configura el módulo como Maestro (Central - busca otros dispositivos). |
| AT+IMME? | OK+Get:[0 o 1] | Consulta el tipo de arranque. |
| AT+IMME0 | OK+Set:0 | Arranque automático: Al encenderse busca conectarse de inmediato. |
| AT+IMME1 | OK+Set:1 | Arranque manual: Al encenderse espera el comando AT+START para trabajar. |
3. Configuración de Comunicación (Baudrate y Paridad)
Para cambiar la velocidad de comunicación serie (Baudrate), se usa un número de índice del 0 al 8:
Si utilizas el siguiente comando BAUD, por ejemplo AT+BAUD2, luego tiene que volver a cargar el sketch con la línea BT1.begin(38400); para que siga la comunicación normal con el monitor serie.
AT+BAUD[Índice] -> Ejemplo: AT+BAUD0 (Configura a 9600)
| Índice | Velocidad (Baudios) | Índice | Velocidad (Baudios) | |
| 0 | 9600 (Por defecto) | 5 | 57600 | |
| 1 | 19200 | 6 | 115200 | |
| 2 | 38400 | 7 | 230400 | |
| 3 | 57600 | 8 | 460800 | |
| 4 | 115200 | 9 | 1200 (Solo en versiones nuevas) |
Paridad:
AT+PARI0(Sin paridad - defecto),AT+PARI1(Paridad impar),AT+PARI2(Paridad par).Bits de parada:
AT+STOP0(1 bit de parada - defecto),AT+STOP1(2 bits de parada).
4. Seguridad y Modos de Conexión (Pines)
| Comando | Respuesta Esperada | Descripción |
| AT+PASS? | OK+Get:[Pin] | Muestra el código PIN actual (Por defecto suele ser 000000). |
| AT+PASS123456 | OK+Set:[Pin] | Cambia el código PIN de vinculación (Ej: AT+PIN123456). |
| AT+TYPE? | OK+Get:[0, 1, 2, 3] | Consulta el modo de autenticación. |
| AT+TYPE0 | OK+Set:0 | Conexión libre sin PIN (Por defecto). |
| AT+TYPE1 | OK+Set:1 | Requiere vinculación con código PIN. |
5. Control de Potencia y Consumo energético
| Comando | Respuesta Esperada | Descripción |
| AT+POWE? | OK+Get:[0, 1, 2, 3] | Consulta la potencia de transmisión de la antena. |
| AT+POWE3 | OK+Set:[Índice] | Cambia la potencia: 0 (-23dBm), 1 (-6dBm), 2 (0dBm), 3 (+6dBm - Máximo alcance). |
| AT+SLEEP | OK+SLEEP | Significa que estaba despierto y lo obligas a dormir, es decir permanece dormido hasta que recibe una señal y por tanto consume menos |
| AT+SLEEP | OK+WAKE | Significa que estaba dormido y lo obliga a despertar, es decir, permanece despierto y por tanto consume más |
+ por un = o requiriendo obligatoriamente un formato específico (como AT+NAME=Fulanito). Si tu monitor serie ya funciona, puedes enviar AT+VERSION o AT+HELP para descubrir exactamente qué variante de firmware lleva dentroEstableciendo la comunicación con tu móvilLa conexión del módulo es trivial y basta con alimentarlo y conectar la puerta serie:
Podemos usar un programa sencillo para establecer la comunicación, en el que simplemente copiamos lo que llega el BT a la puerta serie y viceversa:
#include <SoftwareSerial.h>
// Configuración de pines:
// Pin 4 del Arduino va al TX del HM-10
// Pin 2 del Arduino va al RX del HM-10
SoftwareSerial BT1(4, 2);
void setup(){
Serial.begin(9600);
BT1.begin(9600);
// Configuramos el LED interno del Arduino para usarlo como testigo
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
Serial.println("--- SISTEMA LISTO ---");
Serial.println("Conectate desde la app y envia un mensaje.");
}
void loop(){
// 1. LEER DEL MÓVIL Y MANDAR A LA PC
if (BT1.available() > 0) {
char c = BT1.read();
// Encendemos el LED 13 para avisar que entró un dato físico
digitalWrite(13, HIGH);
Serial.write(c); // Envía el carácter en texto al Monitor Serie
delay(2); // Pequeña pausa para estabilizar el clon
digitalWrite(13, LOW); // Apagamos el testigo
}
// 2. LEER DE LA PC Y MANDAR AL MÓVIL
if (Serial.available() > 0) {
char c = Serial.read();
BT1.write(c);
}
}
Ahora vamos a necesitar la APP "Serial Bluetooth Terminal" (de Kai Morich) en el movil, una aplicación que nos permite enviar mensajes entre nuestro Arduino y digamos al movil. Si tienes Iphone entonces tienes que buscar otra app al respecto. Quizás te valga JBWave.
No hace falta que conectes el bluetooth por los ajustes de movil, sino que abres directamente la app, picas en la tres rayas horizontales y en device. Ahora eliges la pestaña Bluetooth LE y te saldrá el nombre que le hayas configurado al HM-10. Lo seleccionas y ya estas. Le das a la flecha para ir a la página anterior y te llevará directo a Terminal y abajo del todo tiene para enviar los mensajes que se recibirán en el monitor serie del IDE de arduino y los que escribas allí se recibirán en la pantalla Terminal del movil.
No hay comentarios:
Publicar un comentario