GIRNI

Grupo de Investigación de Redes de iNformación Inalámbricas

Módulos Bluetooth

Bluetooth LE - CC2541 SOC /HM-10

https://e2e.ti.com/support/wireless-connectivity/bluetooth/f/538/t/812294

CC2541SOC es el componente principal de los módulos HM-10 genéricos que se encuentran en el mercado local.

El fabricante del chip es Texas Instruments con algunas versiones CC2540/2541.

https://www.ti.com/product/CC2541

Hoja de datos de CC2541

https://www.ti.com/lit/ds/symlink/cc2541.pdf?ts=1591538569573&ref_url=https://www.ti.com/product/CC2541


Módulo HM-10

En el mercado se encuentran la versión como módulo HM-10 presentado como módulo Bluetooth LE en varios formatos genéricos o como módulo para "arduino".

https://e2e.ti.com/support/wireless-connectivity/bluetooth/f/538/t/812294

 


 HM-10 Serial con Arduino a PC/Tablet/móvil

Los módulos HM-10 permiten usar comunicación serial usando instrucciones AT, tanto para configuración como para mensajería de datos.

Para conectase con el módulo desde el computador se puede usar un arduino como intermediario, pudiendo así configurar el dispositivo. Posteriormente, usando un esquema semejante se puede ampliar para enviar/recibir un mensaje a un dispositivo, por ejemplo una tablet o un móvil.

Referencia: https://people.ece.cornell.edu/land/courses/ece4760/PIC32/uart/HM10/DSD%20TECH%20HM-10%20datasheet.pdf


Conexión con Arduino

La comunicación hacia el HM-10 se realiza con un computador y un Arduino, aprovechando la conexión serial del módulo y enviando instrucciones AT.

El módulo tiene dos pines para alimentación Vcc y GND y los dos pines de comunicación Tx y Rx.

La conexión con el Arduino requiere el acondicionamiento de la señal de transmisión Tx desde el Arduino a 5V hacia el módulo HM-10 a 3.3V mediante un divisor de voltaje. El divisor de voltaje se implementa con las resistencias R1 de 1KΩ y R2 de 2.2KΩ.


Configuración Serial - Arduino

La configuración serial se puede realizar mientras el módulo no se encuentre conectado o "emparejado" a otro dispositivo.

El led del módulo parpadea en esta modalidad, indicando que no está emparejado y contesta instrucciones de configuración.

La terminal o "monitor de Arduino" se debe configurar a ala misma velocidad que lo indicado en la sección script de Arduino, y se usa envío de NL y CR (nueva linea y enter)

Ejemplos de instrucciones enviadas desde "monitor de Arduino"

AT+VERSION

+VERSION=Firmware V4.2.0,Bluetooth V4.0 LE

AT+NAME

+NAME=BT05

AT+ROLE

+ROLE=0

AT+HELP

********************************************************************
* Command             Description			           *
* ---------------------------------------------------------------- *
* AT                  Check if the command terminal work normally  *
* AT+RESET            Software reboot				   *
* AT+VERSION          Get firmware, bluetooth, HCI and LMP version *
* AT+HELP             List all the commands		           *
* AT+NAME             Get/Set local device name                    *
* AT+PIN              Get/Set pin code for pairing                 *
* AT+PASS             Get/Set pin code for pairing                 *
* AT+BAUD             Get/Set baud rate		                   *
* AT+LADDR            Get local bluetooth address		   *
* AT+ADDR             Get local bluetooth address		   *
* AT+DEFAULT          Restore factory default			   *
* AT+RENEW            Restore factory default			   *
* AT+STATE            Get current state				   *
* AT+PWRM             Get/Set power on mode(low power) 		   *
* AT+POWE             Get/Set RF transmit power 		   *
* AT+SLEEP            Sleep mode 		                   *
* AT+ROLE             Get/Set current role.	                   *
* AT+PARI             Get/Set UART parity bit.                     *
* AT+STOP             Get/Set UART stop bit.                       *
* AT+START            System start working.			   *
* AT+IMME             System wait for command when power on.	   *
* AT+IBEA             Switch iBeacon mode.	                   *
* AT+IBE0             Set iBeacon UUID 0.            	           *
* AT+IBE1             Set iBeacon UUID 1.            	           *
* AT+IBE2             Set iBeacon UUID 2.            	           *
* AT+IBE3             Set iBeacon UUID 3.            	           *
* AT+MARJ             Set iBeacon MARJ .            	           *
* AT+MINO             Set iBeacon MINO .            	           *
* AT+MEA              Set iBeacon MEA .            	           *
* AT+NOTI             Notify connection event .                    *
* AT+UUID             Get/Set system SERVER_UUID .            	   *
* AT+CHAR             Get/Set system CHAR_UUID .            	   *
* -----------------------------------------------------------------*
* Note: (M) = The command support slave mode only. 		   *
* For more information, please visit http://www.cyobd.com          *
* Copyright@2013 www.cyobd.com.   All rights reserved.		   *
********************************************************************

Algunas instrucciones pueden variar en otros módulos con diferente firmware.
Lo presentado es solo un ejemplo de lo que se puede hacer en éste módulo de www.cyobd.com


Instrucciones Arduino

/* Comunicación Serial por Bluetooth
Basada en: https://www.arduino.cc/en/Tutorial/SoftwareSerialExample
*/

#include <SoftwareSerial.h>
int Rx = 10; //conexión al módulo
int Tx = 11;
SoftwareSerial moduloBtLE(Rx,Tx);

void setup(){
  
  int baudiosArduino = 9600;
  // Serial USB
  Serial.begin(baudiosArduino);
  while (!Serial) {
    }// espera conexión
  Serial.println("\n USB <->PC, Listo..!!");
  
  //Puerto Serial Módulo Bluetooth
  int baudiosBtLE = 9600;
  moduloBtLE.begin(baudiosBtLE);
  moduloBtLE.println("Listo Bluetooth a Tablet/móvil");
  delay(1000);
  moduloBtLE.write("AT+VERSION");
  delay(1000);
}

void loop(){
  // recibe mensaje Bluetooth y envia por USB a PC
  if (moduloBtLE.available()){
    Serial.write(moduloBtLE.read());
    }
  // envia mensaje Serial-USB a Bluetooth
  if (Serial.available()){
    moduloBtLE.write(Serial.read());
    }
  }

Conexión a tablet/móvil

Se realizó la prueba en una tablet con Arduino, descargando el programa "Serial Bluetooth terminal" desde la tienda Play Store de Google.

Referencia: https://play.google.com/store/apps/details?id=de.kai_morich.serial_bluetooth_terminal&hl=es_EC

El siguiente paso en la tablet es usando la aplicación, realizar una búsqueda de dispositivos, menú/dispositivos/scan, y así encontrar el que tiene el nombre de la sección anterior donde se pide AT+NAME, en este caso: "BT05".

una vez que se han conectado al módulo desde la tablet/móvil se pueden intercambier mensajes con la PC.

y la consola de Arduino