Diseño de Aplicaciones Wireless Embebidas con PIC®

Page 1

DISEテ前 DE APLICACIONES WIRELESS EMBEBIDAS CON PICツョ

Ing. Alejandro Airoldi

1


Airoldi, Alejandro Anibal Diseño de Aplicaciones Wireless Embebidas con PIC® / Alejandro Anibal Airoldi. - 1a ed. . – Ciudad Autónoma de Buenos Aires : mcelectronics, 2015. 296 p. ; 23x18 cm ISBN 978-987-3702-04-4 1. Ingeniería Electrónica. 2. Microcontroladores. I. Título. CDD 621.3

Fecha de catalogación: Septiembre de 2015 © mcelectronics Hecho el depósito que marca la ley 11.723 Todos los derechos reservados. Ninguna parte de este libro, incluido el diseño de la portada, puede reproducirse, almacenarse o transmitirse de ninguna forma ni por ningún medio, sea este eléctrico, químico, mecánico, óptico, de grabación o de fotocopia, sin la previa autorización escrita por parte de mcelectronics. La infracción de los derechos mencionados puede ser constitutiva de delito contra la propiedad intelectual. La editorial no se pronuncia ni expresa implícitamente respecto a la exactitud de la información contenida en este libro, razón por la cual no puede asumir ningún tipo de responsabilidad en caso de error u omisión. Las marcas mencionadas son propiedad exclusiva de sus registradores legales.

Colaboraron en la redacción: Ing. Ariel Coria Ing. Fernando Tagliaferri Ing. Agustín Pelaez Ing. Santiago Favaro Mención: Luis Alejandro Coria Corrección ortográfica y gramatical: Patricia Calzada Valle Fotografía: Magalí Izaguirre Guido Martini Diseño de Portada: 54Designers.com - Comunicación + Innovación

Seguinos en las redes sociales /mcelectronics (C) 2015

2


A nuestras familias y amigos por el apoyo incondicional.

3


4


DISEÑO DE APLICACIONES WIRELESS EMBEBIDAS CON PIC® SERVICIO DE AYUDA AL LECTOR Por favor no dude en escribirnos por consultas, sugerencias o para solicitar información adicional: info@mcelectronics.com.ar

PROGRAMAS Y RECURSOS DE MICROCHIP Para poder compilar los programas propuestos necesita el entorno de desarrollo MPLAB X, el compilador XC8 para PIC18, el compilador XC30 para los dsPIC y el XC32 para PIC32. Todas las herramientas se pueden obtener en forma gratuita desde la web de Microchip: www.microchip.com/mplabx CLASES ON-LINE EN VIVO Ofrecemos clases grupales o bien clases individuales a través de Internet con un ingeniero de aplicación. Visítenos para conocer el calendario completo: www.mcelectronics.com.ar WEB DEL LIBRO En la web puede encontrar recursos adicionales, ejemplos de código, tutoriales, videos y notas de aplicación. No deje de consultarla para complemetar el contenido del libro.

5


6


SUMARIO MPLAB® X Y CODE CONFIGURATOR Descubra las características más importantes del nuevo IDE de Microchip, el MPLAB X. Aprenda a utilizar el MPLAB Code Configurator, para generar el código de configuración de forma gráfica e intuitiva.

11

IBEACON Y BLUETOOTH SMART CON PIC® Aprenda a diseñar un sistema de comunicaciones Wireless Bluetooth utilizando los nuevos módulos RN4020 con soporte para iBeacon.

37

INTERNET OF THINGS WI-FI Se explicarán los principales conceptos y consideraciones necesarias para que nuestros productos y aplicaciones estén en la nube. Estudiaremos en detalle los comandos del nuevo módulo RN1723 de Microchip.

91

APLICACIONES DE RASTREO Y TELEMETRÍA CELULAR Diseñe un sistema 3G/GPS utilizando microcontroladores PIC® de 8 bits. Ejemplos de comunicaciones por GPRS y 3G para transmitir datos, imágenes y video.

161

CONECTIVIDAD RF CON LORA Desarrolle aplicaciones con la tecnología LoRa™. Estos módulos RF de Microchip tienen un alcance de hasta 15Km y trabajan en modo punto a punto o bien a través de un Gateway para subir la información a la nube.

253

7


.

8


ÍNDICE MPLAB® X Y CODE CONFIGURATOR

11

NUEVOS COMPILADORES DE MICROCHIP CREANDO UN PROYECTO EN MPLAB CODE CONFIGURATOR

15 16 29

IBEACON Y BLUETOOTH SMART CON PIC®

37

SMART BLUETOOTH MÓDULO RN4020 ESQUEMÁTICO COMPLETO PROGRAMA USB USART DRIVER USB APLICACIÓN DE SMART BLUETOOTH APLICACIÓN MLDP MONITOR DE PULSO CARDÍACO IBEACON

41 48 50 53 62 64 75 78 86

INTERNET OF THINGS WI-FI

91

APLICACIONES IOT PLACA SMART WIFI MÓDULO RN1723 - COMANDOS BÁSICOS CONEXIÓN A UNA RED WI-FI ACCESS POINT DESDE EL RN1723 CLIENTE HTML PROGRAMA USB USART SERVIDOR WEB DE CONFIGURACIÓN EJEMPLO DE APLICACIÓN CÓDIGO DE EJEMPLO

95 97 104 106 110 111 114 124 129 137

9


APLICACIONES DE RASTREO Y TELEMETRÍA CELULAR

161

ESQUEMA GENERAL LAYOUT DE COMPONENTES EL MICROCONTROLADOR MÓDULO GSM Y GPS SIM5320A CONEXIONES DEL MÓDULO GSM CONSIDERACIONES IMPORTANTES CÁLCULO DE LA LINEA DE TRANSMISIÓN COMANDOS AT BÁSICOS MÓDULO GPS TRAMA NMEA DEL MÓDULO GPS AMPLIFICADOR DE BAJO RUIDO ACELERÓMETRO Y OTROS DISPOSITIVOS ESQUEMÁTICO EJEMPLOS Y APLICACIONES - ESTRUCTURA EJEMPLOS Y APLICACIONES - CÓDIGO

166 169 171 174 175 177 179 182 184 187 191 194 198 205 219

CONECTIVIDAD RF CON LORA

253

SMART LORA MÓDULO RN2483 PLACA DE DESARROLLO CONEXIONES AL MCU

257 258 259 261

ANEXOS

263

DISEÑO DE LÍNEAS DE TRANSMISIÓN DESARROLLO DE APLICACIONES MÓVILES PARA IOS

265 279

BIBLIOGRAFÍA

293

10


1. MPLAB速X

11


12


MPLAB®X GUÍA VISUAL

13


14


NUEVOS COMPILADORES DE MICROCHIP Recientemente Microchip presentó una nueva línea de compiladores para toda su gama de microcontroladores. El compilador XC8 es una versión mejorada HI-TECH por Microchip para que esté totalmente integrado a su plataforma del MPLAB, y tiene todos los recursos y formato que el resto de los compiladores de la familia de Microchip (MPLAB C18 y PICC). El compilador se caracteriza por ser ANSI C, y si bien no es poderoso en cuanto a funciones embebidas, como el PCW de CCS; el XC8, le permite una programación totalmente transparente, ofreciendo al programador estándar de computadoras poder migrar fácilmente a programar microcontroladores PIC, o al programador Assembler, poder seguir trabajando como lo hacía pero de forma mucho más simple. Denominación de los nuevos compiladores y las familias que abarcan: • • •

XC8 para PIC10F,PIC12F,PIC16F,PIC16F1X y PIC18F XC16 para PIC24F,PIC24H,dsPIC30F,dsPIC33 XC32 para PIC32

Microchip ofrece sus compiladores en 3 modos: • • •

Versión Standard: dura 45 días y tiene una perfomance media, la relación de compresión es aceptable (paga licencia luego de los 45 días) Versión PRO: dura 45 días y tiene una altísima perfomance con la mayor relación de compresión de código (paga licencia luego de los 45 días) Versión Lite: duración ilimitada, sin restricciones de ningún tipo, sin embargo su relación de compresión es la mitad que la versión PRO, es decir que el mismo código compilado en la versión Lite ocupa, en la memoria de programa, el doble de lo que ocupa la versión PRO.

Otra característica importante es que al ser de Microchip, la actualización es constante, y la documentación es muy completa. El compilador de C XC8 se caracteriza por su sencillez, es muy fácil migrar del lenguaje Assembler al Lenguaje C. El programador puede sentir una gran comodidad al programar código encontrando la simplificación de muchas estructuras que antes debían realizarse por medio de extensas rutinas Assembler, y en ningún momento siente la falta de control sobre el hardware ya que puede acceder a cualquier BIT y registro SFR por medio de su etiqueta como figura en el DATA SHEET. Son estas las razones que nos llevan a recomendar este compilador y no otro, a la hora de querer migrar a un lenguaje de alto nivel.

