Dominando Módulos Bluetooth Microchip RN487x para Periféricos de Baja Potencia
Aprende a configurar la familia de módulos Bluetooth RN487x de Microchip para tus proyectos de periféricos de baja potencia.
Si estás construyendo un dispositivo compacto y energéticamente eficiente, Bluetooth es casi siempre la opción de comunicación de referencia. Con los años el estándar ha madurado, y hoy una amplia gama de módulos listos para usar proveen un system‑on‑chip (SoC) completo que satisface las necesidades de muchos periféricos. Un ejemplo popular es el nrf52840 de Nordic, que combina un procesador de 32 bits, radio Bluetooth multi‑protocolo y un completo conjunto de interfaces I/O como GPIO, PWM, USB, SPI e I²S.
Aunque potentes, estos SoCs pueden ser intimidantes: la curva de aprendizaje y el tiempo de desarrollo requerido para integrar el firmware embebido son significativos. Para muchos casos de uso comunes —sensado o control remoto con solo unos pocos canales analógicos o digitales— una solución más simple y enfocada es a menudo preferible.
Entran la familia RN487x de Microchip. Los dos módulos en esta familia —RN4870 y RN4871— ofrecen múltiples canales digitales y analógicos bi‑direccionales concurrentes manteniendo la huella de diseño y el esfuerzo de firmware mínimos. Cada módulo almacena una configuración compacta en su NVRAM, permitiéndote adaptar la funcionalidad del periférico a tus requisitos exactos. Importantemente, los módulos permanecen totalmente conformes con el estándar Bluetooth Low Energy (BLE), asegurando emparejamiento sin fisuras con smartphones modernos y otros clientes BLE.
En esta serie de tres partes, recorreremos la creación de un periférico Bluetooth‑habilitado totalmente funcional para cuatro tareas típicas: un sensor digital, un control digital, un sensor analógico y un control analógico. Cada ejemplo incluye un circuito de referencia, los pasos precisos de configuración RN487x y un script Python simple que demuestra cómo interactuar con el periférico desde un host Linux. Los scripts están exhaustivamente documentados para que puedas embeber fácilmente los periféricos como subsistemas en diseños mayores.
Visión General del Diseño
A continuación una ilustración gráfica del ejemplo "sensor analógico", destacando las interfaces clave en rojo.

Una representación de un sistema Linux comunicándose con un periférico
Construiremos tres componentes centrales para este ejemplo:
- El hardware periférico que provee la señal del sensor —un transductor analógico en este caso, generando una tensión variable.
- La aplicación host que presenta los datos al usuario —nuestro script Python.
- Configuración RN487x que mapea la señal física a la base de datos GATT usada por el host.
Selección de Componente
La familia RN487x ofrece dos variantes: RN4870 y RN4871. Difieren principalmente en conteo de pines y tipos de I/O disponibles. Abajo una tabla reorganizada de presupuesto de pines para ayudarte a decidir qué chip se adapta mejor a tu proyecto.
Hay tres categorías de pines I/O en los módulos:
| Tipo | Descripción |
| ADC | Entrada analógica: convierte una tensión en valor numérico. |
| PWM | Salida analógica: genera onda cuadrada cuya frecuencia y duty cycle se fijan con dos números. |
| DIO | Entrada o salida digital: nivel alto o bajo representa lógica 1 o 0. |
RN4870

Imagen del datasheet RN487x
| Pin Name/Capability | 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 del datasheet RN487x
| Pin Name/Capability | P1_2 | P1_3 |
| ADC | x | |
| PWM | ||
| DIO | x | x |
Estas tablan aclaran que si tu diseño solo necesita una entrada analógica y sin salidas PWM, el RN4871 es la opción más ligera. Para proyectos que requieren múltiples señales o PWM, el RN4870 es la selección apropiada. En el ejemplo de sensor analógico usamos el RN4871 y conectamos el sensor al pin P1_2.
Capa de Perfil de Atributo Genérico (GATT) de la Pila de Protocolo BLE
Antes de escribir la aplicación host, es esencial entender la API GATT que mediará la comunicación entre host y periférico.
Todos los dispositivos BLE exponen una base de datos GATT que el periférico (servidor) puebla. El host (cliente) usa llamadas GATT para leer o escribir valores identificados por handles o nombres. Operaciones GATT típicas en Python lucen así:
gatt_rq.connect() # Escribe un valor en un handle de característica gatt_rq.write_by_handle(vh_light, str(bytearray([8])))
La primera llamada establece conexión; la segunda escribe datos que se reflejan inmediatamente en las salidas del periférico. La API GATT es soportada por iOS, Android, Windows y Linux. Nuestros ejemplos usan Python en Linux para amplia compatibilidad.
Configuración del Módulo
Para puentear la señal física a la base de datos GATT, debes programar la NVRAM del RN487x con dos bloques clave de configuración:
- Definición de Característica: Asigna espacio en base de datos e identificadores únicos para cada valor.
- Binding de Pin: Mapea pines I/O físicos a características de base de datos, habilitando conversión automática de datos.
El RN487x usa un lenguaje de comandos ligero para configuración. Refiérete al apéndice para detalles sobre establecer conexión de consola y emitir comandos de configuración. Tras programar, la NVRAM del módulo podría verse así:

