Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial Internet of Things >> Tecnologia da Internet das Coisas

Sensores e controles com o módulo RN487x Bluetooth da Microchip

Saiba mais sobre a família RN487x de módulos Bluetooth e como configurá-los para seus projetos de periféricos de baixo consumo de energia.


Se você está desenvolvendo um periférico pequeno e de baixo consumo, há boas chances de considerar o Bluetooth como sua camada de comunicação.

Conforme o padrão evoluiu, os dispositivos conectados por Bluetooth proliferaram. Foram introduzidos módulos de hardware que fornecem um SoC completo (sistema no chip) para quase todos os projetos de periféricos. O Nordic nrf52840 é um bom exemplo. O núcleo do sistema é um processador de 32 bits e rádio Bluetooth multiprotocolo. Este núcleo é cercado por todas as interfaces de que você pode precisar; GPIO, PWM, USB, SPI, I 2 S e muitos mais.

A desvantagem deste poderoso SoC, e outros, é a complexidade. Há uma curva de aprendizado significativa e um tempo de desenvolvimento necessário para criar e integrar o software embarcado necessário para esses SoCs.

Para alguns dos tipos mais comuns de periféricos, entretanto, existem alternativas mais simples. Se o seu periférico é principalmente um sensor remoto ou um controle remoto, com um número limitado de canais (analógico e digital), você provavelmente pode atingir seus objetivos com o módulo RN487x fabricado pela Microchip.

Esta família de dois módulos Bluetooth fornece vários canais digitais e analógicos bidirecionais simultâneos. O módulo é feito sob medida para projetos específicos apenas armazenando um pouco da configuração na NVRAM do módulo. Apesar da simplicidade, o módulo ainda segue o padrão BLE (Bluetooth low-energy), por isso é compatível com os mais novos clientes Bluetooth, como smartphones modernos.

Nesta série, demonstraremos o uso do módulo RN487x. Criaremos um periférico conectado por Bluetooth funcional para cada uma das quatro tarefas; um sensor digital, um controle digital, um sensor analógico e um controle analógico. Cada exemplo inclui um circuito nominal e a configuração necessária no RN487x. Um script de aplicativo simples para exercitar o periférico também é fornecido. Os pontos de interface no script do aplicativo são bem documentados; maximizando o potencial para incorporar esses periféricos como subsistemas em projetos maiores.

Visão geral do design


Vejamos uma análise gráfica do exemplo de ‘sensor analógico’, com as principais interfaces em vermelho.




Uma representação de um sistema Linux se comunicando com um periférico



Existem três elementos de sistema que iremos criar. Para o periférico, devemos criar um hardware que forneça o sinal do nosso sensor; o transdutor neste exemplo. Ele gera uma voltagem analógica variável. Para o usuário, iremos criar um aplicativo para apresentar os dados; o script Python neste exemplo.

O script deve usar a API GATT para transferir informações de e para o periférico. Também precisaremos criar algumas configurações no módulo RN487x. Esta configuração controlará o fluxo de dados entre o aplicativo e o hardware.

Seleção de componentes


Existem dois módulos na família RN487x; o RN4870 e o RN4871. Eles diferem no número e tipo de pinos fornecidos para E / S. Você pode encontrar essas restrições na folha de dados e no guia do usuário, mas elas estão um pouco dispersas. Abaixo está uma reorganização do orçamento de pinos para os dois chips. Esse arranjo deve tornar mais fácil ver qual chip você precisa para o seu periférico.

Existem três tipos de pinos de E / S disponíveis nos módulos c:


Tipo Descrição
ADC Entrada analógica:um nível de sinal de entrada é convertido em um intervalo numérico.
PWM Saída analógica:um par de números é convertido em uma onda quadrada. Os números controlam a frequência e o ciclo de trabalho da onda quadrada.
DIO Entrada ou saída digital:Para entrada digital, o nível de sinal alto ou baixo representa 1 ou 0, respectivamente. Vice-versa para saída digital.



E aqui estão os orçamentos de alfinetes para os dois módulos:


RN4870



Imagem da folha de dados RN487x


Nome / capacidade do pino 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 da folha de dados RN487x


Nome / capacidade do pino P1_2 P1_3
ADC x
PWM
DIO x x



Essas tabelas devem deixar claro que se você não precisar do PWM e só precisar gerenciar um ou dois sinais, use o 4871. Isso economizará recursos. Se você precisa de PWM, ou se deseja gerenciar mais de dois sinais, você precisa do 4870. Para nosso sensor analógico, temos apenas uma entrada analógica, então o 4871 seria suficiente. Gostaríamos de conectar o sinal ao pino P1_2 do módulo.