15


CREANDO UN PROYECTO EN MPLAB X El Lenguaje de Programación C, es un lenguaje que reúne todas las características que presentan los lenguajes de alto nivel y los de bajo nivel, uno puede tener control de su hardware a nivel BIT y al mismo tiempo también puede realizar cualquier tipo de operación matemática como si estuviera delante de una calculadora científica. Esto hace que hoy en día se lo considere un lenguaje de nivel intermedio. El compilador XC8 de Microchip (que en adelante simplemente lo llamaremos XC8), utiliza todas las etiquetas originales de los DATA SHEET, para hacer referencia a los BITs y los SFRs de los MCU. De esta forma no debe uno estar recordando formas especiales para configurar los puertos I/O o para enviar datos a los mismos. Tampoco tiene implementadas funciones para controlar su hardware, lo cual también simplifica lo que debe recordar el programador. Simplemente, el programador debe tener presente las palabras claves del lenguaje C y conocer el funcionamiento del HARDWARE del MCU. El compilador trae una extensa librería de funciones ANSI C, adaptadas a la realidad del MCU, que le permite realizar cualquier conversión de datos que requiera, o procesamiento de funciones matemáticas. Es como sentarse a programar delante de una computadora con el compilador Borland C. Por ello es tan sencillo para los programadores ANSI C utilizar el compilador XC8. Vamos a comenzar por tanto a crear nuestro primer programa en Lenguaje C. Lo primero que haremos será ejecutar el MPLABX, ya que el compilador XC8 esta integrado al mismo. Lo primero que usted debe tener instalado es el MPLABX versión 1.20 en adelante. Recomendamos esta versión ya que detecta automáticamente los compiladores instalados. Para instalar el MPLABX usted debe tener instalada la máquina virtual de java versión 6.24 en adelante, la cual se consigue en el sitio oficial de java (si usted tiene Windows XP SP3 o WINDOWS 7, no necesita actualizar JAVA, ya que está incluido en el paquete). Una vez ejecutado el MPLABX aparecerá la siguiente pantalla:

16


Vamos a crear nuestro primer programa, para ello con el mouse pulsaremos el botón de New Project:

Se desplegará una nueva ventana mediante la cual seleccionamos el tipo de proyecto que queremos realizar:

Que para nuestro caso es del tipo Standalone Project (“Proyecto independiente”). A continuación pulsamos el botón NEXT para pasar al siguiente paso, dónde seleccionamos la familia de microcontrolador y su modelo:

17


Para hacerlo hacemos clic sobre el menú desplegable Family y seleccionamos el ítem : MidRange 8-bit MCU (PIC12/16/MCP) dónde se concentran los microcontroladores de la familia PIC10F, PIC12F,PIC16F y PIC16F1; ya que nuestro primer proyecto lo realizaremos para PIC16F887:

Seleccionamos luego el modelo de microcontrolador haciendo clic sobre el menú desplegable Device y buscamos, moviendo el cursor, el PIC16F887:

18


Luego pulsamos el botón siguiente para pasar al tercer paso. Este paso es opcional y depende del modelo de microcontrolador, ya que en algunos debe seleccionarse un Header especial (PIC Linea media Mejorada conocidos como PIC16F1XXX), y es por ello que en la mayoría de los microcontroladores, dicho paso es pasado por alto de forma automática y el wizard pasa al paso 4. En este se selecciona la herramienta de programación, la cual debe estar conectada a la máquina antes de ingresar al mismo, para que el entorno la detecte automáticamente. En nuestro caso usaremos el programador PICKIT2, ampliamente difundido en Argentina, tanto en su versión original, como en su versión local fabricada por mcelectronics bajo Licencia de Microchip con el nombre MCE PDX. Para seleccionar el programador hacemos clic con el Mouse sobre el nombre que se detecta a continuación del título del mismo, una vez que este ha sido detectado por Windows:

19


Si observa podrá ver que los programadores reconocidos por el MPLABX son el PICKIT2 en adelante y han quedado fuera los viejos programadores como el PICSTAR PLUS y el ICD2. El PICKIT2 aparece con luces amarillas, lo cual significa que su soporte tanto en modo programador como debugger se encuentra en modo Beta. Hacemos entonces clic sobre el botón NEXT y pasamos al quinto paso dónde seleccionaremos el compilador.

Observe que nos aparecen todos los compiladores instalados que pueden programar a estos microcontroladores. Dependiendo los que usted tenga instalados esta lista variará. Nosotros seleccionamos con el Mouse el XC8. La versión MPLABX 1.20 automáticamente detecta los compiladores, sin embargo las versiones anteriores, debía ser instalado a mano, y el proceso era engorroso. Por ello le recomendamos que usted instale esta nueva versión de MPLABX. En el siguiente paso crearemos una carpeta dónde hubicaremos nuestro primer proyecto:

Como siempre es más cómodo trabajar sobre el escritorio, generaremos una carpeta general que contendrá todos nuestros proyectos realizados en MPLABX.

20


Para ello haremos clic sobre el Botón Browse… y se desplegará una ventana que nos permitirá ubicar el lugar dónde colocar nuestra carpeta del proyecto y que llamaremos PoyectosMPLABX:

Seleccionamos el Escritorio y luego hacemos clic sobre el icono de la creación de Nueva Carpeta:

Y le ponemos el nombre a la misma haciendo clic con el Mouse debajo de la carpeta creada, con lo cual debería quedarnos de la siguiente forma:

Luego hacemos clic sobre el botón Abrir y colocamos el nombre de nuestro primer proyecto sobre la ventana Project Name:

21


Observe que en la medida que uno escribe el nombre del proyecto, en la ventana Project Folder: el entorno crea una carpeta, dentro de la carpeta de proyectos, de forma automática y que lleva el nombre de nuestro proyecto con el agregado de .X, lo cual lo destaca como proyecto realizado en MPLABX. Para terminar, simplemente hacemos clic en el Botón Finís, lo cual cierra el wizard y despliega ya nuestro proyecto sobre la ventana principal:

Nuestro Proyecto1 ya esta creado y sólo debemos agregar el código. Observe el nombre del proyecto, debajo del cual se organizan las carpetas, como lo hacía el MPLAB 8.X o anterior. Agregaremos ahora nuestro código el cuál adjuntaremos a la carpeta Source Files. Para esto son muy útiles las plantillas que trae el entorno para los diferentes compiladores embebidos. Por tanto para seleccionar una de estas plantillas haremos clic con el botón derecho del Mouse sobre Source Files y se desplegará una ventana:

22


Y seleccionaremos el ítem New y luego dentro de este, seleccionamos Other… lo cual nos desplegará una nueva ventana, dentro de la que seleccionaremos Microchip Embedded

Luego haremos doble clic sobre el mismo, esto desplegará el árbol de subdirectorios y seleccionaremos el del XC8, dentro del cual seleccionamos la plantilla main.c

23


Y hacemos clic en Next, lo que despliega una nueva ventana d贸nde pondremos el nombre del archivo fuente:

Y finalmente pulsamos Finish, lo cual cierra la ventana y volvemos a la principal, d贸nde nos aparece nuestro programa agregado a la carpeta de Source Files y desplegado en la ventana de trabajo:

24


Para que esta plantilla se adapte perfectamente a la normativa del compilador XC8 sólo modificaremos la línea 9 dónde aparece la siguiente “directiva”: #include “pic.h” Por la que corresponde: #include <xc.h> Y a continuación escribiremos nuestro primer código en XC8 nativo.

25


#include <xc.h> #define _XTAL_FREQ 4000000 __CONFIG(FOSC_INTRC_NOCLKOUT & WDTE_OFF & PWRTE_ON & LVP_OFF & CP_OFF & CPD_OFF & BOREN_ON); int main(void) { ANSEL=0; ANSELH=0; PORTB=0; TRISB=0x00; while(1) { RB0=!RB0; __delay_ms(500); } }

return 0;

Este código simplemente provocará que un LED conectado al PIN RB0 titile de forma continua con un intervalo de 500 ms. Una vez escrito este programa usted deberá compilarlo pulsando el botón Clean and Build Project (identificado con el ícono de un martillo y una pala)

26


Y si no cometió errores al escribir el código, deberá aparecerle el mensaje de BUILD SUCCESSFUL en la ventana inferior del entorno y que se denomina Output:

Para pasar este código al microcontrolador simplemente haga clic con el Mouse sobre el botón Make and Program Device:

En el próximo capítulo veremos como realizar un proyecto similar con el MPLAB Code Configurator.

27


28


MPLAB速 CODE CONFIGURATOR

29


30


