Conexão e comunicação entre objetos inteligentes
Análise de dados para IoT
Protocolos de aplicação para IoT
Nos dois artigos anteriores discutimos aspectos sobre prototipação com dispositivos embarcados, desde a escolha de hardware e modalidade de software até o design de interfaces de usuário para estes dispositivos. Neste artigo trataremos de questões importantes relacionadas à prototipação e desenvolvimento em uma aplicação específica e cada vez mais popular, Internet of Things (IoT).
IoT tem como objetivo conectar dispositivos e objetos do dia-a-dia de forma a se comunicarem e interagirem para nos permitir ter um senso de controle do mundo físico à medida que esses objetos e dispositivos se tornam "inteligentes" [Hanes, 2017].
Algumas questões pertinentes em IoT são [Hanes, 2017]:
Escalabilidade: ao passo que se almejam ter todos os dispositivos e objetos conectados e se comunicando, é crescente a necessidade por protocolos de rede que suportam uma imensa quantidade de conexões simultâneas. Uma rede típica de IoT envolve de milhares a milhões de dispositivos, fazendo com que o protocolo IPv6 seja o mais ideal para atender essa demanda.
Segurança: com maiores interações e comunicações entre dispositivos, aumentam-se os pontos de ataque e a facilidade de acessar todos os demais dispositivos. Sistemas de IoT devem ser capazes de identificar e autenticar todas as entidades envolvidas na rede e prestando serviços a ela. Além disso, é importante usar uma plataforma de gerenciamento de conectividade com políticas de segurança para garantir ações imediatas caso detectado algum comportamento anômalo.
Privacidade: esses dispositivos e objetos participam mais do dia-a-dia das pessoas, consequentemente obtém mais dados sobre os indivíduos, suas atividades e até sobre empresas e companhias em que esses objetos são usados. Por isso, é necessário garantir que todos os dados enviados na rede estão criptografados e que todos os dados armazenados estão devidamente protegidos.
Grande quantidade de dados: IoT possui diversos sensores que geram uma grande quantidade de dados com informações relevantes para tornar os dispositivos e objetos mais "inteligentes". O desafio é analisar essa grande quantidade de dados de diferentes fontes e formatos de forma eficiente no quesito de tempo de resposta. Nesse contexto, os conceitos e ferramentas de Edge Analytics estão sendo amplamente estudados e desenvolvidos.
Interoperabilidade: é importante que diferentes tecnologias, protocolos e arquiteturas se comuniquem entre si. A ideia de IoT é que novos dispositivos e objetos possam ser adicionados e interajam com a rede IoT sem necessidade de grandes configurações e de adaptar essa rede já existente.
A partir dessas questões pertinentes para o desenvolvimento de sistemas de IoT, vários modelos de arquitetura IoT foram propostos. Um desses modelos foi proposto em 2014 o Fórum mundial de IoT (IoT World Forum – IoTWF) publicou um modelo referência de arquitetura IoT com as seguintes camadas:
Figura 1: Sete camadas do modelo de referência de arquitetura IoT proposto no IoTWF 2014. Fonte: adaptado de [Hanes, 2017]
De acordo com as camadas apresentadas na Figura 1, observamos um fluxo de controle do Center (podendo ser um servidor ou na nuvem) para o Edge (que são dispositivos embarcados, sensores, etc.), enquanto que o fluxo de dados ocorre da primeira camada, Edge, para a última, Center. Detalhando mais cada uma dessas camadas:
Camada 1 – Dispositivos físicos e controladores: camada dos diversos dispositivos endpoint e sensores que capturam, enviam e recebem dados.
Camada 2 – Conectividade: é responsável pela transmissão de dados de forma eficiente e confiável, principalmente entre a camada 1 (dispositivos) e a camada 3 (processamento).
Camada 3 – Processamento no Edge: conhecida como a camada "fog", sendo focada na redução das informações para armazenamento e processamento para as camadas seguintes.
Camada 4 – Armazenamento dos dados: responsável por capturar as informações transmitidas pela camada anterior e armazenar para ser utilizada pelas aplicações quando necessário.
Camada 5 – Abstração dos dados: combina e padroniza diferentes formatos de dados e garante consistência semântica entre os dados de diferentes origens.
Camada 6 – Aplicação: interpreta os dados usando softwares, monitorando, controlando e gerando relatórios baseados nas análises dos dados.
Camada 7 – Colaboração e Processos: consome e compartilha informações sobre a aplicação. É usada para mudar as regras dos processos e apresentar os resultados obtidos com a arquitetura de IoT.
Considerando o modelo referência de arquitetura IoT proposto no IoTWF, podemos resumir um sistema IoT nos seguintes componentes: os objetos inteligentes (Things de IoT), a conexão e comunicação entre eles e/ou servidor, a análise de dados, e a aplicação que controla o sistema. A seguir vamos apresentar mais detalhes sobre esses componentes fundamentais em IoT.
São uma rede de objetos do dia a dia capazes de aprender e interagir com o ambiente de uma forma significativa. Um objeto inteligente geralmente possui os seguintes componentes [Hanes, 2017]:
Unidade de processamento: necessária para coletar, processar e analisar dados obtidos pelos sensores, coordenar os atuadores e controlar as funções dos objetos, como comunicação e gerenciamento de energia. O mais comum é um microcontrolador.
Sensores: tem a função de medir alguma grandeza física e converter essa leitura para uma representação digital. Algumas categorias de sensores são [Holdowsky, 2015]:
Posição: mede a posição de um objeto relativa ou absoluta, como o sensor de proximidade.
Velocidade e aceleração: mede a variação de posição de um objeto (velocidade do movimento), podendo ser o quanto o objeto se move em uma direção (linear) ou o quanto ele rotaciona (angular). E também as mudanças nessa velocidade (aceleração). Geralmente essas medidas são obtidas pelos sensores giroscópio e acelerômetro, respectivamente.
Força: detecta se há uma força sendo aplicada no objeto e a magnitude dela, como medidor de força e sensor touch.
Acústico: mede níveis de som e converte a informação em sinais digitais ou analógicos, como o microfone.
Luz: detecta a presença de luz, visível ou não, como sensor de infravermelho e o fotodetector.
Umidade: mede a umidade do ar ou de uma massa, podendo ser absoluta, relativa, proporção de massa, entre outros. Exemplos desses sensores são o higrômetro e o humistor.
Temperatura: mede a quantidade de calor ou frio presente no sistema. Podem ser a partir de contato físico, como o termômetro, ou sem contato físico usando convecção ou radiação, como o medidor de temperatura.
Atuadores: recebem um sinal de controle, como um sinal elétrico ou comando digital, que dispara algum efeito físico, como movimento ou força. Podem ser classificados de acordo com a modalidade de energia utilizada, como exemplos temos:
Atuadores mecânicos: alavanca, manivela.
Atuadores elétricos: transistor bipolar, diodo.
Atuadores eletromagnéticos: eletroímã, solenóide.
Dispositivo de comunicação: responsável por conectar um objeto inteligente com os demais e com alguma rede local ou a Internet. Eles podem ser por cabo ou por wireless, sendo normalmente este último.
Fonte de energia: geralmente os objetos inteligentes são limitados quanto a energia, uma vez que sua implantação é de longo prazo. Por isso, é necessária uma unidade de gerenciamento eficiente do consumo de energia e obtenção de fontes alternativas, como solar.
Os objetos inteligentes precisam estar conectados de alguma forma ao um servidor (seja local, ou na nuvem) para que as informações coletadas por eles sejam utilizadas e para que também possam receber dados desse servidor ou dos outros objetos. Para isso, há diversos protocolos existentes no mercado com diferentes características, podendo ser agrupados por diversos critérios como alcance, bandas de frequência, consumo de energia, taxas de transferência, latência e estabilidade na comunicação, entre outros. Os protocolos mais utilizados em IoT (considerando a forma de conexão mais utilizada, wireless), com suas principais características e casos de uso são [Hanes, 2017]:
IEEE 802.15.1 (Bluetooth e BLE): focada em comunicações de baixo alcance, tendo uso limitado para IoT. Utiliza topologia estrela, com uma estação base que se comunica com objetos inteligentes. O BLE (Bluetooth Low Energy) é o mais utilizado em IoT, pois tem como principal foco a duração de bateria. Um caso de uso comum deste em IoT são Wearables, os quais se comunicam com um dispositivo de coleta próximo (como um celular, por exemplo), e esse dispositivo é responsável por transferir esses dados para um servidor.
IEEE 802.15.4: focada em objetos inteligentes de baixo custo, que usam baixa taxa de transmissão e possuem baixo consumo de energia. Este protocolo suporta as topologias de rede estrela, cluster-tree e mesh. É base para vários protocolos de rede de organizações industriais e comerciais, sendo ZigBee o mais conhecido, o qual foi promovido pela Alliance ZigBee. Utiliza as camadas físicas e MAC do protocolo 802.15.4, mas define as camadas acima. Seus principais usos são casas inteligentes e automação em estabelecimentos comerciais.
Figura 2: Topologias cluster-tree, mesh e estrela.
IEEE 802.15.4g e IEEE 802.15.4e: se baseia no protocolo 802.15.4-2011, fazendo adaptações necessárias nesse protocolo para utilização em IoT. O protocolo IEEE 802.15.4g busca particularmente otimizar grandes redes mesh para espaços externos. Para isso, integrou modificações na camada física e MAC no protocolo original. Seus principais casos de uso são em aplicações para cidades inteligentes, como iluminação pública, sensores de ambiente, estacionamentos inteligentes, estações para abastecimento de veículos elétricos, entre outros. Já o protocolo IEEE 802.15.4e focou principalmente em melhorias para a camada MAC para atender as necessidades de domínios de aplicações como automação de processos industriais e redes inteligentes.
IEEE 802.11ah: especifica uma versão de alcance sub-GHz para o protocolo Wi-Fi (IEEE 802.11). Oferece suporte para dispositivos com baixo consumo de energia, que enviam pequenos pacotes de dados em baixa velocidade, com capacidade de escalar para altas velocidades. Por isso, seus principais casos de uso são: monitoramento de ambiente e de agropecuária; sensores para processos industriais; sensores para assistência média em locais internos; automação em prédios e casas; e aplicações em ambientes externos com maior alcance.
LoRaWAN: é uma tecnologia LPWAN (Low-Power Wide-Area Network), adaptada para alcance de longas distâncias, estreita largura de banda, grande autonomia em dispositivos alimentados à bateria, baixo bitrate e baixo consumo de banda. Foi desenvolvida a partir do padrão LoRa, que é um padrão de camada física que utiliza bandas de frequência sub-GHz. A LoRaWAN usa a camada física LoRa ao passo que define um protocolo completo de rede, com todas as camadas. Sua topologia é definida como "estrela de estrelas", em que os objetos inteligentes trocam pacotes a partir de gateways que por sua vez, agem como pontes, com um servidor central da rede.
Figura 3: Topologia da LoRaWAN, conhecida como "estrela de estrelas"
NB-IoT: buscando otimizar as tecnologias de rede de celular para IoT, a 3GPP propôs em 2015 a tecnologia NB-IoT (Narrowband IoT). Esta consiste em uma tecnologia adaptada para uma grande quantidade de dispositivos com baixo tráfego de dados e baixo consumo de energia, e com melhor cobertura em ambientes internos.
Comparando esses protocolos descritos de acordo com o alcance de transmissão e as bandas de frequências, temos o seguinte gráfico:
Figura 4: Comparação dos protocolos wireless de acordo com o alcance de transmissão e as bandas de frequência.
Fonte: feito pelos autores, baseado em [Hanes, 2017].
Percebemos que a maioria dos protocolos adaptados para IoT operam nas bandas sub-GHz, as quais variam de acordo com a região sendo as mais comuns 169MHz, 433MHz, 868MHz e 915MHz. Além disso, a maioria são de curto a médio alcance (menor do que 5km), sendo somente LoraWAN (no máximo 15Km em áreas rurais) e NB-IoT (até cerca de 40km) consideradas de longo alcance de transmissão.
A quantidade massiva de dados gerada pelos objetos inteligentes é um dos maiores desafios em IoT. Esses objetos geram dados estruturados e não estruturados. O primeiro tipo consiste em dados organizados estruturalmente de acordo com um modelo ou esquema, como planilhas e base de dados. Já os não estruturados não seguem uma estrutura fixa, como a fala, imagens e vídeos.
Essa quantidade massiva de dados juntamente com a heterogeneidade destes, geram outros desafios [Hanes, 2017]:
Escalabilidade: o número de objetos inteligentes em uma rede IoT está sempre crescendo e estes estão continuamente enviando dados, fazendo com que a quantidade de dados aumente extremamente rápido.
Volatilidade dos dados: como os dados podem ser estruturados e não estruturados, além do modelo estrutural poder sofrer alterações ao longo do tempo, muitas vezes é necessário um esquema de armazenamento dinâmico.
Devido a esses problemas, bases de dados NoSQL tendem a ser mais adequadas para IoT do que as baseadas em SQL. Essas bases NoSQL não obriga o uso de um esquema específico, sendo flexível para mudanças na estrutura dos dados e oferecendo suporte a modelos complexos de dados.
Para gerar significado na massiva quantidade de dados gerada, estes geralmente são processados por técnicas de Big Data ou Aprendizado de Máquina. Estas técnicas buscam aprender padrões nos dados para descrever os eventos, realizar diagnósticos, fazer predições ou prescrever ações. O aprendizado pode ocorrer localmente, processando os dados no próprio objeto inteligente ou no gateway; ou remotamente, em que os dados coletados pelos objetos inteligentes são enviados para um data center, que pode ser um servidor ou na nuvem. O aprendizado local é conhecido como Edge Analytics, a seguir vamos descrever esse processo e suas vantagens. Também apresentamos o processo de aprendizado remoto, mais conhecido como Big Data Analytics.
Consiste em realizar análise de dados usando técnicas e algoritmos de mineração de dados ou aprendizado de máquina, rodando nos próprios objetos inteligentes. Esta abordagem tem como principais vantagens:
Redução da quantidade de dados sendo transferida para o servidor/nuvem, enviando somente o resultado ou status de alguma tarefa ou operação específica e reduzindo os custos em largura de banda e estrutura de rede;
Processamento e resposta em tempo real, eliminando a possível latência entre o envio, alocação do processo no servidor ou nuvem, e retorno do resultado;
Análise e resposta imediata às falhas do próprio dispositivo, reduzindo a latência na tomada de decisões e permitindo a aplicação de técnicas de aprendizado de máquina em sistemas cada vez mais críticos;
Há fabricantes de microcontroladores produzindo soluções com arquiteturas voltadas a aplicações de aprendizado de máquina (exemplo: ARM Cortex M55), o que aumenta a eficiência dessas operações.
Algumas ferramentas disponíveis e amplamente utilizadas em Edge Analytics são:
AWS IoT Greengrass ML Inference: oferece suporte para realizar inferência localmente nos objetos inteligentes a partir de modelos de aprendizado de máquina treinados na nuvem usando o Amazon SageMaker ou o próprio modelo previamente treinado e armazenado no Amazon S3 [Greengrass, 2021].
Edge Impulse: utiliza técnicas de ML embarcada, ou TinyML, para realizar inferências usando modelos de aprendizado máquina armazenados no próprio dispositivo após o treinamento na nuvem. Oferece suporte para integrar o modelo ao firmware do dispositivo, eliminando qualquer dependência de recursos externos, assim como para executá-lo em dispositivos contendo SOs de propósito geral, usando SDKs específicos, ou em um gateway usando a ferramenta WebAssembly [EdgeImpulse, 2021].
Tensorflow Lite (TF Lite): framework de aprendizado profundo com código aberto para realizar inferências no próprio dispositivo. O modelo deve ser treinado em um servidor ou PC usando Tensorflow, então convertido para TF Lite e então implantado nos objetos inteligentes, dispositivos embarcados ou móveis. Esses modelos podem ser otimizados para serem mais eficientes e demandarem menor quantidade de recursos de armazenamento e memória [TFlite, 2021].
Se refere a um conjunto de ferramentas que recebe os dados dos objetos inteligentes, armazena, processa e analisa essa massiva e heterogênea quantidade de dados. A plataforma desse conjunto de ferramentas deve ser capaz de oferecer esses três requisitos [Hanes, 2017]:
Velocidade para processar e analisar os dados que estão sendo produzidos pelos objetos inteligentes a todo momento e em taxas de captura diferentes.
Variedade no tipo de dados a serem processados e armazenados, os quais podem ser estruturados, não estruturados ou semiestruturados.
Volume de dados capaz de receber, processar, armazenar e analisar, os quais podem variar de gigabytes até exabytes.
Podemos destacar algumas plataformas que oferecem esse conjunto de ferramentas:
Apache Hadoop: plataforma open-source para o armazenamento e processamento distribuído de uma quantidade massiva e heterogênea de dados, com grande poder de processamento e grande capacidade de executar múltiplas tarefas ao mesmo tempo devido sua característica de cluster. Envolve diversas ferramentas, como por exemplo Hadoop Distributed File System (HDFS), o qual consiste no principal sistema de arquivos distribuído do Hadoop; Apache Pig, que é uma linguagem de alto nível usada para executar consultas em grandes bases de dados; e Apache Spark, o qual consiste em uma ferramenta para análise de dados eficiente processando os dados em memória de alta performance. Por esses motivos, Hadoop é o mais utilizado em Big Data Analytics e integra-se com outras plataformas e ferramentas. Pode ser implementado tanto em um data center local quanto em uma infraestrutura na nuvem [Databricks, 2021, Hadoop, 2021].
RapidMiner: plataforma com ferramentas para pré-processamento dos dados, aprendizado de máquina, mineração de dados e análise preditiva. As ferramentas mais conhecidas são RapidMiner Studio, o qual oferece um workflow visual para projetar modelos e prototipação; RapidMiner Server, que é um servidor de alta performance com capacidade de automação dos processos analíticos; e RapidMiner Radoop, o qual é um software cliente com interface gráfica intuitiva para analisar dados em um cluster Apache Hadoop. O RapidMiner pode ser usado tanto localmente quanto em uma infraestrutura na nuvem [RapidMiner, 2021].
MongoDB: definido como um banco de dados NoSQL open-source, de propósito geral e baseado em documentos baseados em JSON. Oferece diversos recursos para armazenamento de dados com estrutura flexível e de forma distribuída, para acessar e analisar os dados em tempo real. As principais ferramentas dessa plataforma são: MongoDB Atlas, o qual oferece recursos para hospedar e gerenciar os dados na nuvem; MongoDB Compass, que consiste em uma interface gráfica para consultar, agregar e analisar os dados; e MongoDB Charts, usado para criar representações visuais dos dados. Disponível nas versões nuvem ou servidor local [MongoDB, 2021].
As principais vantagens dessa abordagem de Big Data Analytics é a capacidade de realizar análises profundas de forma complexa e de uma quantidade extremamente grande de dados sem estrutura bem definida. Entretanto, requer largura de banda para transferir todos os dados ao servidor ou nuvem, o que também dificulta a realização de análises em tempo real.
Os protocolos baseados em web podem ser inviáveis para IoT em algumas aplicações, por isso novos protocolos mais leves têm sido desenvolvidos especificamente para IoT. Os mais conhecidos são:
CoAP (Constrained Application Protocol): esse protocolo foi projetado principalmente para facilitar a troca de mensagens entre endpoints (os quais normalmente, são os objetos inteligentes) usando UDP. Por isso, o formato de mensagem deste protocolo é simples e flexível, gerando baixo overhead, e facilitando o processo de análise das mensagens nesses dispositivos com recursos limitados. Funciona tanto no protocolo IPv4 quanto IPv6. Inclui os métodos de requisição e resposta GET, POST, PUT e DELETE. Portanto, esse protocolo otimiza a troca de mensagens para os dispositivos e redes de IoT com recursos limitados, ao mesmo tempo que utiliza métodos e padrões web já conhecidos para facilitar seu uso por programadores. As comunicações usando CoAP em IoT podem ocorrer entre dispositivos que estão na mesma rede local, ou entre dispositivos e servidores da nuvem, ambos operando com IP. A Figura 5 apresenta os caminhos possíveis que essas comunicações podem ocorrer:
Figura 5: Caminhos possíveis de comunicação usando CoAP, podendo haver comunicações diretas entre os clientes e comunicação entre cliente e servidor.
Fonte: baseado em [PickData, 2019]
MQTT (Message Queuing Telemetry Transport): usa o protocolo TCP, o que garante a entrega dos pacotes de forma ordenada e sem perda. Com pacotes leves, esse protocolo oferece baixo overhead, além de possuir um formato de mensagem flexível e três níveis de qualidade de serviço (QoS). Um cliente usando este protocolo pode agir como publisher para enviar ao servidor (também conhecido como broker), ou como um subscriber para receber todos ou dados específicos que foram enviados ao servidor. Esse servidor gerencia os processos de inscrição e publicação, além de se encarregar do envio dos dados aos subscribers. Cada cliente não sabe da existência dos demais, e tanto o cliente como o servidor podem enviar e receber dados. Esse processo é demonstrado na Figura 6:
Figura 6: Clientes agindo como publishers e/ou subscribers. O servidor (message broker) é responsável por controlar essas inscrições e publicações.
Essa série de artigos abordou diversos aspectos envolvidos no desenvolvimento de protótipos com dispositivos embarcados, finalizando com este último com enfoque nas questões relacionadas à prototipação em IoT. Com essa série, buscamos fornecer orientações às pessoas que estão iniciando na área de prototipação com embarcados, que estão com dúvidas em relação a alguma das etapas do desenvolvimento de protótipos, ou que se interessam por essa área.
[Hanes, 2017] David Hanes, Gonzalo Salgueiro, Patrick Grossetete, Robert Barton, Jerome Henry. IoT fundamentals: Networking technologies, protocols, and use cases for the internet of things. "Cisco Press", 2017.
[Holdowsky, 2015] Jonathan Holdowsky, Monika Mahto, Michael Raynor, Mark Cotteleer. Inside the internet of things (IoT). "Deloitte University Press", 2015.
[RapidMiner, 2021] RapidMiner Documentation. Versão 9.10, agosto de 2021. URL: https://docs.rapidminer.com/. Acessado em 24 de setembro de 2021.
[Databricks, 2021] Hadoop Ecosystem. URL: https://databricks.com/glossary/hadoop-ecosystem. Acessado em 24 de setembro de 2021.
[Hadoop, 2021] Apache Hadoop 3.3.1. URL: https://hadoop.apache.org/docs/current/. Acessado em 24 de setembro de 2021.
[MongoDB, 2021] MongoDB Documentation. URL: https://docs.mongodb.com/. Acessado em 24 de setembro de 2021.
[Greengrass, 2021] AWS IoT Greengrass ML Inference. URL: https://aws.amazon.com/pt/greengrass/ml/. Acessado em 24 de setembro de 2021.
[EdgeImpulse, 2021] Getting Started. URL: https://docs.edgeimpulse.com/docs. Acessado em 24 de setembro de 2021.
[TFlite, 2021] For mobile & IoT. URL: https://www.tensorflow.org/lite?hl=pt-br. Acessado em 24 de setembro de 2021. [PickData, 2019] MQTT vs CoAP, the battle to become the best IoT protocol. URL: https://www.pickdata.net/news/mqtt-vs-coap-best-iot-protocol. Acessado em 27 de setembro de 2021.