Categories: NoticiasTecnología

Sensores y controles con el módulo Bluetooth RN487x de Microchip

Conozca la familia de módulos Bluetooth RN487x y cómo configurarlos para sus proyectos periféricos de baja potencia.

Si está desarrollando un periférico pequeño y de baja potencia, es muy probable que esté considerando Bluetooth como su capa de comunicación.

A medida que el estándar ha evolucionado, los dispositivos conectados por Bluetooth han proliferado. Se han introducido módulos de hardware que proporcionan un SOC (sistema en chip) completo para casi cualquier diseño periférico. El nórdico nrf52840 es un buen ejemplo. El núcleo del sistema es un procesador de 32 bits y una radio Bluetooth multiprotocolo. Este núcleo está rodeado por cada interfaz que pueda necesitar; GPIO, PWM, USB, SPI, I2S y muchos más.

La desventaja de este poderoso SOC, y otros, es la complejidad. Se requiere una curva de aprendizaje significativa y tiempo de desarrollo para crear e integrar el software integrado necesario para estos SOC.

Sin embargo, para algunos de los tipos de periféricos más comunes, existen alternativas más simples. Si su periférico es principalmente un sensor remoto o un control remoto, con un número limitado de canales (analógico y digital), probablemente pueda cumplir sus objetivos con el módulo RN487x fabricado por Microchip.

Esta familia de dos módulos Bluetooth proporciona múltiples canales simultáneos, digitales y analógicos bidireccionales. El módulo se adapta a diseños específicos simplemente almacenando un poco de configuración en el módulo NVRAM. A pesar de la simplicidad, el módulo todavía se ajusta al estándar BLE (Bluetooth de baja energía), por lo que es compatible con los clientes Bluetooth más nuevos, como los teléfonos inteligentes modernos.

En esta serie, demostraremos el uso del módulo RN487x. Crearemos un periférico funcional conectado por Bluetooth para cada una de las cuatro tareas; un sensor digital, un control digital, un sensor analógico y un control analógico. Cada ejemplo incluye un circuito nominal y la configuración necesaria en el RN487x. También se proporciona un script de aplicación simple para ejercitar el periférico. Los puntos de interfaz en el script de la aplicación están bien documentados; maximizando el potencial para incorporar estos periféricos como subsistemas en diseños más grandes.

Resumen del diseño

Veamos un desglose gráfico para el ejemplo del "sensor analógico", con interfaces clave en rojo.

Una representación de un sistema Linux que se comunica con un periférico

Hay tres elementos del sistema que crearemos. Para el periférico, debemos crear hardware que proporcione nuestra señal de sensor; El transductor en este ejemplo. Genera un voltaje analógico variable. Para el usuario, crearemos una aplicación para presentar los datos; el script de Python en este ejemplo.

El script debe usar la API de GATT para transferir información hacia y desde el periférico. También necesitaremos crear alguna configuración en el módulo RN487x. Esta configuración controlará el flujo de datos entre la aplicación y el hardware.

Selección de componentes

Hay dos módulos en la familia RN487x; RN4870 y RN4871. Difieren en el número y tipo de pines provistos para E / S. Puede encontrar estas restricciones en la hoja de datos y la guía del usuario, pero está algo dispersa. A continuación se muestra una reorganización del presupuesto de pin para las dos fichas. Esta disposición debería facilitar ver qué chip necesita para su periférico.

Hay tres tipos de pines de E / S disponibles en los módulos c:

Tipo Descripción
ADC Entrada analógica: un nivel de señal de entrada se convierte en un rango numérico.
PWM Salida analógica: un par de números se convierte en una onda cuadrada. Los números controlan la frecuencia y el ciclo de trabajo de la onda cuadrada.
DIO Entrada o salida digital: para la entrada digital, el nivel de señal alto o bajo representa 1 o 0 respectivamente. Viceversa para salida digital.

Y aquí están los presupuestos de pin para los dos módulos:

RN4870

Imagen de la hoja de datos RN487x
Nombre del pin / capacidad P1_0 P1_1 P1_2 P1_3 P2_2 P2_3 P2_4 P2_5
ADC X X X X
PWM X X
DIO X X X X X

RN4871

