Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial Internet of Things >> Tecnología de Internet de las cosas

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

Obtenga información sobre la familia RN487x de módulos Bluetooth y cómo configurarlos para sus proyectos de periféricos de bajo consumo.

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

A medida que ha evolucionado el estándar, han proliferado los dispositivos conectados por Bluetooth. Se han introducido módulos de hardware que proporcionan un SoC (sistema en chip) completo para casi cualquier diseño de 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 todas las interfaces que pueda necesitar; GPIO, PWM, USB, SPI, I 2 S, y muchos más.

La desventaja de este poderoso SoC, y otros, es la complejidad. Se requiere una curva de aprendizaje y un tiempo de desarrollo significativos 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ógicos y digitales), probablemente pueda alcanzar sus objetivos con el módulo RN487x fabricado por Microchip.

Esta familia de dos módulos Bluetooth proporciona múltiples canales digitales y analógicos bidireccionales simultáneos. El módulo se adapta a diseños específicos simplemente almacenando un poco de configuración en la NVRAM del módulo. A pesar de la simplicidad, el módulo aún cumple con el 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 sencillo script de aplicación 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.

Descripción general del diseño

Veamos un desglose gráfico del ejemplo del "sensor analógico", con las 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 la señal de nuestro sensor; el transductor en este ejemplo. Genera un voltaje analógico variable. Para el usuario, crearemos una aplicación para presentar los datos; la secuencia de comandos de Python en este ejemplo.

El script debe utilizar 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; el RN4870 y el RN4871. Se diferencian 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 pines para los dos chips. Esta disposición debería hacer que sea más fácil 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:el nivel de una 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 los pines para los dos módulos:

RN4870

Imagen de la hoja de datos RN487x

Pin Nombre / 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

Pin Nombre / Capacidad P1_2 P1_3
ADC x
PWM
DIO x x

Estas tablas deben dejar en 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 quiere administrar más de dos señales, entonces 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 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 escribir valores en la base de datos.

Como vista previa, aquí hay dos llamadas útiles a métodos API de 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 del método "escribir" es un identificador que es específico de la salida o salidas digitales que queremos controlar. Hay solo unas pocas líneas más necesarias para un ejemplo funcionalmente completo.

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

Configuración del módulo

El parámetro "vh_handle" en el método de secuencia de comandos 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 de nivel físico específica 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 encuadernación con clavija.

La configuración del 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 cómo emitir comandos de configuración.

Una vez que hayamos emitido estos comandos, la configuración no volátil dentro del RN487x se verá así:

Tenga en cuenta que todos los valores de los 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.

Con esto concluye la primera parte de nuestra serie de tres partes sobre 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 estudio adicional que se aplican a todos los ejemplos.

A continuación, encontrará un Apéndice con 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 "progresivo" de 3 pines que expone las señales RX, TX y GND necesarias. Si no está seguro de cómo realizar esta conexión con su estación de trabajo, aquí encontrará una guía excelente.

Inicie un emulador de terminal en su estación de trabajo. Un emulador que es particularmente adecuado y está ampliamente disponible es la utilidad "miniterm" que se incluye en la mayoría de los entornos de Python. En el shell de una 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 cambiarla.

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

 CMD> 

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

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

Ésta 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 solucionar este problema. Haga esto presionando la tecla '+' seguida de la tecla 'enter'. El dispositivo debería responder así:

 CMD> ECHO ACTIVADO 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 "Intro". Ej .:

 CMD> PS, 59c88760536411e7b114b2f933d5fe66 AOK 

Cada una de las configuraciones del proyecto también requiere que se asigne un script de varias líneas a la NVRAM del módulo. Este tipo de comando de varias líneas requiere un poco más de explicación. Empiece la entrada del script con un comando "WW", seguido de "enter". Luego, escriba cada línea de secuencia de comandos. 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". Ej .:

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

Inicialización común del módulo

Si ha utilizado un módulo RN487x para uno de los ejemplos de este proyecto, o si ha utilizado el módulo para algún 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. que entrará en conflicto con el siguiente uso previsto.

Se deben seguir los siguientes pasos antes de cada ejemplo en este proyecto:

  • Borre cualquier secuencia de comandos existente.
  • Habilite el procesamiento de secuencias de comandos.
  • Borre cualquier definición de servicio / característica existente.
  • Elimine cualquier función especial del pin que usamos (P1_2, índice 0A).
  • Reinicie el módulo.

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

 CMD> WC OK CMD> SR, 0040 OK CMD> PZ OK CMD> SW, 0A, 00 OK CMD> R, 1 Reiniciando 

Configuración de Linux necesaria para ejecutar ejemplos de scripts de Python

Hardware

El sistema que ejecuta estos scripts, por supuesto, 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 por debajo de esta, probablemente no funcionará para estos ejemplos.

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

Software

Esta configuración ha sido verificada 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 de forma predeterminada en Debian 10;

  • El módulo de Python para acceder a la pila de Bluetooth. Este componente está disponible a través del sistema de administración de paquetes y se llama "python-bluez".
  • El módulo de Python específicamente para llamadas Bluetooth GATT; "Gattlib". Este componente está disponible en el índice de paquetes oficiales 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.

Juntando todo esto, se debe solicitar una lista de paquetes al administrador de paquetes del sistema, seguida de una solicitud de módulo único 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

  • Hoja de datos de RN487x
  • Guía del usuario de RN487x
  • API de GATT en Windows
  • API de GATT en iOS
  • API de GATT en Python

Vuelva a consultar las siguientes partes de esta serie de proyectos, donde crearemos los ejemplos completos.

Vaya a los proyectos 1 y 2:creación de una entrada digital y un control digital.


Tecnología de Internet de las cosas

  1. La sinergia de IoT celular y Bluetooth LE
  2. Diseñar con Bluetooth Mesh:¿Chip o módulo?
  3. Contrinex:sensores inteligentes y cortinas ópticas de seguridad listos para la nube con interfaz Bluetooth
  4. ADLINK:implemente AI desde el borde hasta la nube con Edge AI Solutions y la plataforma NVIDIA EGX
  5. Sensores analógicos sin entradas analógicas en la Raspberry Pi
  6. Lectura de sensores analógicos con Raspberry Pi y Zabbix Supervisor
  7. ¡¿Qué hago con los datos ?!
  8. Aprovechar los datos de IoT desde el borde hasta la nube y viceversa
  9. La digitalización y la industria de alimentos y bebidas
  10. The Edge and IoT:Insights from IoT World 2019
  11. Fabricación digital y el IIoT:éxito con una plataforma única