Todos los valores de configuración residen dentro de una jerarquía de dos niveles de servicios y características —útil al escalar a diseños multi‑sensor o multi‑control.
Esto concluye la parte uno de nuestra serie tutorial RN487x de tres partes. Las partes 2 y 3 cubrirán implementaciones de entrada digital, control digital, sensor analógico y control analógico. La parte 4 discutirá tópicos avanzados aplicables a todos los ejemplos.
Abajo hay un apéndice que describe cómo configurar los módulos antes de sumergirse en los proyectos detallados.
Usando Conexión de Consola para Configurar el RN487x
Alimenta el módulo y establece un enlace serie a tu workstation. Cada circuito demo incluye un jumper "prog" de 3 pines exponiendo RX, TX y GND. Si necesitas guía, una excelente guía está disponible aquí.
Lanza un emulador de terminal. La utilidad miniterm (incluida en muchas distribuciones Python) es buena opción. En un shell, iníciala así:
python -m serial.tools.miniterm --eol LF /dev/ttyUSB0 115200
El baud rate por defecto 115200 es adecuado para RN487x.
Cambia de modo DATA a COMMAND tecleando tres signos de dólar ("$$$") —no verás los caracteres, pero el prompt cambia a:
CMD>
Prueba pulsar d seguido de Enter; el módulo eco su estado:
CMD> BTA=D88039F80080 Name=RN_BLE Connected=no Authen=2 Features=0000 Services=00 CMD>
Habilita echo si quieres ver la tecla que pulsas: presiona + y Enter:
CMD> ECHO ON CMD>
Crear un nuevo servicio GATT es tan simple como emitir un comando PS, por ejemplo:
CMD> PS,59c88760536411e7b114b2f933d5fe66 AOK
Las configuraciones de proyecto también requieren scripts multi‑línea. Inicia un script con WW, introduce cada línea y finaliza con Esc para confirmar:
CMD> ww @CONN |O,08,72 AOK CMD>
Inicialización Común del Módulo
Al reutilizar un módulo RN487x entre proyectos, configuración previa puede interferir con nuevos usos. Realiza los siguientes pasos de limpieza antes de cada ejemplo:
- Borra cualquier script existente.
- Habilita procesamiento de script.
- Borra definiciones de servicio/característica existentes.
- Elimina cualquier función especial del pin que usarás (ej. P1_2).
- Reinicia el módulo.
Ejecuta la secuencia de comandos siguiente:
CMD> WC AOK CMD> SR,0040 AOK CMD> PZ AOK CMD> SW,0A,00 AOK CMD> R,1 Rebooting
Setup Linux Requerido para Ejecutar Scripts Python de Ejemplo
Hardware
Asegura que tu sistema host tenga hardware BLE (Bluetooth 4.0 o superior). Si necesitas adaptador USB, recomendamos uno basado en Qualcomm CSR8510, disponible aquí.
Software
Los scripts de ejemplo han sido probados en Debian 10 y deberían funcionar en otras distribuciones basadas en Debian como Ubuntu. Dos paquetes Python son requeridos que no vienen instalados por defecto:
python-bluez– provee acceso a la pila Bluetooth.gattlib– ofrece bindings Python para operaciones GATT (instalar víapip).
Instalar gattlib construye una librería ELF, así que necesitarás herramientas de build y librerías. Un script helper que instala todas las dependencias está disponible aquí. Tras descargar, haz el script ejecutable y ejecútalo.
Referencias
- Datasheet RN487x
- User Guide RN487x
- GATT API en Windows
- GATT API en iOS
- GATT API en Python
Mantente atento a las próximas partes de esta serie, donde construiremos los ejemplos completos de entrada digital y control digital.
Saltar a proyectos 1 y 2: construyendo una entrada digital y un control digital.
Tecnología de Internet de las cosas
- Mida Sensores Analógicos en Raspberry Pi sin ADC Nativo
- Lectura de Sensores Analógicos con Raspberry Pi y Zabbix: Guía Paso a Paso
- Elecciones de diseño Bluetooth Mesh: Módulo vs. Dispositivo discreto
- Contrinex 2020: Sensores listos para cloud y cortinas láser Bluetooth para seguridad
- ADLINK Despliega IA del Edge a Cloud con Plataforma NVIDIA EGX: Soluciones Edge Computing Aceleradas
- Aprovechando IoT Celular y Bluetooth LE: Enfoque Sinérgico para Conectividad de Próxima Generación
- Aprovechar los datos en el Internet de la Fiabilidad: estrategias para una gestión efectiva
- Del Edge al Cloud: Dominando pipelines de datos IoT
- Digitalización en alimentación y bebidas: mejorando seguridad, trazabilidad y eficiencia
- Insights de Edge Computing y estrategia IoT desde IoT World 2019
- Cómo una Plataforma IIoT Unificada Impulsa el Éxito en Manufactura Digital