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.
Veamos un desglose gráfico para el ejemplo del "sensor analógico", con interfaces clave en rojo.
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.
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:
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 |
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.
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.
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.
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.
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>
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:
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
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í.
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;
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.
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(); } },
}) }); }
Los días felices de la PDA y Blackberry han quedado definitivamente atrás, pero el factor…
Tutorial sobre cómo pronosticar usando un modelo autorregresivo en PythonFoto de Aron Visuals en UnsplashForecasting…
Si tienes un iPhone, los AirPods Pro son la opción obvia para escuchar música, ¡aunque…
Ilustración de Alex Castro / The Verge Plus nuevos rumores sobre el quinto Galaxy Fold.…
Se rumorea que los auriculares premium de próxima generación de Apple, los AirPods Max 2,…
El desarrollador Motive Studio y el editor EA han lanzado un nuevo tráiler de la…