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 acondicionamento de la señal de transmision 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 vex que se han conectado al módulo desde la tablet/móvil se pueden intercambier mensajes con la PC.

y la consola de Arduino

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. https://e2e.ti.com/support/wireless-connectivity/bluetooth/f/538/t/812294

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

 

 

 

LoRa 915MHz módulos

Módulos de prueba LORA a 915MHz: módulos de radio, los módulos de desarrollo y módulos gateway

Todos se basan en los chips del fabricante Semptech.

https://www.semtech.com/products/wireless-rf/lora-transceivers

Módulos de radio – Lora Sx1276

Son de largo alcance a 915MHz y con pines compatible con 3-5v.

La comunicación con el módulo y un microcontrolador se realiza mediante protocolo SPI.

En éste modo se facilita la conexión directa con módulos arduino a 5V, al traer convertidor de señal de 3.3 a 5V bidireccional.

Una recomendación es conectarlos y encenderlos siempre con la antena conectada.

La configuración de pines se muestra en la figura.

Módulos de desarrollo con ESP32

También se puede usar los módulos Lora emparejados con ESP32 como microcontrolador. Aportan conexión a WIFI y viene en varias configuraciones, lo más relevante es que traen antenas de 915MHz

https://heltec.org/project/wifi-lora-32/

El módulo de desarrollo facilita realizar pruebas con tan solo unos cuantos elementos, tiene conexión USB para programación o acceso de datos y una pequeña pantalla para visualizar mensajes de estado.

otro modelo dle mismo fabricante es el Wireless-Stick-Lite que es muy semejante al anterior, pero no incorpora la pantalla OLED.

https://heltec.org/project/wireless-stick-lite/

Módulos para Gateway

Los módulos para gateway permiten operar simultaneamente con varios canales, requieren añadir un controlador implementado con un Raspberry Pi. Se pueden usar para conectarse a un gestor de gateways, por ejemplo TTN o uno implementado de forma privada con elementos abiertos como ChirpStack.

https://heltec.org/project/ht-m01/

Conexión USB-TTL para Arduino IDE

Para subir las instrucciones (programar) el ESP8266 desde la computadora usando un puerto USB, es necesario disponer de un módulo USB-TTL. La conexión también es util para obtener los datos desde el «monitor serial» del IDE Arduino.

Para comunicarse con el ESP8266 se requiere conectar los cables de:

  • transmisión TX
  • recepción RX
  • Tierra GND

El módulo USB-TTL de preferencia debe tener entre los pines de  conexión, uno de 3.3v semejante al mostrado en la imagen. El pin 3V3 es usado en caso de necesitar alimentar el módulo ESP8266. Sin embargo, en los dispositivos usados se encontró que la corriente proporcionada no es suficiente para el funcionamiento del dispositivo.

Revisar las opciones de carga de programa en la sección de «IDE Arduino con ESP8266»

 

Fuente de alimentación a 3.3VDC

1. Consideraciones de diseño

La alimentación de energía de los dispositivos con ESP8266 es a 3.3V.

Para la mayor parte de los diseños se realiza desde la alimentación de energía con 110V AC, por lo que es necesario usar un regulador de voltaje para llegar hasta a 3.3V DC que es el voltaje de operación del ESP8266.

2. Componente HLK-PM03

HLK-PM03

Idealmente se puede usar un regulador HLK-PM03, que simplifica la fuente de alimentación.

Sin embargo inicialmente para el desarrollo no se encontró en el mercado local  y se analiza algunas opciones si se encuentra en un caso semejante.

3. Alternativas a componente HLK-PM03

Por fácilidad y  disponibilidad, la fuente de alimentación se realiza dos pasos:

  • Reducción de 110V AC a 5V DC
  • Reducción de 5V DC a 3.3V DC
3.1 Reduccion de 110VAC a 5VDC

El primer paso, 110V AC a 5V DC, se puede implementar con el circuito de un cargador de celular con salida USB.

En los módulos desarrollados, en algunos casos se ha usado solo la placa de circuito del cargador para optimizar espacio en la caja del dispositivo.

3.2  Reducción de 5VDC a 3.3VDC

