Dominando Módulos Bluetooth RN487x da Microchip para Periféricos de Baixa Potência
Aprenda a configurar a família RN487x da Microchip de módulos Bluetooth para seus projetos de periféricos de baixa potência.
Se você está construindo um dispositivo compacto e energeticamente eficiente, Bluetooth é quase sempre a escolha de comunicação padrão. Ao longo dos anos o padrão amadureceu, e hoje uma ampla gama de módulos prontos para uso fornece um system-on-chip (SoC) completo que atende às necessidades de muitos periféricos. Um exemplo popular é o nrf52840 da Nordic, que combina processador de 32 bits, rádio Bluetooth multi-protocolo e complemento completo de interfaces I/O como GPIO, PWM, USB, SPI e I²S.
Embora poderosos, esses SoCs podem ser intimidantes: a curva de aprendizado e tempo de desenvolvimento necessários para integrar o firmware embarcado são significativos. Para muitos casos de uso comuns — sensoriamento ou controle remoto com apenas alguns canais analógicos ou digitais — uma solução mais simples e focada é frequentemente preferível.
Entram a família RN487x da Microchip. Os dois módulos desta família — RN4870 e RN4871 — oferecem múltiplos canais digitais e analógicos bi-direcionais concorrentes enquanto mantêm footprint de design e esforço de firmware mínimos. Cada módulo armazena uma configuração compacta em sua NVRAM, permitindo que você adapte a funcionalidade do periférico aos seus requisitos exatos. Importantemente, os módulos permanecem totalmente compatíveis com o padrão Bluetooth Low Energy (BLE), garantindo pairing seamless com smartphones modernos e outros clientes BLE.
Nesta série de três partes, percorreremos a criação de um periférico Bluetooth-enabled totalmente funcional para quatro tarefas típicas: um sensor digital, um controle digital, um sensor analógico e um controle analógico. Cada exemplo inclui circuito de referência, os passos precisos de configuração RN487x e um script Python simples que demonstra como interagir com o periférico a partir de um host Linux. Os scripts são minuciosamente documentados para que você possa facilmente embutir os periféricos como subsistemas em designs maiores.
Visão Geral do Design
Abaixo está uma ilustração gráfica do exemplo "sensor analógico", destacando as interfaces-chave em vermelho.

Uma representação de um sistema Linux comunicando com um periférico
Construiremos três componentes centrais para este exemplo:
- O hardware do periférico que fornece o sinal do sensor — um transdutor analógico neste caso, gerando tensão variável.
- A aplicação host que apresenta os dados ao usuário — nosso script Python.
- Configuração RN487x que mapeia o sinal físico ao database GATT usado pelo host.
Seleção de Componente
A família RN487x oferece duas variantes: RN4870 e RN4871. Diferem principalmente em contagem de pinos e tipos de I/O disponíveis. Abaixo está uma tabela de pin-budget reorganizada para ajudar você a decidir qual chip melhor serve seu projeto.
Existem três categorias de pinos I/O nos módulos:
| Tipo | Descrição |
| ADC | Entrada analógica: converte tensão em valor numérico. |
| PWM | Saída analógica: gera onda quadrada cuja frequência e duty cycle são definidas por dois números. |
| DIO | Entrada ou saída digital: nível high ou low representa lógica 1 ou 0. |
RN4870

Imagem do 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

Imagem do datasheet RN487x
| Pin Name/Capability | P1_2 | P1_3 |
| ADC | x | |
| PWM | ||
| DIO | x | x |
Essas tabelas clarificam que se seu design precisa apenas de uma entrada analógica única e sem saídas PWM, o RN4871 é a escolha mais enxuta. Para projetos requerendo múltiplos sinais ou PWM, o RN4870 é a seleção apropriada. No exemplo de sensor analógico, usamos o RN4871 e conectamos o sensor ao pino P1_2.
Camada de Perfil GATT (Generic Attribute) da Stack de Protocolo BLE
Antes de escrever a aplicação host, é essencial entender a API GATT que mediará comunicação entre host e periférico.
Todos dispositivos BLE expõem um database GATT que o periférico (server) popula. O host (client) usa chamadas GATT para ler ou escrever valores identificados por handles ou nomes. Operações GATT típicas em Python parecem com isto:
gatt_rq.connect() # Write a value to a characteristic handle gatt_rq.write_by_handle(vh_light, str(bytearray([8])))
A primeira chamada estabelece conexão; a segunda escreve dados que são imediatamente refletidos nas saídas do periférico. A API GATT é suportada por iOS, Android, Windows e Linux. Nossos exemplos usam Python no Linux para ampla compatibilidade.
Configuração do Módulo
Para fazer a ponte do sinal físico ao database GATT, você deve programar a NVRAM do RN487x com dois blocos-chave de configuração:
- Definição de Characteristic: Aloca espaço no database e atribui identificadores únicos para cada valor.
- Pin Binding: Mapeia pinos I/O físicos a characteristics do database, habilitando conversão automática de dados.
O RN487x usa uma linguagem de comando leve para configuração. Consulte o apêndice para detalhes sobre estabelecer conexão console e emitir comandos de configuração. Após programação, a NVRAM do módulo pode parecer com isto:

