Bluetooth LE - CC2541 SOC /HM-10

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
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





