Para el segundo paso es necesario un regulador de 5VDC a 3.3VDC como por ejemplo el LM1117-3.3V en formato componente o como módulo.

componente

 

módulo

Lo que disponga para el desarrollo del circuito no afecta al funcionamiento, solo el espacio usado en el protoboard o el destinado para la placa de circuito (PCB).

La opción de usar el módulo de 5VDC a 3.3VDC es la que más se ha usado en los diseños.

Sin embargo al principio no se tenía un módulo y se optó para el primer prototopo por curiosidad la alternativa de usar diodos para disminuir el voltaje hasta lo requerido. Los diodos en sentido directo tienen caidas de voltaje de 0.7 V, por lo que se usaron dos diodos en serie en sentido directo, se recomienda verificar el voltaje en operación empezando con 3 diodos.

Otra opciónes para 5V a 3.3V, usar un circuito con diodos zener.

3.3 Fuente para protoboard

Si la implementación la realiza solo en protoboard, puede un modulo regulador semenjante al mostrado, que permite seleccionar si la salida al protoboard es de 5VDC o 3.3VDC cambiando los jumpers.

La alimentación del módulo se puede realizar con una fuente igual ao mayor a 5VDC.

 

 

ESP8266 versión ESP07

La versión del módulo ESP-07 ofrece más puntos de conexión que la versión ESP-01. http://wiki.ai-thinker.com/_media/esp8266/docs/aithinker_esp_07_datasheet_en.pdfPara la implementación básica ser recomienda usar la versión con antena incorporada y una placa para adaptar el módulo.

La placa permite conectarlo a un protoboard, pues la separación entre conectores del módulo es pequeña (2 mm).

Una de las ventajas del ESP-01 es convertidor Analógico-Digital (pin ADC), que tiene un rango de trabajo entre 0 y 1 voltio con pasos valorados entre 0-1023 (10 bits).

El pin ADC permite por ejemplo obtener lecturas de estado de voltaje de las baterias, obtenido con un divisor de voltaje  para asegurar que el voltaje máximo no supere 1V .

IDE Arduino

Para incorporar la tarjeta al programa IDE Arduino se se realizan los mismos que para la versión ESP-01, seleccionando la placa ESP8285.

Referencia: http://wiki.ai-thinker.com/_media/esp8266/docs/aithinker_esp_07_datasheet_en.pdf

 

ESP8266 versión ESP01

Distribución de Pines

Referencias: https://www.espressif.com/sites/default/files/esp8266-technical_reference_en_0.pdf

Para usa el módulo, se requeire además de alimentacion en VCC a 3.3V y GND  conectar los pines de configuración de modo de operación.

Estados de pines de configuración

Los estados de los pines de configuración son ALTO (HIGH) o BAJO(LOW).

El estado ALTO se establece conectar el pin a VCC de 3.3VDC mediante una resistencia de 10KΩ (pullup) para una corriente de activación de 0.033 mA.

El estado Bajo se realiza conectando el pin a GND con 0VDC.

Modo de Operación

Cargar o Ejecutar un programa se establece con estados de voltaje en los pines GPIO0 y GPI02.

Modos de operación
GPIO0 GPIO2 CH_PD RESET
 Cargar programa LOW HIGH HIGH HIGH
Ejecutar Programa HIGH HIGH HIGH HIGH

Observe que, el módulo ESP-01S, tiene incorporadas las resistencias a estado ALTO (HIGH,pull up), por lo que no es necesario añadirlas en éste caso.

Conexión a 3.3V

La alimentación de energía para el dispositivo es de 3.3V, preferible con una fuente o módulo de 3.3v .

Considere que puede resultar insuficiente si alimenta desde la salida de 3.3V de un módulo  USB-Serial con salida de 3.3V o desde el pin Arduino 3.3V.

La falta de energía en el dispositivo se presenta como error en la conexión al intentar subir instrucciones desde el IDE Arduino: «sincronizar la memoria del dispositivo.»

Si no dispone de la fuente externa, puede  al usar dos dispositivos USB-TTL para:

1. Alimentación (Vcc y GND)
2. Carga de datos (Tx y Rx)

Recuerde unir las referencias de cada dispositivo USB-Serial GND.