Todos valores de configuração residem dentro de uma hierarquia de dois níveis de services e characteristics — útil ao escalar para designs multi-sensor ou multi-controle.
Isso conclui a parte um de nossa série tutorial RN487x de três partes. Partes 2 e 3 cobrirão implementações de entrada digital, controle digital, sensor analógico e controle analógico. Parte 4 discutirá tópicos avançados aplicáveis a todos os exemplos.
Abaixo está um apêndice que descreve como configurar os módulos antes de mergulhar nos projetos detalhados.
Usando Conexão Console para Configurar o RN487x
Alimente o módulo e estabeleça link serial para sua workstation. Cada circuito demo inclui um jumper "prog" de 3 pinos expondo RX, TX e GND. Se precisar orientação, um excelente guia está disponível aqui.
Inicie um terminal emulator. O utilitário miniterm (bundled com muitas distribuições Python) é boa escolha. Em um shell, inicie assim:
python -m serial.tools.miniterm --eol LF /dev/ttyUSB0 115200
A baud rate padrão de 115200 é adequada para o RN487x.
Mude de modo DATA para COMMAND digitando três cifrões ("$$$") — você não verá os caracteres, mas o prompt muda para:
CMD>
Tente pressionar d seguido de Enter; o módulo ecoará seu status:
CMD> BTA=D88039F80080 Name=RN_BLE Connected=no Authen=2 Features=0000 Services=00 CMD>
Habilite echo se quiser ver a tecla digitada: pressione + e Enter:
CMD> ECHO ON CMD>
Criar um novo GATT service é tão simples quanto emitir um único comando PS, por exemplo:
CMD> PS,59c88760536411e7b114b2f933d5fe66 AOK
Configurações de projeto também requerem scripts multi-linha. Inicie um script com WW, insira cada linha e finalize com Esc para commit:
CMD> ww @CONN |O,08,72 AOK CMD>
Inicialização Comum do Módulo
Ao reutilizar um módulo RN487x entre projetos, configuração anterior pode interferir com novos usos. Execute os seguintes passos de limpeza antes de cada exemplo:
- Apague qualquer script existente.
- Habilite processamento de script.
- Apague definições existentes de service/characteristic.
- Remova quaisquer funções especiais do pino que você usará (ex: P1_2).
- Reboot o módulo.
Execute a sequência de comandos abaixo:
CMD> WC AOK CMD> SR,0040 AOK CMD> PZ AOK CMD> SW,0A,00 AOK CMD> R,1 Rebooting
Setup Linux Necessário para Rodar Scripts Python de Exemplo
Hardware
Garanta que seu sistema host tenha hardware BLE (Bluetooth 4.0 ou mais novo). Se precisar de adaptador USB, recomendamos um baseado no Qualcomm CSR8510, disponível aqui.
Software
Os scripts de exemplo foram testados no Debian 10 e devem funcionar em outras distribuições baseadas em Debian como Ubuntu. Dois pacotes Python são requeridos que não são instalados por padrão:
python-bluez– fornece acesso à stack Bluetooth.gattlib– oferece Python bindings para operações GATT (instale viapip).
Instalar gattlib builda uma biblioteca ELF, então você precisará de build tools e libraries. Um script helper que instala todas as dependências está disponível aqui. Após baixar, torne o script executável e rode-o.
Referências
- RN487x Datasheet
- RN487x User Guide
- GATT API in Windows
- GATT API in iOS
- GATT API in Python
Fique atento para as próximas partes desta série, onde construiremos os exemplos completos de entrada digital e controle digital.
Pule para projetos 1 e 2: construindo uma entrada digital e um controle digital.
Tecnologia da Internet das Coisas
- IoT Celular e Bluetooth LE: Abordagem Sinérgica para Conectividade de Próxima Geração
- Escolhas de Design Bluetooth Mesh: Módulo vs. Dispositivo Discreto
- Contrinex 2020: Sensores Cloud-Ready e Light Curtains Bluetooth para Segurança
- ADLINK Implanta IA do Edge à Cloud com Plataforma NVIDIA EGX: Soluções de Edge Computing Aceleradas
- Meça Sensores Analógicos no Raspberry Pi sem ADC Nativo
- Leitura de Sensores Analógicos com Raspberry Pi e Zabbix: Guia Passo a Passo
- Aproveitando Dados na Internet da Confiabilidade: Estratégias para Gestão Eficaz
- Da Edge à Cloud: Dominando Pipelines de Dados IoT
- Digitalização em Alimentos e Bebidas: Aprimorando Segurança, Rastreabilidade e Eficiência
- Insights de Edge Computing e Estratégia de IoT do IoT World 2019