Camada de perfil GATT (atributo genérico) da pilha de protocolo BLE


Estamos quase prontos para implementar alguns exemplos reais. Mas, para escrever o aplicativo do usuário, precisamos de um entendimento mais preciso da API que usaremos quando falarmos com o periférico.

Todos os dispositivos Bluetooth Low Energy usam o perfil de atributo genérico (GATT) para troca de dados estruturados. Nesse modelo, o periférico é organizado como um servidor que contém um banco de dados simples. O banco de dados, por sua vez, contém várias variáveis ​​que representam os dados úteis. Aplicativos como nosso script Python são organizados como clientes que usam a API GATT para fazer consultas baseadas em nomes no banco de dados. A API pode ser usada para ler valores do banco de dados e gravar valores no banco de dados.

Como uma prévia, aqui estão duas chamadas de método da API GATT úteis em Python:
 gatt_rq.connect () gatt_rq.write_by_handle (vh_light, str (bytearray ([8])) 

O primeiro é usado para estabelecer uma conexão com o periférico. O segundo grava alguns valores no banco de dados; esses valores são imediatamente expressos como saídas digitais no periférico. O primeiro argumento para o método ‘escrever’ é um identificador específico para a saída ou saídas digitais que desejamos controlar. Existem apenas mais algumas linhas necessárias para um exemplo funcionalmente completo.

Esta API é exposta como parte dos serviços Bluetooth no iOS, Android, Windows e Linux. Os exemplos neste artigo foram escritos em Python e serão executados em muitas distribuições Linux comuns.

Configuração do Módulo


O parâmetro ‘vh_handle’ no método de script acima nos leva ao elemento final neste padrão de design. O parâmetro é uma referência no software para um sinal de nível físico específico no periférico. Mas como esse caminho de dados é concluído? Existem duas peças de configuração na NVRAM do RN487x que farão isso; definição característica e fixação de pinos.

A configuração do RN487x é carregada no módulo com uma linguagem de comando personalizada. Consulte o apêndice para obter um guia geral sobre como fazer uma conexão do console com o módulo e sobre a emissão de comandos de configuração.

Depois de emitirmos esses comandos, a configuração não volátil dentro do RN487x se parecerá com isto:







Observe que todos os valores de dados existem em uma hierarquia de dois níveis de 'serviços' e 'características'. Esta organização é mais do que precisamos, mas torna-se útil para sistemas complexos onde vários sensores e controles existiriam em serviços logicamente separados.




Isso conclui a primeira parte de nossa série de três partes no módulo RN487x. As partes 2 e 3 utilizarão o mesmo padrão de projeto para criar uma entrada digital, um controle digital, um sensor analógico e um controle analógico.

A Parte 4 também inclui alguns tópicos para estudo posterior que se aplicam a todos os exemplos.

Abaixo, você encontrará um Apêndice de informações para configurar seus módulos e usá-los antes de cada uma das descrições de projeto que se seguirão em outros artigos.

Usando uma conexão de console para configurar o RN487x


Para configurar o RN487x, primeiro forneça energia ao módulo e estabeleça uma conexão serial entre o módulo e uma estação de trabalho. Cada um de nossos circuitos de demonstração tem um jumper ‘prog’ de 3 pinos que expõe os sinais RX, TX e GND necessários. Se você não tiver certeza de como fazer essa conexão com sua estação de trabalho, um guia excelente está disponível aqui.

Inicie um emulador de terminal em sua estação de trabalho. Um emulador que é particularmente adequado e amplamente disponível é o utilitário ‘miniterm’ incluído na maioria dos ambientes Python. Em um shell de estação de trabalho, ele pode ser iniciado assim:



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

Este exemplo mostra um nome de porta (/ dev / ttyUSB0) apropriado para um sistema Linux. A forma do nome da porta será diferente para outros sistemas operacionais. A taxa de transmissão padrão para o módulo é 115200 e há poucos motivos para alterá-la.

O módulo RN487x está no modo DADOS por padrão. Precisamos do modo COMMAND. Este modo é ativado digitando três caracteres de cifrão (‘$$$’) no aplicativo do emulador de terminal. Você não verá os caracteres na janela do terminal, mas o resultado deve ser um prompt de comando retornado pelo RN4871:
 CMD> 

Tente pressionar a tecla 'd' seguida da tecla 'enter'. Você deve ver algo assim como resultado:
 CMD> BTA =D88039F80080 Nome =RN_BLE Conectado =não Authen =2 Recursos =0000 Serviços =00 CMD> 

Esta é uma descrição mínima do estado do módulo. Observe que o interpretador de comandos não exibiu o caractere que você digitou ('d'). Você deve ativar o 'echo' para corrigir isso. Faça isso pressionando a tecla '+' seguida da tecla 'enter'. O dispositivo deve responder assim:
 CMD> ECO LIGADO CMD> 

Agora você está em um ponto em que pode concluir várias tarefas de configuração descritas no restante deste projeto. A criação de um serviço, por exemplo, é realizada simplesmente digitando um comando ‘PS’ completo em uma linha, seguido pela tecla ‘enter’. Ex:
 CMD> PS, 59c88760536411e7b114b2f933d5fe66 AOK 

Cada uma das configurações do projeto também requer que um script de várias linhas seja confirmado para o módulo NVRAM. Este tipo de comando multilinha requer um pouco mais de explicação. Você começa a entrada do script com um comando ‘WW’, seguido de ‘enter’. Em seguida, digite cada linha do script. Cada linha do script, incluindo a última linha, também é encerrada com a tecla ‘enter’.

Finalmente, você confirma o script pressionando a tecla ‘esc’. Ex:
 CMD> ww @CONN | O, 08,72 UM OK CMD> 

Inicialização comum do módulo


Se você usou um módulo RN487x para um dos exemplos neste projeto, ou se você usou o módulo para alguma finalidade totalmente diferente, e está prestes a configurar o módulo para outro exemplo, é possível que o módulo tenha alguma configuração que entrará em conflito com o próximo uso pretendido.

As seguintes etapas devem ser executadas antes de cada exemplo neste projeto:

Use a seção do apêndice anterior para chegar ao shell de comando do módulo. Em seguida, use a seguinte sequência de comando para realizar a inicialização necessária:
 CMD> WC UM OK CMD> SR, 0040 UM OK CMD> PZ UM OK CMD> SW, 0A, 00 UM OK CMD> R, 1 Reinicializando 

Instalação do Linux necessária para executar exemplos de scripts Python

Hardware


O sistema que executa esses scripts, é claro, precisa de hardware que ofereça suporte a Bluetooth Low Energy (BLE). O BLE foi introduzido na versão 4, portanto, se o seu hardware Bluetooth especificar uma versão abaixo desta, provavelmente não funcionará para esses exemplos.

Se você deseja comprar um adaptador USB para uma estação de trabalho a fim de experimentar esses exemplos, sugiro qualquer adaptador que empregue o Qualcomm CSR8510. Uma instância está disponível para compra aqui.


Software


Esta configuração foi verificada para Debian 10. Deve ser aplicável para distribuições baseadas em Debian como Ubuntu. Existem dois componentes acessados ​​diretamente por estes exemplos que não são instalados por padrão no Debian 10;

A instalação ‘pip’ de ‘gattlib’ cria uma biblioteca ELF. Este processo também requer algumas ferramentas e bibliotecas.

Juntando tudo isso, uma lista de pacotes deve ser solicitada ao gerenciador de pacotes do sistema, seguida por uma única solicitação de módulo para ‘pip’. Um script para concluir essas ações foi fornecido aqui. Se você optar por executar o script, precisará dar a ele permissões de "execução" após o download.

Referências


Volte para as próximas partes desta série de projetos, onde criaremos os exemplos completos.

Pule para os projetos 1 e 2:construção de uma entrada digital e controle digital.

Tecnologia da Internet das Coisas

  1. A sinergia de IoT celular e Bluetooth LE
  2. Projetando com Bluetooth Mesh:Chip ou módulo?
  3. Contrinex:sensores inteligentes prontos para a nuvem e cortinas de luz de segurança com interface Bluetooth
  4. ADLINK:implante AI da borda para a nuvem com Edge AI Solutions e a plataforma NVIDIA EGX
  5. Sensores analógicos sem entradas analógicas no Raspberry Pi
  6. Sensores analógicos lendo com Raspberry Pi e Zabbix Supervisor
  7. O que eu faço com os dados ?!
  8. Aproveitamento de dados IoT da borda para a nuvem e vice-versa
  9. Digitalização e a indústria de alimentos e bebidas
  10. The Edge e IoT:Insights do IoT World 2019