Imagen de la hoja de datos RN487x
Nombre del pin / capacidad P1_2 P1_3
ADC X
PWM
DIO X X

Estas tablas deben dejar claro que si no necesita PWM y solo necesita administrar una o dos señales, use el 4871. Esto ahorrará recursos. Si necesita PWM, o si desea gestionar más de dos señales, necesita el 4870. Para nuestro sensor analógico, solo tenemos una entrada analógica, por lo que el 4871 sería suficiente. Conectaríamos la señal al pin P1_2 del módulo.

Capa de perfil GATT (atributo genérico) de la pila de protocolos BLE

Estamos casi listos para implementar algunos ejemplos reales. Pero para escribir la aplicación de usuario, necesitamos una comprensión más precisa de la API que usaremos cuando hablemos con el periférico.

Todos los dispositivos Bluetooth de baja energía utilizan el perfil de atributo genérico (GATT) para el intercambio de datos estructurados. En este modelo, el periférico está organizado como un servidor que contiene una base de datos simple. La base de datos a su vez contiene una serie de variables que representan los datos útiles. Las aplicaciones como nuestro script Python están organizadas como clientes que usan la API de GATT para realizar consultas basadas en nombres en la base de datos. La API se puede utilizar para leer valores de la base de datos y para escribir valores en la base de datos.

Como vista previa, aquí hay dos llamadas útiles al método API GATT en Python:

                    gatt_rq.connect () gatt_rq.write_by_handle (vh_light,
str (bytearray ([8])))
                  

El primero se utiliza para establecer una conexión con el periférico. El segundo escribe algunos valores en la base de datos; Estos valores se expresan inmediatamente como salidas digitales en el periférico. El primer argumento para el método de "escritura" es un identificador específico de la salida o salidas digitales que queremos controlar. Solo hay algunas líneas más necesarias para un ejemplo funcionalmente completo.

Esta API está expuesta como parte de los servicios de Bluetooth en iOS, Android, Windows y Linux. Los ejemplos en este artículo están escritos en Python y se ejecutarán en muchas distribuciones de Linux comunes.

Configuración del módulo

El parámetro "vh_handle" en el método de script anterior nos lleva al elemento final en este patrón de diseño. El parámetro es una referencia en el software para una señal específica de nivel físico en el periférico. Pero, ¿cómo se completa esta ruta de datos? Hay dos piezas de configuración en la NVRAM del RN487x que harán esto; definición característica y unión de alfileres.

  • Definición característica: Comandos que asignan espacio para valores en la base de datos y que le dan a cada valor un identificador único para referencia de las aplicaciones cliente.
  • Pin vinculante: Scripts que transforman las señales físicas en valores de la base de datos, y viceversa.

La configuración RN487x se carga en el módulo con un lenguaje de comando personalizado. Consulte el apéndice para obtener una guía general sobre cómo realizar una conexión de consola al módulo y sobre la emisión de comandos de configuración.

Después de emitir estos comandos, la configuración no volátil dentro del RN487x se verá así:

Tenga en cuenta que todos los valores de datos existen dentro de una jerarquía de dos niveles de "servicios" y "características". Esta organización es más de lo que necesitamos, pero se vuelve útil para sistemas complejos donde existirían múltiples sensores y controles dentro de servicios lógicamente separados.


Esto concluye la primera parte de nuestra serie de tres partes en el módulo RN487x. Las partes 2 y 3 utilizarán el mismo patrón de diseño para crear una entrada digital, un control digital, un sensor analógico y un control analógico.

La Parte 4 también incluye algunos temas para estudios posteriores que se aplican a todos los ejemplos.

A continuación, encontrará un Apéndice de información para configurar sus módulos y usarlos antes de cada una de las descripciones de proyectos que seguirán en otros artículos.

Uso de una conexión de consola para configurar el RN487x

Para configurar el RN487x, primero suministre energía al módulo y establezca una conexión en serie entre el módulo y una estación de trabajo. Cada uno de nuestros circuitos de demostración tiene un puente "prog" de 3 pines que expone las señales RX, TX y GND necesarias. Si no está seguro de cómo hacer esta conexión a su estación de trabajo, aquí encontrará una guía excelente.