CODE CONFIGURATOR El Code Configurator es un plug-in muy interesante que nos permite generar código a partir de una interface visual. Esta interface permite configurar una gran cantidad de periféricos del microcontrolador. Actualmente está disponible para las familias de rango medio pero Microchip espera ampliar su compatibilidad hasta PIC32. Algunas características destacables: El MPLAB® Code Configurator genera código escrito en C fácil de entender. Se inserta automáticamente a su proyecto. Habilita, configura y utiliza un amplio conjunto de periféricos para varios dispositivos. Integrado en MPLAB® X IDE El Code Configurator es un enfoque completamente nuevo para el problema de la configuración de periféricos de forma gráfica para un proyecto. A diferencia de sus predecesores, el enfoque modular significa que es fácil de modificar, administrar, regenerar módulos y añadir periféricos. Para poder utilizar el Code Configurator debemos instalar primero el plug-in correspondiente. Para ello vamos Tools > Plugins en el MPLAB X.

31


Hacemos clic en Available Plugins y luego lo instalamos como muestra la figura. Usando MPLAB® Code Configurator usted puede añadir código para un periférico a su proyecto existente, o puede usar el MPLAB® Code Configurator para empezar un proyecto nuevo. Además todos los módulos necesarios para un proyecto incluyendo main.c, módulos de inicialización y módulos individuales para cada periférico. Genera funciones de utilidad para cada periférico que pueden ser utilizados en su aplicación.

32


Una vez instalado el plug-in debe reiniciar el MPLAB X para que los cambios tengan efecto. Vamos a realizar un nuevo proyecto utilizando el Code Configurator. Para ello creamos un nuevo proyecto de la forma tradicional y luego hacemos clic en Tools > Embedded > MPLAB Code Configurator.

En el panel de proyectos aparece una nueva pestaña llamada MPLAB Code Configurator Resources Management. Desde aquí es posible configurar en forma gráfica los periféricos del PIC. A efectos ilustrativos seleccionamos el PIC18F46K20.

33


Nótese que es posible seleccionar los distintos canales analógicos, los pines de entrada/salida, los pines de la USART y demás periféricos de comunicaciones. Por ejemplo, dentro de la pestaña System, seleccionamos el ECCP para activar y configurar el módulo PWM.

En este ejemplo estamos configurando el Duty Cycle del PWM al 50%.

Una vez configurados todos los periféricos podemos generar el código con el botón "Generate Code" del panel principal. En caso de que el main.c no esté creado, el Code Configurator lo creará automáticamente. Desde luego es posible modificar el main con nuestras propias funciones y volver a ejecutar el Code Configurator para agregar o modificar la configuración de los periféricos.

34


NOTAS:

35


36


2. BLUETOOTH SMART CON PIC速

37


38


iBEACON Y BLUETOOTH SMART CON PIC® APRENDA A DISEÑAR UN SISTEMA DE COMUNICACIONES WIRELESS BLUETOOTH UTILIZANDO LOS NUEVOS MÓDULOS RN4020 CON SOPORTE PARA iBEACON.

39


40


SMART BLUETOOTH

Se denomina Bluetooth al protocolo de comunicaciones inalámbricas diseñado especialmente para conectar dispositivos de bajo consumo, que requieren corto alcance de emisión y basados en transceiver de bajo costo, con una PC o un teléfono móvil. La transmisión de datos entre diferentes dispositivos mediante un enlace Bluetooth se realiza en la banda ISM (banda de radiofrecuencia reservada para uso no comercial en la industria, ciencia y medicina) de los 2,4 GHz. Los dispositivos Bluetooth tienen una dirección única de 48 bits y se clasifican como "Clase 1", "Clase 2" o "Clase 3" en referencia a su potencia de transmisión. En la Tabla 1 se puede ver un resumen de la clasificación de los dispositivos Bluetooth según su potencia de transmisión. Clase Clase 1 Clase 2 Clase 3

mW 100 2.5 1

Máxima Potencia

dBm 20 4 0

Tabla 1: Clases de dispositivos Bluetooth

Rango ~100m ~10m ~1m

El protocolo de comunicación Bluetooth está definido en IEEE 802.15.1 y actualmente los dispositivos están gestionados por un grupo de interés especial de Bluetooth (denominado SIG por sus siglas). Cualquier compañía que incorpora la tecnología inalámbrica Bluetooth en productos, utilizando la tecnología para ofrecer bienes y servicios debe convertirse en un miembro de Bluetooth SIG, que puede hacerse de forma gratuita. Bluetooth de bajo consumo (BLE) Los dispositivos Bluetooth de bajo consumo (BLE por las siglas Bluetooth Low Energy), a veces denominados “Smart Bluetooth”, es una subclasificacion del clásico Bluetooth y fue introducido como parte de las especificaciones introducidas en la v4.0 de Bluetooth. Estas subclasificacion completa toda una nueva línea de dispositivos Bluetooth con interesantes características que aprovechan los desarrollos de las nuevas tecnologías móviles. A continuación veremos cómo funcionan estos dispositivos para indicar su presencia y poder conectarse a ellos para iniciar el envió y recepción de datos.

41


Plataformas que soportan BLE El soporte de Bluetooth v4.0 y los dispositivos de bajo consumo (que son una subclasificación de Bluetooth v4.0) están disponibles por la mayoría de las plataformas enumeradas a continuación. • IOS5+ (Preferible IOS7+) • Android 4.3+ • Apple OS X 10.6+ • Windows 8 (XP, Vista y 7 solo soportan Bluetooth 2.1) GAP GAP es el acrónimo de Generic Acces Profile, el cual provee los mecanismos de control y anuncio en los dispositivos Bluetooth. Las definiciones incluidas en GAP hacen posible que el dispositivo se anuncie hacia los demás elementos que existen en el mundo exterior de manera que sean visibles por otros dispositivos y determina como estos pueden interactuar entre sí. Roles de los dispositivos El Generic Acces Profile define varios tipos de roles para los dispositivos Bluetooth, pero estos roles están implementados bajo el concepto en que los dispositivos pueden actuar como un rol Central o Periférico. • •

Rol Periférico: Normalmente los dispositivos que cumplen con este rol en la comunicación son los que tienen un bajo poder de procesamiento, son pequeños y tienen un bajo consumo. Rol Central: Los dispositivos que desempeñan el rol central en la comunicación son básicamente los teléfonos móviles, tablets u ordenadores, los cuales cuentan con un gran poder de procesamiento y mucha más memoria.

Advertising Data y Scan Response Data Existen dos modos diferentes de realizar el envió de datos en un anuncio por parte del dispositivo en la definición GAP. Los datos pueden ser enviados en el Payload de los mensajes Advertising Data y en los Scan Response. Ambos Payloads son idénticos y pueden almacenar hasta 31 byte de datos, pero solo los mensajes Advertising Data son obligatorios para la norma, ya que esta contiene siempre la información útil que constantemente se está transmitiendo desde el dispositivo Periférico al dispositivo Central. Los datos de los mensajes Scan Response actualmente son opcionales y son utilizados para enviar una secuencia de datos secundaria a pedido del dispositivo central. Esto permite a los desarrolladores de equipos ingresar datos adicionales que se entregan en el momento de realizar el anuncio, como indicar el nombre del dispositivo, por ejemplo.

42


Proceso de anunciación de un dispositivo En la Figura 1 se puede visualizar el proceso de anunciación por parte de un dispositivo Periférico a un equipo Central y de cómo entran en juego los mensajes del tipo Advertising Data y Scan Data. Un dispositivo Periférico puede definir el intervalo de Anuncio, y en cada tiempo en que se alcance este intervalo de anuncio, se enviara un paquete de datos llamado Advertising Data. A intervalos largos de anuncios, el dispositivo reduce considerablemente el consumo, pero el equipo es menos sensible a las respuestas si el intervalo de anuncio es de 2 segundos en lugar de 20ms por ejemplo.

Figura 1: Proceso de anuncio de un dispositivo Smart Bluetooth

Si algunos de los dispositivos que se encuentran escuchando estos mensajes de anuncio por parte del periférico está interesado en recibir los datos que agrega el mensaje Scan Payload (y a su vez está disponible en el dispositivo periférico), entonces es posible enviar un mensaje que indica que se requiere el Scan Payload del dispositivo, a lo cual este le responderá con los datos solicitados. Topología de redes Broadcast Mientras que la mayoría de los dispositivos utilizan el proceso de anuncio para realizar conexiones con el equipo de rol Central y generar el intercambio de datos estableciendo los servicios y características, hay situaciones en las que solo se requiere el envió de datos de anunciación nada más. El principal uso de este tipo de caso es cuando se requiere desde el periférico enviar datos a más de un dispositivo a la vez. Esto solo puede realizarse utilizando los paquetes de datos del mensaje Advertising Payload, ya que los datos enviados y recibidos en el modo conectado son solamente visibles entre los dos equipos. Al incluir una pequeña cantidad de datos personalizados en los 31 bytes del payload del mensaje Advertising o del Scan Payload, se puede utilizar un dispositivo periférico Bluetooth de bajo consumo para enviar datos en una sola dirección a cualquier dispositivo que se encuentre dentro

