G050 Bluetooth 4.0 Low Energy HM-10

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. 

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.

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

Montaje


Código
Con el siguiente código ya podemos empezar
 a programar el modulo mediante comandos AT:

#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
 
ComandoRespuesta EsperadaDescripción
ATOKComueba si el módulo responde y está vivo.
AT+RESETOK+RESETReinicia el módulo por software.


2. Configuración de Red y Bluetooth

ComandoRespuesta EsperadaDescripción
AT+NAME?OK+Get:=NombreConsulta el nombre actual del Bluetooth.
AT+NAME= 
nombre
OK+Set:=NuevoNombreCambia el nombre (Ej: AT+NAMEHM-10_Proyecto). Máx 20 caracteres.
AT+ADDR?OK+Get:=Dirección_MACMuestra la dirección MAC física del módulo.
AT+ROLE?OK+Get:[0 o 1]Consulta el rol actual del módulo.
AT+ROLE0OK+Set:0Configura el módulo como Esclavo (Periférico - por defecto).
AT+ROLE1OK+Set:1Configura el módulo como Maestro (Central - busca otros dispositivos).
AT+IMME?OK+Get:[0 o 1]Consulta el tipo de arranque.
AT+IMME0OK+Set:0Arranque automático: Al encenderse busca conectarse de inmediato.
AT+IMME1OK+Set:1Arranque 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)
ÍndiceVelocidad (Baudios)ÍndiceVelocidad (Baudios)
09600 (Por defecto)557600
1192006115200
2384007230400
3576008460800
411520091200 (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)

ComandoRespuesta EsperadaDescripción
AT+PASS?OK+Get:[Pin]Muestra el código PIN actual (Por defecto suele ser 000000).
AT+PASS123456OK+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+TYPE0OK+Set:0Conexión libre sin PIN (Por defecto).
AT+TYPE1OK+Set:1Requiere vinculación con código PIN.


5. Control de Potencia y Consumo energético

ComandoRespuesta EsperadaDescripción
AT+POWE?OK+Get:[0, 1, 2, 3]Consulta la potencia de transmisión de la antena.
AT+POWE3OK+Set:[Índice]Cambia la potencia: 0 (-23dBm), 1 (-6dBm), 2 (0dBm), 3 (+6dBm - Máximo alcance).
AT+SLEEPOK+SLEEPSignifica que estaba despierto y lo obligas a dormir, es decir permanece dormido hasta que recibe una señal y por tanto consume menos
AT+SLEEPOK+WAKESignifica que estaba dormido y lo obliga a despertar, es decir, permanece despierto y por tanto consume más
Nota sobre los clones: Si tu módulo es un clon, la sintaxis puede variar ligeramente sustituyendo el signo + 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óvil

 
La 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