Inicie un emulador de terminal en su estación de trabajo. Un emulador especialmente adecuado y ampliamente disponible es la utilidad "miniterm" que se incluye en la mayoría de los entornos Python. En un shell de estación de trabajo, se puede iniciar así:

                    python -m serial.tools.miniterm --eol LF / dev / ttyUSB0 115200
                  

Este ejemplo muestra un nombre de puerto (/ dev / ttyUSB0) que es apropiado para un sistema Linux. La forma del nombre del puerto será diferente para otros sistemas operativos. La velocidad en baudios predeterminada para el módulo es 115200 y hay pocas razones para cambiarlo.

El módulo RN487x está en modo DATOS de manera predeterminada. Necesitamos el modo de comando. Este modo se activa al escribir tres caracteres de signo de dólar ("$$$") en la aplicación del emulador de terminal. No verá los caracteres en la ventana de terminal, pero el resultado debería ser un símbolo del sistema devuelto por el RN4871:

                    CMD>
                  

Intente presionar la tecla 'd' seguido de la tecla 'enter'. Deberías ver algo como esto como resultado:

                    CMD>
BTA = D88039F80080
Nombre = RN_BLE
Conectado = no
Authen = 2
Características = 0000
Servicios = 00
CMD>
                  

Esta es una descripción mínima del estado del módulo. Observe que el intérprete de comandos no mostró el carácter que escribió ("d"). Debes activar 'echo' para arreglar esto. Haga esto presionando la tecla '+' seguida de la tecla 'enter'. El dispositivo debería responder así:

                    CMD> ECHO ON
CMD>
                  

Ahora se encuentra en un punto en el que puede completar varias tareas de configuración descritas en el resto de este proyecto. La creación de un servicio, por ejemplo, se logra simplemente escribiendo un comando "PS" completo en una línea, seguido de la tecla "enter". Ex:

                    CMD> PS, 59c88760536411e7b114b2f933d5fe66
AOK
                  

Cada una de las configuraciones del proyecto también requiere que se confirme un script de varias líneas al módulo NVRAM. Este tipo de comando multilínea requiere un poco más de explicación. Comienza la entrada del script con un comando "WW", seguido de "enter". Luego escriba cada línea de script. Cada línea de secuencia de comandos, incluida la última línea, también se termina con la tecla "enter".

Finalmente, confirma el script presionando la tecla "esc". Ex:

                    CMD> ww
@CONN
| O, 08,72
AOK
CMD>
                  

Inicialización Común del Módulo

Si ha usado un módulo RN487x para uno de los ejemplos en este proyecto, o si ha usado el módulo para un propósito completamente diferente, y está a punto de configurar el módulo para otro ejemplo, es posible que el módulo tenga alguna configuración eso entrará en conflicto con el próximo uso previsto.

Deben tomarse los siguientes pasos antes de cada ejemplo en este proyecto:

  • Borra cualquier script existente.
  • Habilitar el procesamiento de guiones.
  • Borre cualquier servicio existente / definición característica.
  • Elimine cualquier función especial del pin que usamos (P1_2, índice 0A).
  • Reinicia el módulo.

Use la sección del apéndice anterior para llegar al shell del comando del módulo. Luego use la siguiente secuencia de comandos para lograr la inicialización necesaria:

                    CMD> WC
AOK
CMD> SR, 0040
AOK
CMD> PZ
AOK
CMD> SW, 0A, 00
AOK
CMD> R, 1
Reinicio
                  

Configuración de Linux requerida para ejecutar scripts de Python de ejemplo

Hardware

Por supuesto, el sistema que ejecuta estos scripts necesitará hardware que admita Bluetooth Low Energy (BLE). BLE se introdujo en la versión 4, por lo que si su hardware Bluetooth especifica una versión debajo de esta, probablemente no funcionará para estos ejemplos.

Si desea comprar un adaptador USB para una estación de trabajo para probar estos ejemplos, le sugiero cualquier adaptador que utilice el Qualcomm CSR8510. Una instancia está disponible para su compra aquí.

Software

Esta configuración se ha verificado para Debian 10. Debería ser aplicable para distribuciones basadas en Debian como Ubuntu. Hay dos componentes a los que se accede directamente mediante estos ejemplos que no están instalados por defecto en Debian 10;

  • El módulo Python para acceder a la pila Bluetooth. Este componente está disponible a través del sistema de administración de paquetes y se llama "python-bluez".
  • El módulo Python específicamente para llamadas Bluetooth GATT; ‘Gattlib’. Este componente está disponible en el índice del paquete oficial de Python (a través de la utilidad "pip").