43


del rango de escucha, esta situación se ilustra en la Figura 2 . Esto es conocido como Broadcasting en dispositivos Bluetooth de bajo consumo.

Figura 2: Esquema de Broadcasting con Bluetooth de bajo consumo

Esta característica de la topología Broadcasting es aprovechada por la tecnología iBeacon de Apple, por ejemplo, en donde se insertan datos personalizados en el payload principal de los mensajes Advertising, utilizando más precisamente el campo Manufacturer Specific Data. Una vez que se encuentra establecida la conexión entre el dispositivo periférico y el central, el proceso de anunciación se detiene, lo que no permite el envió de mas paquetes Advertising, y en ese caso es necesario utilizar los servicios y características establecidos por la especificación GATT para entablar una comunicación entre ambos dispositivos. GATT GATT es el acrónimo de Generic Atribute Profile, y define de qué modo dos dispositivos Bluetooth de bajo consumo transfieren sus datos, haciendo usos de los conceptos Servicios y Características. Además se hace uso de un protocolo de datos genéricos llamados Attribute Protocol(ATT) en el cual se almacenan los Servicios, Características y datos relacionados en una simple tabla de consulta en cuya entrada se utiliza un ID de 16bits. Una vez que ya se encuentra establecida la comunicación entre los dos dispositivos, entra en juego los Servicio y atributos definidos por GATT, es decir, que ya tuvo que haber concluido la etapa de Anuncio y asociación de los dispositivos gobernado por las definiciones establecidas por GAP.

44


Una cuestión importante a tener en cuanta cuando se estudian los servicios y características descriptas en GATT es que la conexión entre el dispositivo periférico y el central es exclusiva, es decir, que solo puede haber una comunicación a la vez. De esta manera para que otro dispositivo pueda conectarse al periférico, primero debe desconectarse de su enlace actual. El establecimiento de una conexión es también la única manera de permitir una comunicación bidireccional, donde el dispositivo central puede enviar datos al periférico y viceversa. Topología de redes de los dispositivos ya conectados La Figura 3 explica como los dispositivos Bluetooth de bajo consumo interactúan en una red de dispositivos conectados. Un equipo periférico solo puede conectarse a un solo dispositivo central (como un teléfono móvil) a la vez, pero un dispositivo central puede conectarse a varios periféricos.

Figura 3: Topología de Red de los dispositivos conectados

Si se necesita el intercambio de datos entre dos dispositivos periféricos, será necesario realizar un sistema de pasaje de datos a través del dispositivo central. Una vez que ya se estableció la conexión entre un dispositivo periférico y un central, la comunicación puede ser bidireccional, esto es distinto al sistema de Broadcasting en GAP en donde solo se podía compartir información en una sola dirección utilizando los mensajes Advertising.

45


Transacciones a nivel GATT Un importante concepto que se debe entender en las transacciones GATT es la relación Cliente/Servidor. Un dispositivo Periférico es denominado un Servidor GATT, porque tiene almacenado un tabla de datos ATT, en donde se guardan los Servicios y Características definidas del dispositivo, y el Cliente GATT (en este caso es puede ser un teléfono móvil o una tablet) envía requerimientos al servidor para obtener información del mismo. Todas las transacciones GATT son iniciadas por el dispositivo maestro, el cliente GATT en este caso, y se espera la respuesta del dispositivo esclavo, el Servidor GATT. Cuando se establece una comunicación, el periférico sugiere un “intervalo de conexión” al dispositivo central. El dispositivo central tratara de reconectarse en todos los intervalos de conexión para saber si hay datos disponibles. Es importante destacar que este intervalo de conexión es una sugerencia del dispositivo periférico y es posible que el dispositivo central no pueda conectarse en todos los intervalos, porque puede estar ocupado en otras cosas. La Figura 4 muestra como es el proceso de intercambio de datos entre un dispositivo periférico (Servidor GATT) y uno central (Cliente GATT), con el dispositivo maestro siempre iniciando la comunicación.

Figura 4: Transacciones entre un Cliente GATT y un Servidor GATT

Servicios y Características Las transacciones GATT en los dispositivos BLE están basadas en objetos anidados de alto nivel que se denominan Perfiles, Servicios y Características. El orden de estos elementos se muestra en la Figura 5

46


Figura 5: Jerarquía de los objetos Perfiles, Servicios y características