La instalación "pip" de "gattlib" crea una biblioteca ELF. Este proceso también requiere algunas herramientas y bibliotecas.

En conjunto, se debe solicitar una lista de paquetes al administrador de paquetes del sistema, seguida de una solicitud de un solo módulo para "pip". Aquí se proporciona un script para completar estas acciones. Si elige ejecutar el script, deberá otorgarle permisos de "ejecución" después de la descarga.

Referencias

ga('create', 'UA-1454132-1', 'auto'); ga('require', 'GTM-MMWSMVL'); ga('require', 'displayfeatures'); ga('set',{'dimension1':'iot,wireless-rf,tadiran-batterylowpower,wireless-rf,iot'}); ga('set',{'contentGroup1':'iot,wireless-rf,tadiran-batterylowpower,wireless-rf,iot'});

ga('set',{'dimension3':"October 12, 2019"});

ga('set',{'dimension4':"Aaron Hanson"});

ga('send', 'pageview');

!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n; n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, document,'script','https://connect.facebook.net/en_US/fbevents.js'); fbq('init', '1808435332737507'); // Insert your pixel ID here. fbq('track', 'PageView'); fbq('track', 'ViewContent', { content_ids: ['iot','wireless-rf','tadiran-batterylowpower','wireless-rf','iot'], content_type: 'category'});

_linkedin_data_partner_id = "353081"; (function(){var s = document.getElementsByTagName("script")[0]; var b = document.createElement("script"); b.type = "text/javascript";b.async = true; b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js"; s.parentNode.insertBefore(b, s);})(); } if(jstz.determine().name().indexOf("Europe") === -1) { showSocialCode(); // NOT EU } else { showSocialCode(); window.addEventListener("load", function () { window.cookieconsent.initialise({ "palette": { "popup": { "background": "#252e39" }, "button": { "background": "#14a7d0" } }, "type": "opt-out", "content": { "message": "This website uses tracking cookies to ensure you get the best experience on our website.", "href": "https://www.allaboutcircuits.com/privacy-policy/", "dismiss": "OK, GOT IT" }, onInitialise: function (status) { var type = this.options.type; var didConsent = this.hasConsented(); if (type == 'opt-out' && didConsent) { console.log("eu"); //showSocialCode(); } },

onStatusChange: function (status, chosenBefore) { var type = this.options.type; var didConsent = this.hasConsented(); if (type == 'opt-out' && didConsent) { console.log("eu"); //showSocialCode(); } },

onRevokeChoice: function () { var type = this.options.type; if (type == 'opt-out') { console.log("eu"); //showSocialCode(); } },

}) }); }

Maria Montero

Me apasiona la fotografía y la tecnología que nos permite hacer todo lo que siempre soñamos. Soñadora y luchadora. Actualmente residiendo en Madrid.

Recent Posts

Máquina de mano Lean, Green, Raspberry Pi

Los días felices de la PDA y Blackberry han quedado definitivamente atrás, pero el factor…

2 years ago

Cómo pronosticar series de tiempo usando autorregresión

Tutorial sobre cómo pronosticar usando un modelo autorregresivo en PythonFoto de Aron Visuals en UnsplashForecasting…

2 years ago

Aquí están todas las formas en que puede cargar su AirPods Pro

Si tienes un iPhone, los AirPods Pro son la opción obvia para escuchar música, ¡aunque…

2 years ago

Las principales noticias tecnológicas del lunes: la prohibición de clientes de terceros de Twitter parece no ser un accidente

Ilustración de Alex Castro / The Verge Plus nuevos rumores sobre el quinto Galaxy Fold.…

2 years ago

AirPods Max 2: aquí están las características más solicitadas

Se rumorea que los auriculares premium de próxima generación de Apple, los AirPods Max 2,…

2 years ago

El remake de Dead Space continúa luciendo terriblemente genial en el nuevo tráiler de la historia

El desarrollador Motive Studio y el editor EA han lanzado un nuevo tráiler de la…

2 years ago