Perfiles Un perfil no existe realmente en el propio periférico BLE, sino que simplemente es una colección predefinida de servicios que ha sido compilado por cualquier dispositivo Bluetooth SIG o por los diseñadores. El Perfil del Monitor de Pulso Cardiaco, por ejemplo, combina el Servicio del Monitor de pulso cardiaco y el Servicio de Información del Dispositivo. Servicios Los servicios se utilizan para organizar los datos en entidades lógicas, los cuales contienen porciones de información denominadas Características. Un servicio puede tener uno o más características y cada servicio se distingue de los otros por medio de una ID numérico único llamado UUID (Unique Numeric ID). Este número tiene un tamaño de 16 bits para los servicios oficiales adoptados por el SIG y 128 bits para los servicios privados definidos por el fabricante. Una lista completa de los servicios oficiales adoptados por el SIG puede obtenerse desde la página para los desarrolladores de Bluetooth (https://developer.bluetooth.org), en la sección Servicios. Por ejemplo, para el Servicio de Pulso Cardiaco toma el valor de UUID 0x180D de

47


16bits, y contiene hasta 3 características, de los cuales solo el primero es obligatorio: Heart Rate Measurement, Body Sensor Location y Heart Rate Control Point. Características Las Características son los objetos de menor nivel en las transacciones GATT y los cuales encapsulan un dato o un array de datos. De manera similar a los servicios, las características también se distinguen entre sí por medio del UUID, que nuevamente tienen el tamaño de 16 bits para los definidos por el SIG y 128 bits para los definidos por el usuario. Un ejemplo es la característica de Heart Rate Measurement el cual es obligatorio para los monitores de pulso cardiaco y utiliza el UUID 0x2A37. Módulo RN4020 El módulo RN4020 de Microchip ofrece en un único dispositivo todas las características definidas en el estándar Bluetooth v4.1 para dispositivos de bajo consumo. Además posee un módulo integrado de RF, controlador de banda base y un procesador de comandos API, para ofrecer una solución completa para dispositivos Bluetooth de bajo consumo. La Tabla 1 contiene las especificaciones generales del módulo RN4020.

Especificación Estándar Banda de Frecuencia Método de Modulación Máximo Data Rate Antena Interfaces Rango de operación Sensibilidad Potencia de transmisión de RF

Descripción Bluetooth 4.1 2,4 a 2,48 GHz GFSK 1 Mbps PCB UART, PIO, AIO, SPI 100 metros -92,5dBm a 0,1% VER -19 dBm a +7,5dBm

Tabla 2: Especificaciones del módulo RN4020

La interfaz de comunicación del módulo con un microcontrolador puede ser por USART o por SPI, pero la mínima configuración consiste en dos líneas para la transmisión y recepción por USART y la línea WAKE_HW.

48


Servicios soportados Los servicios soportados por el firmware del módulo RN4020 están enumerados en la Tabla 3. Los servicios son habilitados por los comandos enviados desde la USART. Cada servicio maneja una serie de “Características” que son declarados y definidos por Bluetooth como valores. Los valores de cada característica son almacenadas en memoria y pueden ser accedidas desde otro dispositivo, como teléfonos móviles o tablets, que actúan como dispositivos Centrales. Nombre de Servicio Device Information Battery Heart Rate Health Thermometer Glucose Blood Pressure Running Speed Cadence Cycling Speed Cadence Current Time Next DST Change Reference Time Update Link Loss Immediate Alert TX Power Alert Notification Phone Alert Status Scan Parameters

UUID definido por Bluetooth SIG 0x180A 0x180F 0x180D 0x1809 0x1808 0x1810 0x1814 0x1816 0x1805 0x1807 0x1806 0x1803 0x1802 0x1804 0x1811 0x180E 0x1813

Tabla 3: Servicios soportados por el RN4020 y sus UUID

Microchip Low-Energy Data Profile Microchip Low-energy Data Profile (MLDP) es un servicio privado de los dispositivos Bluetooth BLE que provee una comunicación de hasta 50kbps transportando los datos serie por Bluetooth. Placa de Desarrollo Smart Bluetooth Para poder utilizar todas las características de este módulo Bluetooth es que se creó la placa de desarrollo Smart Bluetooth, el cual cuenta con un Microcontrolador PIC18F26J50 para realizar el puente entre una comunicación USB y la interfaz USART del módulo RN y regulador de tensión de continua que permite ajustar las tensiones de entrada, ya sea que esta fuese menor o mayor a la tensión de salida.

49


Esquemรกtico En las siguientes figuras veremos las conexiones necesarias para que el mรณdulo RN4020 pueda funcionar adecuadamente. En la Figura 6 se puede observar las conexiones necesaria para el funcionamiento correcto del mรณdulo RN. Se puede ver que la cantidad de componentes externos es casi nula. El modo de configuraciรณn utilizada en la placa de desarrollo es por USART, este modo soporta la utilizaciรณn de la interfaz por medio de 2 cables (RX,TX) o 4 cables utilizando control de flujo por Hardware (RX, TX, CTS y RTS). Ademรกs se trabaja en esta interfaz con niveles lรณgicos CMOS, no con los niveles de la norma RS232, lo que facilita el diseรฑo de la comunicaciรณn con el mรณdulo utilizando Microcontroladores, ya que no necesitamos drivers que adapten los niveles de tensiรณn.

Figura 6: Esquemรกtico con los componentes necesarios para el mรณdulo RN4020

50


Figura 7: Esquemático del PIC18F26J50

En la Figura 7 se puede ver el esquemático de conexiones del Microcontrolador de la placa Smart Bluetooth, el cual es el PIC18F26J50. Este Microcontrolador es el encargado de proveernos una interfaz USB para poder comunicarnos con el módulo o como veremos más adelante, podemos programar el micro para que envíe comandos de configuraciones y transmitir el valor del sensor de temperatura o de algún puerto analógico del ADC del micro. Por ello podemos ver en el esquemático el sensor de temperatura TC1047, que se encuentra conectado al canal analógico numero 4. Este sensor de temperatura tiene un rango de medición entre -40ºC y 125ºC.

51


Figura 8: Esquemático del Regulador de tensión

En la Figura 8 se puede ver el esquemático de la fuente de alimentación de la placa Smart Bluetooth, el cual puede ser alimentado desde una pila del tipo Botón o desde el conector USB. El corazón de esta fuente es el integrado MCP-1252, el cual provee a su salida los 3,3V necesarios para alimentar el módulo RN y el Micro. Este integrado es un convertidor DC/DC pero que tiene la particularidad de adaptarse a los niveles de la tensión de entrada y en consecuencia actuar para subir la tensión y bajarla, pero manteniendo la salida en el valor de 3,3V. Esto nos permite alimentar el módulo, ya sea desde la pila o por medio de la interfaz USB.

Figura 9: Puerto expansor de la placa Smart Bluetooth

Por último, en la Figura 9 nos encontramos con el conector de expansión de la placa de desarrollo, la cual nos permite conectar componentes externos, ya sea para monitorear el valor de una variable analógica, como un detector de pulso cardiaco por ejemplo, o también para realizar alguna acción de control, como activar un relé, etc. Mediante este conector también tendremos acceso a los pines de programación del Microcontrolador PIC y al pin de control WAKE_SW del módulo RN que nos permite entrar en el modo comando.

52


Los pines disponibles que tenemos del PIC en este conector son RA2 y RB0 que además de ser digitales, son canales analógicos y los pines RB6 y RB7 que son pines digitales únicamente (Tener en cuenta que los pines RB6 y RB7 se utilizan en la programación del Microcontrolador).

Placa de desarrllo Smart Bluetooth con el módulo RN4020 de Microchip

Programa USB-USART La placa Smart Bluetooth posee un Microcontrolador PIC18F26J50 que viene en un encapsulado QFN de 28 pines, entre sus características, resalta la de poseer un módulo USB y dos interfaces USART, muy útiles para lograr una comunicación entre una PC con puerto USB y el módulo Bluetooth. En esta sección se tratara en detalle el programa que viene por defecto en la placa de desarrollo Smart Bluetooth el cual actúa como un puente entre la comunicación de una PC y el módulo RN4020. Especificaciones del programa La utilidad de este programa radica en la posibilidad de poder configurar el módulo RN4020 desde una PC que posea un puerto USB. Al conectar el cable USB entre la placa Smart Bluetooth y la PC se crea en ella un puerto de comunicación serie virtual (COM Virtual) desde el cual se puede enviar datos utilizando un programa como el Hyperterminal, el TeraTerm o el Hercules. A continuación se listan las características del programa y la configuración que debe tener la comunicación serie.

53


• • •

Programa USB clase CDC, el cual crea un COM Virtual en la PC. Programado en lenguaje C utilizando el entorno de desarrollo MPLABX con el compilador XC8. Configuración de la comunicación Serie o o o o o

Velocidad: 115200 baudios Datos: 8 bits Bit de Stop: 1 Paridad: No Control de Flujo: No

Compilar el Código utilizando el MPLABX El código fuente del programa que convierte al Microcontrolador en un puente de comunicación entre el puerto USB de la PC y el módulo RN está disponible para poder realizar modificaciones si se lo desea. En esta sección se verán los pasos necesarios para compilar este programa desde el entorno de programación del MPLABX. Nota: Para poder realizar los siguientes pasos se debe tener instalado el entorno de desarrollo MPLABX y el compilador XC8 de Microchip. 1.

Descargar el proyecto y descomprimirlo, esto creara una carpeta en cuyo interior encontramos otras tres con los nombres, “bsp”, “framework”, “smart_bluetooth_project”. Dentro de esta última carpeta se encuentra el proyecto listo para abrirlo desde el MPLABX.

Figura 10: Directorio que contiene los proyectos de la placa Smart Bluetooth

2.

Abrir el MPLABX y dirigirse a File>>Open Project… y buscar dentro de la carpeta smart_bluetooth_project\smart_bluetooth_usb el proyecto smart_bluetooth_usb.X. Oprimir el botón Open Project

54


Figura 11: Ventana Open Project

3.

Una vez abierto el Proyecto, en la ventana Projects se puede ver la estructura del mismo, donde básicamente existen tres carpetas dende se almacenan los códigos fuente, estas son “bsp”, “app” y “framework”. En la carpeta app se encuentran los fuentes que son editables por el usuario, aquí se halla el main.c, app_device_cdc_basic.c y el usb_descriptor.c. En la carpeta bsp se encuentran las librerías de los periféricos y en la carpeta framework los fuentes de la librería USB.

55


4.

Para compilar el proyecto oprimir el icono “Build Project”. El proyecto comenzara a compilarse y en la ventana Output se puede seguir el desarrollo de la compilación. Una vez que termina, se debe leer el mensaje final “BUILD SUCCESSFUL”.

Una vez que se compila el proyecto con éxito se crea el archivo “.hex” en la carpeta “smart_bluetooth_usb\dist\default\production”. Grabar el firmware en la placa Smart Bluetooth Luego de tener el proyecto compilado, solo será necesario cargar el firmware en la placa, para ello utilizaremos el programador de mcelectronics y el software PICKit2Programmer para cargar el nuevo archivo. A continuación se indican los pasos para cargar el firmware en el Microcontrolador. 1.

Conectar el programador MCE Stick USB en la placa Smart Bluetooth y al puerto USB de la PC, abrir el PICKit2Programmer y dirigirse a Tools >> Check Communication. De esta forma el programador debería reconocer por si solo el Microcontrolador de la placa.

Figura 12: Programador MCE Stick USB.

56


Figura 13: Reconocimiento del dispositivo con el programador

2.

Dirigirse a File >> Import Hex y buscar el archivo que se genero de la compilaciรณn del proyecto. El archivo .hex se encuentra en la direcciรณn ..firmware\smart_bluetooth_project\smart_bluetooth_usb\smart_bluetooth_usb\dist\d efault\production. Seleccionar el archivo .hex y oprimir abrir, este se debe cargar en el programa y ver que el campo de datos HEXA se sobrescribe con el cรณdigo del mismo.

3.

Oprimir el botรณn Write para escribir el programa en el Microcontrolador. Luego de la escritura, el programa debe realizar la verificaciรณn, si esta es exitosa, el Micro fue grabado correctamente.

57


Instalación del Driver USB Al conectarse la placa por primera vez es necesario instalar el driver USB para que el dispositivo sea reconocido, estos se encuentra dentro de la carpeta “utilities” en el directorio de proyectos. Realice estos pasos para instalar el Driver USB. 1. 2.

Conecte la placa al USB de la PC, es probable que el Sistema operativo ejecute la búsqueda del Driver y falle en el intento. Si este falla, oprimir de manera conjunta las teclas Windows y pausa, esto abrirá la ventana del sistema, a la izquierda, buscar el administrador de dispositivo y oprimir para abrir esta ventana. En la Figura 14 se puede ver el nombre del dispositivo que se conecto al puerto y una indicación de advertencia que nos dice que la carga del controlador ha fallado.

Figura 14: Reconomiento de la placa smart Bluetooth en Windows

3.

En el Administrador de dispositivo encontrar el que dice “CDC RS-232 Smart Bluetooth” hacer clic secundario y seleccionar “Actualizar Software del controlador…”

Figura 15; Actualización de los controladores de la placa Smart Bluetooth

58


4.

En la siguiente ventana indicar que se buscara el Driver del dispositivo en el equipo. Luego en examinar poner la ruta a la carpeta “inf” dentro de utilities.

Figura 16: Incluir en la dirección de búsqueda la carpeta inf que posee el directorio utilities

5.

Una vez que se terminen de instalar los Drivers, ir a la ventana de administración de dispositivo y verificar cual es el número de puerto que se asigno para la comunicación.

Figura 17: Mensaje final del proceso de instalación de los drivers de la placa Smart Bluetooth

59


Utilizar un terminal para comunicarse con la Smart Bluetooth Ya que el programa fue cargado en la placa y fueron instalados los driver USB, ahora es posible realizar la comunicación con la placa Smart Bluetooth y poder enviar comandos al módulo RN. Para ello necesitamos de un software Terminal que nos abra el puerto serie para la comunicación. Para este propósito, el software que recomendamos es el Hércules, el cual es gratuito y se puede descargar desde internet. Utilizando este terminal se describen a continuación los pasos a realizar para iniciar una comunicación con placa Smart Bluetooth. 1.

Abrir la ventana de Sistema en Windows, oprimiendo de manera conjunta las teclas Windows + pausa, y acceder al Administrador de dispositivos.

Figura 18: Ventana de Administración de Dispositivos

2.

Conectar la placa Smart Bluetooth al puerto USB de la PC y esperar a que el sistema detecte la conexión, luego en la ventana de Administración que abrimos el paso anterior, debemos encontrar la placa de desarrollo al cual se le ha asignado un número de COM.

60


Figura 19: Detalle del puerto asignado al COM virtual

3.

Una vez que se identifica el puerto de comunicaci贸n procedemos a ejecutar el Hercules y nos dirigimos a la solapa que dice Serial.

Figura 20: Pantalla Serial del programa Hercules

61


4.

Configuramos la comunicación Serie con los siguientes parámetros: • • • • •

5.

Puerto: COMx donde x es el numero asignado por el sistema para la placa. Baudios: 115200 Data Size: 8bits Paridad: Ninguna Control de Flujo: Ninguno

Una vez configurado la comunicación, presiones el botón Open para iniciar, luego podemos escribir los comandos que se detallaron en las secciones anteriores.

Personalización del Driver USB Es posible que el usuario vea necesario la posibilidad de modificar el nombre con el que aparece listado el dispositivo USB en el sistema, si esto fuese así, es posible modificar el código de la aplicación para mostrar El nombre de la aplicación y la empresa que lo desarrolla. Para hacer este cambio necesitamos abrir el proyecto smart_bluetooth_usb con el MPLABX y mediante un editor de Texto abrir el archivo mchpcdc.inf para su edición. Estos son los pasos que debe realizar para personalizar el Driver USB. 1. 2.

Abrir el proyecto smart_bluetooth_usb desde el MPLABX, tal como se vio en la sección “Compilar el Código utilizando el MPLABX”. Luego abrir el archivo usb_descriptor.c Recorrer hasta el final del archivo usb_descriptor.c donde se encuentran constantes escritas en código C, identificados como “Manufacturer string descriptor” y “Product string descriptor”.

Figura 21: Detalle de las estructuras que contienen el mensaje del archivo descriptor

62


3.

Modificar el contenido de estas estructuras para que muestren el mensaje que queremos que se vea al momento de instalar el dispositivo. Una vez terminado de escribir el contenido de estas estructuras, se debe indicar la cantidad de elementos que tiene y anotarlos en el tamaño del array entre corchetes. Luego compilar el proyecto, si los tamaños están bien, la compilación debería hacerse sin problemas.

Figura 22: Detalle de la modificación del mensaje a mostrar en usb_descriptors.c

4.

Utilizando un editor de texto, abrir el archivo mchpcdc.inf que se encuentra en la carpeta \smart_bluetooth_project\utilities\inf, dirigirse al final del mismo y encontrar la sección que muestra la Figura 23

Figura 23: Detalle de la sección del archivo mchpcdc.inf que se debe modificar

5.

Solamente se debe modificar el texto que esta a continuación de MFGNAME= y DESCRIPTION=. Ponemos los mismo datos que se colocaron en el archivo usb_descriptors.c. Guardar el archivo y cerrar.

63


Figura 24: Detalle de la modificación realizada al archivo mchpcdc.inf

6.

Finalmente conectamos la placa USB con el nuevo firmware (ver la sección “Grabar el firmware en la placa Smart Bluetooth”) y se nos pedirá que instalemos el firmware, a lo cual simplemente le indicamos la ruta al nuevo archivo mchpcdc.inf que acabamos de editar.

De esta manera el Driver USB queda personalizado para mostrar al usuario el nombre y la descripción de lo que realiza el dispositivo.

Demostración de un dispositivo Smart Bluetooth En esta sección veremos paso a paso como realizar una configuración del módulo RN4020 y conectarlo a un Smartphone o tablet. Para poder realizar esta demo es necesario contar con los siguientes elementos: • Smartphone o tablet que soporte Bluetooth de bajo consumo (v4.0) • Aplicación en Android o en IOS que soporte búsqueda de dispositivos BLE (Para Android utilizaremos la app nRF Master Control Panel) • Placa Smart Bluetooth conectado a la PC por USB y un Terminal para configurarlo. Configuración Antes de conectar el módulo RN al Smartphone es necesario realizar la siguiente configuración: 1.

Poner a nivel alto el pin WAKE_SW para entrar al modo comando (En la placa Smart Bluetooth esta siempre en alto)

2.

Abrir el programa Terminal TeraTerm o Hercules y conectarse al módulo configurando los siguientes parámetros.

64


• • • • •

Puerto: COMx donde x es el numero asignado por el sistema para la placa. Baudios: 115200 Data Size: 8bits Paridad: Ninguna Control de Flujo: Ninguno

3.

Enviar el comando “+” para habilitar el eco de caracteres.

4.

Enviar el Comando SF,1 para resetear los parámetros de configuración a valores de fabrica.

5.

Enviar el comando S-,MCE Smart BLE para agregar un nombre al dispositivo, el módulo tomara el String indicado en el comando y le anexara los últimos dos bytes de la dirección MAC del dispositivo.

6.

Enviar el comando SS,C0000000 para habilitar el soporte de los servicios Device Information y Battery.

7.

Enviar el comando SR,00000000 para configurar el módulo RN4020 como un periférico.

8.

Enviar el comando R,1 para reiniciar el módulo RN4020 y las configuraciones realizadas tomen efecto.

9.

Luego de reiniciar el módulo y mostrar la leyenda “CMD”, enviar el comando LS para mostrar los servicios actuales que el módulo enumera y soporta en el rol de servidor. La salida del comando LS se indica en la Figura 25. El comando LS listara los servicios soportados por el Servidor GATT, que en este caso, como indica la Tabla 3, el UUID del servicio “Device Information” es 0x180A y el servicio de “Battery” 0x180F. El comando LS también lista las Características del Servicio, que son los valores enumerados que muestra la Figura 25

Figura 25: Salida del comando LS

65


Ejecutando la Demo

1. 2. 3.

En el terminal de la placa Smart Bluetooth enviar el comando “A” para iniciar el proceso de Advertisement. En el Smartphone iniciar la aplicación nRF Master Control Panel, si aun no fue activado el Bluetooth, la aplicación le pedirá que lo realice. Configure la aplicación para que comience a realizar un escaneo de RF, para ello debemos oprimir el botón “SCAN” en la aplicación. El programa debe detectar la placa Smart Bluetooth e indicarlo en la pantalla como muestra la Figura 26.

Figura 26: Escaneo de la red RF en busca de dispositivos periféricos.

4.

Desde la aplicación nRF Master Control Panel oprimir sobre el botón “CONNECT”. Esto hará que la aplicación comience a listar los servicios 0x180A para Device Information y el servicio 0x180F para Battery.

66


Figura 27: Listado de los servicios soportados por el dispositivo.

5.

Presione sobre el servicio “Device Information”, que tiene el UUID 0x180A, y la aplicación desplegara una lista enumerando las “Características” de este Servicio. Acceda a cada una de las seis características enumeradas en la aplicación para leer su valor, debe presionar sobre la flecha que se encuentra a la derecha de cada Característica, como lo muestra la Figura 28. Podemos por ejemplo leer el campo Manufacturer Name String o leer el Model Number String.

67


Figura 28: Características del Servicio “Device Information”.

6.

Ahora realice el mismo procedimiento para leer el UUID 0x180F, el cual enumera las características del servicio Battery.

Figura 29: Características del Servicio Battery.

68


7.

Regrese nuevamente al terminal conectado a la placa MCE Smart Bluetooth y establezca el nivel de la batería en un 99%, escribiendo cualquiera de los dos siguientes comandos.

SUW,2A19,63 SHW,0018,63 El primer comando configura el valor de la característica Battery Level en 99% (0x63 en Hexa) que se encuentra en la dirección UUID 0x2A19 El segundo comando también configura el valor del nivel de la batería en 99% (0x63), pero a diferencia del comando anterior, este no utiliza la dirección UUID, sino que utiliza la dirección 0x0018 que es utilizada como un alias para escribir en la dirección UUID 0x2A19. Entonces podemos ver que el módulo maneja dos formas diferentes de escribir sobre un mismo valor que posee el Servicio, uno de ellos utiliza la dirección UUID y el otro una dirección denominada “Handler”. Esta ultima dirección Handler de los registros UUID es de mucha utilidad cuando se utilizan Servicio privados, cuyos valores de UUID son de 128 bits, en cambio las direcciones handler siempre se mapean a variables de 16bits, que son mucho más fáciles de manipular. Es así que las instrucciones anteriores tienen esta denominación, la letra S es porque la ejecución la realiza un servidor GATT, la letra U es para indicar que la dirección es un UUID y H para indicar direcciones “Handler”. La letra W es porque se va a realizar una escritura sobre la variable. 8.

Desde la aplicación del Smartphone presionar en la flecha izquierda para leer el valor de la Característica identificado con el UUID 0x2A19, este debe indicar el valor 0x63 en Hexa o 99% en decimal.

69


Figura 30: Lectura del nivel de batería

La aplicación también puede comenzar a recibir notificaciones sobre el nivel de batería, lo que nos ahorraría tener que oprimir el botón de lectura para obtener el valor de la batería, sino que este se actualizaría automáticamente. Para esto se oprime sobre el icono de flechas que se encuentran una a la derecha del botón de lectura. Sobre el terminal del módulo RN4020 se debe leer la siguiente leyenda: WC,0019,0100 Lo que realmente está pasando es que la aplicación escribe el valor 0x0001 (Esto sale de aplicar el formato Little indian sobre 0100) sobre el handler de configuración del nivel de Batería. Esto provoca que se comience a notificar la característica indicada por el UUID 0x2A19 del servicio especificado por el UUID 0x180F. 9.

Ahora actualizaremos el valor de la Batería en el módulo RN4020 utilizando cualquiera de estos dos comandos: SUW,2A19,32 SHW,2A19,32 Luego de enviar el comando, se puede ver en la aplicación que el valor del Nivel de la Batería se actualiza automáticamente al valor 0x32 o 50% en decimal. Esto es porque se encuentra activada la notificación de esta variable.

70


Figura 31: Notificación Automática del valor del nivel de la Batería

10. Ahora vamos a agregar servicios privados que pueden ser definidos por el usuario en el módulo RN4020. Recordar que los UUID de los servicios privados tienen un largo de 128bits. Para definir un servicio privado realizar los siguientes comandos. 11. SS,C0000001 //Habilitar Servicio privados PZ // Borrar los servicios y características privadas actuales PS,11223344556677889900AABBCCDDEEFF // Definir el servicio privado con el UUID 0x11223344556677889900AABBCCDDEEFF PC,010203040506070809000A0B0C0D0E0F,02,05 // Agrega la característica privada 0x010203040506070809000A0B0C0D0E0F al servicio //privado actual. La propiedad de esta característica es 0x02 (Lectura) y tiene un máximo // de 5 bytes PC,111213141516171819101A1B1C1D1E1F,18,02 // Agrega la característica privada 0x111213141516171819101A1B1C1D1E1F al servicio //privado actual. La propiedad de esta característica es 0x18 (Escritura) y tiene un máximo // de 2 bytes.

71


U R,1 + LS servicios

// Desenlazar para que el dispositivo sea visible // Resetear el módulo // Habilitar eco //Listar los servicio desde el lado servidor. Los // Privados y las características se muestran en la lista

Al utilizar el comando LS, se puede ver la lista de servicios y sus características, como muestra la Figura 32

Figura 32: Lista de los servicios Públicos y Privados

12. Volver a reconectar desde la aplicación de Android al dispositivo, si es necesario, para borrar el cache de datos de la aplicación debe reiniciar el mismo para que se vuelva a mostrar nuevamente todos los nuevos valores agregado anteriormente.

72


Figura 33: Agregado de las nuevas características Privadas

13. De manera similar a lo que se realizo con los servicios Publicos “Device Information” y “Battery Service”, también podemos modificar el valor de un servicio privado para leerlo desde la aplicación. Utilice cualquiera de estas dos instrucciones para modificar el valor de la variable de lectura.

SUW,010203040506070809000A0B0C0D0E0F,1234 // Configura el valor 0x3412 a la característica // 0x010203040506070809000A0B0C0D0E0F SHW,0018,5678 // Configura el valor 0x7856 al handler 0x0018, que se encuentra asociado // a la característica 0x010203040506070809000A0B0C0D0E0F La aplicación puede leer ahora el valor de la característica según lo muestra la Figura 34 donde se lee el valor 0x1234

73


Figura 34: Lectura de una característica privada

14. La aplicación del Smartphone también puede iniciar una notificación de una variable, tal como lo vimos en los servicios públicos. Esta vez se comenzara la notificación sobre la característica privada 0x111213141516171819101A1B1C1D1E1F. La única diferencia que se puede apreciar entre las notificaciones de las características privadas y públicas se encuentra en el tamaño de sus UUID. Nuevamente el módulo indicara por el terminal que la notificación fue habilitada al escribir el comando que muestra la Figura 35 en donde el valor del handler 0x001B se encuentra asociada a la característica 0x111213141516171819101A1B1C1D1E1F

Figura 35: Módulo indica que se comenzara con la notificación de una característica

15. Desde la aplicación también podemos escribir el valor de la característica privada, presionando el botón de escritura en la aplicación sobre la variable a modificar. Esto desplegara una nueva ventana donde podemos ingresar el dato. Desde el terminal del módulo podemos ver como se actualiza el valor escrito con el siguiente mensaje: WV,001A,1234

74


Figura 36: Escritura sobre una Característica

Aplicación MLDP Para poder realizar una comunicación transparente entre dos módulos RN4020, es decir que todo lo que se escribe por USART se transmite a otro módulo, o de una aplicación corriendo en un Smartphone poder escribir datos, realizando un puente entre Bluetooth y la interfaz USART, Microchip desarrollo un servicio privado denominado MICROCHIP LOW-ENERGY PROFILE o como se lo conoce comúnmente MLDP. En esta demostración veremos configurar el módulo para activar este servicio y utilizaremos la aplicación “MLDP app” suministrado por Microchip. Configuración del módulo 1. 2.

Poner a nivel alto el pin WAKE_SW para entrar al modo comando (En la placa Smart Bluetooth esta siempre en alto) Abrir el programa Terminal TeraTerm o Hercules y conectarse al módulo configurando los siguientes parámetros.

75


• • • • •

Puerto: COMx donde x es el numero asignado por el sistema para la placa. Baudios: 115200 Data Size: 8bits Paridad: Ninguna Control de Flujo: Ninguno

3. 4.

Enviar el comando “+” para habilitar el eco de caracteres. Enviar el Comando SF,1 para resetear los párametros de configuración a valores de fabrica.

5.

Enviar el comando S-,MCE Smart BLE para agregar un nombre al dispositivo, el módulo tomara el String indicado en el comando y le anexara los últimos dos bytes de la dirección MAC del dispositivo.

6.

Enviar el comando SS,30000000 para habilitar el soporte de los servicios Heart Rate y Health Thermometer en modo servidor.

7.

Enviar el comando SR,32000000 para configurar el módulo RN4020 como un periférico con anuncio automático y soporte para el servicio MLDP

8.

Enviar el comando R,1 para reiniciar el módulo RN4020 y las configuraciones realizadas tomen efecto.

Ejecutando aplicación 1.

Abrir en el Smartphone la aplicación MLDP app de Microchip y realizar un escaneo de RF para descubrir los dispositivos que soportan MLDP. En este paso se debe enumerar nuestra placa Smart Bluetooth.

76


Figura 37: Descubriendo los dispositivos que soportan MLDP

2.

Presionar sobre el dispositivo para conectarse, lo cual nos llevara a una nueva pantalla donde podemos escribir datos y veremos además los datos que vamos recibiendo del módulo. Escribir un mensaje en el bloque “Outgoing” como se ve en las siguientes figuras, y como se muestra este mensaje en el terminal del módulo.

Figura 38: Escribiendo un mensaje al módulo RN4020

77


Figura 39: Mensaje recibido por el módulo

3.

Luego escribir por el terminal del módulo el mensaje que se quiere visualizar en la aplicación. A medida que se van escribiendo los caracteres, estos se van imprimiendo en la pantalla del celular. En la Figura 40 se ve el resultado de enviar el mensaje a través del módulo.

Figura 40: Mensaje recibido desde el módulo RN4020

Demostración de Monitor de Pulso Cardiaco En esta demostración veremos cómo configurar el módulo RN4020 para realizar un medidor de pulso cardiaco y utilizar una aplicación que provee Microchip para ver el valor que reporta el módulo de manera grafica. Para esto es necesario descargar desde la página de Microchip la aplicación “RN420 Demo” e instalarla en el teléfono móvil. La aplicación 'RN4020 Demo' que corre sobre Android, trabajara como un dispositivo GATT cliente y comenzara a descubrir los dispositivos Servidores GATT que posean los siguientes servicios públicos:

78


• • • •

Heart Rate Service (UUID: 0x180D) Health Thermometer Service (UUID: 0x1809) Device Information Service (UUID: 0x180A) Battery Service (UUID: 0x180F)

En esta demostración entonces se configurara el módulo RN4020 utilizándolo como un servidor GATT el cual tiene habilitado los servicios públicos y enviara información relevante al cliente GATT que corre en la aplicación de Android 'RN4020 Demo' para mostrar los valores reportados por el módulo. Configuración del módulo 1. 2.

Poner a nivel alto el pin WAKE_SW para entrar al modo comando (En la placa Smart Bluetooth esta siempre en alto) Abrir el programa Terminal TeraTerm o Hercules y conectarse al módulo configurando los siguientes parámetros. • • • • •

Puerto: COMx donde x es el numero asignado por el sistema para la placa. Baudios: 115200 Data Size: 8bits Paridad: Ninguna Control de Flujo: Ninguno

3.

Enviar el comando “+” para habilitar el eco de caracteres.

4.

Enviar la siguiente secuencia de comandos para habilitar los servicios del servidor GATT: Heart Rate, Health Thermometer, Battery y Device Information SF,1 S-,MCE Health BLESS,F0000000 SR,22000000 R,1

// Reset a valores por defecto // Nombre del dispositivo // Habilitamos los Servicios públicos del servidor GATT // Habilitamos el Anuncio automático(ver UART flow control) // reseteamos el módulo RN4020

5.

Abrir la aplicación en Android "RN4020 Demo"

6.

Realizar un escaneo de la red y conectarse al dispositivo.

79


Figura 41: Descubriendo los dispositivos Bluetooth

7.

En el terminal del módulo RN4020 vamos a enviar un comando para enviar la medición del pulso cardiaco, para ello debemos saber que el UUID de esta característica es el 0x2A37.El código que vamos a escribir tiene el siguiente formato: SUW,2A37,<heart_rate_measurement> Para saber cuál es el formato que utiliza esta variable <heart_rate_measurement> para informar el pulso cardiaco podemos dirigirnos al portal web para desarrolladores de Bluetooth, cuya dirección es https://developer.bluetooth.org/gatt/Pages/DefinitionBrowser.aspx , donde no solo podremos obtener este dato, sino que también podemos consultar cuales son los servicio públicos definidos por el SIG, cuáles son sus características y que formato poseen. Para el caso del pulso cardiaco, el primer byte son flags que indican cual es el tamaño en que se envía el valor del pulso cardiaco, si es en 8 bit o en 16bits, y si se encuentran anexados además los valores de Energía gastada (Energy Expended) y RR-Interval que es el tiempo entre los picos que se producen en el pulso. A continuación del primer byte aparece el valor del pulso cardiaco, que puede tener 8bits o 16 bits según sea el valor del flag, luego viene dos bytes que indican la energía gastada y los últimos dos bytes indican el intervalo RR con una resolución de 1/1024 segundos. Entonces el comando queda de la siguiente forma: SUW,2A37,1F5300BB00EE00

//83BPM,187KJ,238ticks

80


Todos estos valores están escritos en el formato Little Indian, por eso tienen ese orden.

Figura 42: Lectura del valor del pulso cardiaco

8.

Luego será momento de formar y enviar el dato del servicio "body sensor location" utilizado para indicar cuál es la posición del sensor en el cuerpo. El formato del comando es el siguiente: SUW,2A38,<body_sensor_location> En donde la variable <body_sensor_location> toma un valor de 8 bits que indica cual es la posición del sensor. Nuevamente debemos ingresar a la página de desarrolladores de Bluetooth y buscar los valores que puede tomar esta característica. Con el valor 0x03 indicamos que el sensor se encuentra en el dedo. Así armamos el siguiente comando: SUW,2A38,03

//Finger

Para ver actualizada esta variable debe desconectarse y volver a conectarse, ya que esta variable es estática y no se actualiza durante una conexión.

81


Figura 43: Lectura de la posición del sensor en el cuerpo.

9.

Ahora armaremos el comando que configura un nuevo valor de la temperatura. El UUID asociado a esta característica es el 0x2A1C, así que utilizaremos el siguiente comando: SUW,2A1C,<temperature_measurement> En donde en <temperature_measurement> se debe enviar el valor de la temperatura corporal. Así el comando quedara de la siguiente manera: SUW,2A1C,014B000000 //75.0F

82


Figura 44: Valor de la Temperatura

10. Para enviar el nivel de la batería, nuevamente utilizamos el UUID de esta característica que corresponde al 0x2A19 y enviaremos el valor en formato Hexadecimal. SUW,2A19,<battery_level> Para el caso en que quisiéramos indicar un nivel de 92% enviamos el siguiente comando. SUW,2A19,5C

//92%

83


Figura 45: Nivel de batería

11. En este paso enviaremos una configuración completa del dispositivo, utilizando los UUID de las características del servicio "Device Information", los comandos que modificaran a los UUID correspondiente de la siguiente forma: SUW,2A29,<manufacturer_name> SUW,2A28,<software_revision> SUW,2A27,<hardware_revision> SUW,2A26,<firmware_revision> SUW,2A25,<serial_number> Esto sería un ejemplo de los valores que pueden tomar estas características del servicio. SUW,2A29,4d43452048656172742052617465 SUW,2A28,322e3332 SUW,2A27,312e3030 SUW,2A26,312e3130 SUW,2A25,313233343536

84

//MCE Heart Rate //v2.32 //v1.00 //v1.10 //123456


De manera similar a lo que ocurría con la variable "body Sensor Location", estos parámetros son estáticos y solo se actualizaran haciendo una re conexión con el módulo, por ello debemos desconectarnos y volvernos a conectar para refrescar esta información. 12. Presionar sobre el icono 'i' en la esquina superior derecha en la pantalla principal de la aplicación para ir a la pantalla de información del dispositivo.

Figura 46: Parámetros actualizados de Device information

85


iBeacon iBeacon es un sistema de posicionamiento en interiores (IPS indoor positioning system) que Apple denomina como "una nueva clase de transmisores de bajo consumo y bajo costo que pueden notificar a dispositivos iOS7 de su presencia por proximidad. También pueden ser empleados por el sistema operativo Android. Esta tecnología permite a los dispositivos iOS u otros hardwares enviar notificaciones push a los dispositvos iOS próximos. iBeacon se basa en Bluetooth de baja energía (BLE), también conocido como Bluetooth Smart. En un escenario de la vida real sería más un sensor inalámbrico de posición/contexto, que puede determinar con precisión su posición en una tienda: los iBeacons podrían enviar notificaciones de elementos alrededor del sensor que están en venta y que se podrían estar buscando, y podría permitir pagos en el punto de venta (POS) donde no se necesita sacar un monedero o tarjeta para efectuar el pago.

Distintas aplicaciones del sistema iBeacon Emplea Bluetooth low energy Proximity sensing para transmitir un identificador único universal recogido por un aplicación compatible o sistema operativo y que puede ser convertido en una localización física o generar una acción en el dispositivo como por ejemplo un check-in en una red social o mostrar más información sobre un producto.

86


Con iBeacon es posible brindar más información sobre una prenda, un cuadro o cualquier objeto cercano. Los beacons pueden ser implementadas en diferentes formatos, incluidos dispositivos alimentados por pilas tipo botón, baterías y USB sticks. El módulo RN4020 soporta el modo iBeacon, veamos de qué forma configurarlo para que trabaje de esta manera. Atención, al momento de ordenar el módulo RN4020, debe seleccionar el RN4020BCN-V/RM120 que incluye el firmware para habilitar el modo beacons. También es posible actualizar el firmware del módulo RN4020-V/RM120 para que soporte iBeacon pero debe solicitarse a Microchip el archivo necesario.

RN4020BCN-V/RM120 con soporte para iBeacon.

87


Comandos y script de ejemplo para hacer del RN4020 un dispositivo iBeacon: WP WC SR,01000000 SS,00000000 WW SP,0 @PW_ON

//Detiene cualquier script en ejecuci贸n //Borra cualquier script de la memoria ROM //Set Features //Set Services //Entra al modo script //Configura la potencia //Start at PowerOn

^,4d616465427959696665e6759616e67,B40F,0100,B5 //Comando para iniciar el iBeacon [ESC] R,1

//Sale del modo script //Reset

De esta forma el m贸dulo emite permanentemente un ID 煤nico que podemos leer desde un dispositivo m贸vil y de esa manera disparar acciones en el terminal del usuario.

88


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.