Conteúdo


Lições aprendidas em minhas primeiras experiências no desenvolvimento da IoT

Comments

Quando você decide criar um aplicativo IoT, precisa considerar vários dispositivos, kits de hardware, SDKs e protocolos de comunicação além de seu ambiente de desenvolvimento de software típico. À medida que me aventurava no desenvolvimento da IoT, aprendia várias lições importantes:

  • é necessária experiência com vários SDKs de dispositivo
  • MQTT é o melhor protocolo de comunicação para IoT
  • contêineres simplificam muito o desenvolvimento da IoT
  • é possível usar tecnologia blockchain para proteger soluções de IoT

O que torna o desenvolvimento de IoT exclusivo?

O desenvolvimento de aplicativos de IoT é diferente de outros tipos de desenvolvimento de softwares devido às características exclusivas da IoT:

  • Cada dispositivo de IoT geralmente possui uma pequena quantidade de poder computacional. Em comparação com computadores ou smartphones, a função principal de dispositivos de IoT não é a computação. Geralmente, eles possuem apenas uma pequena placa de unidade de microcontrolador (MCU) anexada a um dispositivo que foi projetado para outros propósitos.
  • Dispositivos de IoT têm seus próprios ambientes de programação. Devido às restrições impostas pelo poder computacional limitado dos dispositivos, é impossível para dispositivos de IoT executar sistemas operacionais ou ferramentas de desenvolvedor tradicionais projetadas para dispositivos muito mais poderosos. Além disso, os dispositivos de IoT geralmente não têm uma tela ou um teclado para acesso do programador.
  • Os dispositivos de IoT geralmente operam em largura da banda baixa e em ambientes de rede não confiáveis. Muitos dispositivos de IoT são móveis ou no campo. Eles precisam se conectar a qualquer rede wireless disponível e precisam manter o funcionamento quando não há rede.
  • A implementação e o gerenciamento de software do dispositivo de IoT são um grande desafio. Sem uma UI tradicional ou uma rede confiável, é quase impossível para os usuários atualizar manualmente todos os dispositivos no campo quando surge uma atualização de software.
  • Os aplicativos de IoT são aplicativos máquina a máquina (M2M). Cada dispositivo de IoT geralmente gera uma série de pontos de dados do sensor com registro de data e hora. Para humanos, esses dados são difíceis de entender e fornecem valor limitado. Os dados de IoT geralmente são agregados e processados por outras máquinas e dispositivos.
  • Os dispositivos de IoT poderiam ser corrompidos no campo. Pode haver muito mais dispositivos de IoT do que pessoas. Por isso, a maioria dos dispositivos de IoT fica sem monitoramento por longos períodos de tempo. Eles estão sujeitos à violação e outros ataques maliciosos.

Lição 1: aprender e experimentar com diversos SDKs de dispositivo

Devido à diversidade de dispositivos de IoT e cenários de aplicativos, o desenvolvimento de aplicativos de IoT tende a ser especializado. Em vez de um computador de propósito geral, os desenvolvedores devem escolher diferentes combinações de hardware e software para otimizar casos de uso específicos.

Em um de meus artigos anteriores, Desenvolva um aplicativo IoT prático: um monitor de qualidade do ar, eu usei a placa NodeMCU como a base para meus aplicativos de IoT. O NodeMCU possui algumas vantagens bem distintas (que eu apresentei em um artigo anterior, Conhecendo o NodeMCU e sua placa DEVKIT), incluindo suporte integrado para wifi, custo muito baixo e suporte para a linguagem de programação LUA. No entanto, NodeMCU também carece de uma grande comunidade do desenvolvedor. Como resultado, o NodeMCU não é amplamente testado e suportado pela comunidade do fabricante do sensor. Embora a maioria dos sensores trabalhe bem com o NodeMCU (afinal, ele suporta PINs digitais e analógicos padrão para E/S de dados), os desenvolvedores geralmente precisam executar vários testes e erros para fazer com que o sistema funcione de forma confiável.

Para criar um protótipo de um aplicativo de IoT simples, também é possível começar com o kit do iniciador do Arduino. A vantagem da placa Arduino é sua simplicidade. Ela é apenas um computador com pinos de E/S e suporta diversos ambientes de programação, incluindo um ambiente de programação baseado em bloco adequado para crianças e uma linguagem de programação C tradicional. Como ela possui uma grande comunidade e é amplamente usada para ensinar crianças como programar, um ecossistema de sensores, dispositivos periféricos (por exemplo, módulos de rede wifi e de celular ou luzes de LED) e exemplos de tutoriais e códigos foram desenvolvidos para placas Arduino. Para projetos educacionais ou de prova de conceito, o kit de desenvolvimento Arduino é ideal.

Para aplicativos que requerem mais do que a interface com sensores, o poder computacional oferecido pelo Arduino ou NodeMCU pode não ser suficiente. O kit de desenvolvimento Raspberry Pi é uma placa de baixo custo que fornece uma CPU Intel x86. Como o x86 é muito utilizado, existem muitos softwares (especialmente software livre, incluindo diversos drivers de dispositivo desenvolvidos pela comunidade Linux ao longo dos anos) que podem ser reutilizados por desenvolvedores do Raspberry Pi. No entanto, os aspectos adversos de uma solução baseada em x86 também são óbvios: ele é complexo e nem um pouco eficiente em termos de energia.

Além dos kits de desenvolvimento gerais, existem kits de desenvolvimento especializados para soluções específicas do mercado ou do aplicativo. Por exemplo,

  • O módulo Nvidia Jetson TX2 é uma placa integrada que suporta deep learning baseado em GPU em dispositivos como câmeras de vigilância e carros de condução automática.
  • O módulo MATRIX Voice é uma placa integrada com uma array de microfone (sensores), um chip de reconhecimento e processamento de voz especializado (FPGA) e um controlador ESP (NodeMCU). Ele poderia ser integrado em outros dispositivos para ativar funções de controle de voz.

Além disso, existem muitas outras soluções especializadas para setores da indústria. Certifique-se de pesquisá-las antes de iniciar seus próprios projetos.

Anna Gerber pesquisou e revisou 5 kits de desenvolvimento de IoT populares, o que pode ajudá-lo em sua própria pesquisa.

Lição 2: reserve um tempo para aprender e aproveitar o MQTT

Para iniciantes, embora seja tentador usar o familiar HTTP para comunicações de rede, vale a pena aprender e usar o MQTT como seu protocolo de comunicação. Ele é um protocolo mais eficiente e confiável para dados do sensor de série temporal que são gerados por seus dispositivos de IoT.

O MQTT fornece um mecanismo para comunicação bidirecional entre servidores e dispositivos. O servidor pode enviar comandos ao dispositivo e reconfigurar potencialmente o dispositivo para gerenciar melhor a energia, a largura da banda ou outros recursos.

Além disso, o MQTT também permite a comunicação entre pessoas e entre dispositivos. Ao organizar dispositivos em tópicos, os dispositivos podem trocar dados ou comandos uns com os outros ou em um grupo. Essa estrutura pode permitir que o desenvolvedor de aplicativos configure uma hierarquia de dispositivos com esquemas de controle complexos.

É possível aprender mais sobre MQTT e iniciar o desenvolvimento de MQTT com meu artigo anterior, Conhecendo o MQTT – por que o MQTT é um dos melhores protocolos de rede para a Internet das Coisas.

Lição 3: Use uma estrutura de contêiner

Para aplicativos de IoT complexos, às vezes é necessário gerenciar atualizações de software entre milhões de dispositivos não assistidos no campo. Para conseguir isso, podemos usar contêineres de software que podem fazer download de novos módulos sob demanda e atualizar a si mesmos. Um bom exemplo é o contêiner OSGi .

O contêiner OSGi foi inventado pelo laboratório IBM Pervasive Computing e foi idealizado para ser executado dentro de top boxes domésticas, nas quais ele poderia ser gerenciado e atualizado remotamente sem a intervenção do usuário. Atualmente, o OSGi é usado principalmente em aplicativos do lado do servidor, nos quais equipes de DevOps precisam gerenciar e atualizar de forma automática e remota um grande número de servidores entre data centers. Ele serve como uma alternativa para as estruturas de aplicativos Java EE pesadas. No entanto, como o OSGi ainda requer que uma Java virtual machine e suas bibliotecas relacionadas sejam executadas, ele é adequado para aplicativos de IoT relativamente complexos em dispositivos poderosos que são executados em sistemas operacionais completos.

Exemplos de implementações de OSGi de software livre incluem esses itens mais populares:

Em um dispositivo poderoso como o Raspberry Pi, também é possível instalar o Docker e, em seguida, o Linux no contêiner do Docker.Isso nos permite instalar e gerenciar software pré-configurado automaticamente em um grande número de dispositivos. (É possível ler mais sobre como usar contêineres do Docker para desenvolvimento de IoT neste tutorial do developerWorks.) Docker e OSGi se complementam, pois o Docker gerencia no nível do sistema operacional e o OSGi gerencia no nível de componente dos aplicativos.

Lição 4: IoT e blockchain

Finalmente, a segurança e a auditabilidade são críticas para aplicativos de IoT. Como os aplicativos de IoT geram grandes quantidades de dados M2M e nenhuma pessoa consegue monitorar os dados ativamente em tempo real para assegurar sua precisão, seu aplicativo de IoT precisa estabelecer "confiança" entre as máquinas e estar apto a auditar os dados quando algo der errado.

Os dados de dispositivos de IoT geralmente consistem em um longo fluxo de fatos do registro de data e hora, como leituras do sensor e locais. Esses pontos de dados são "fatos" e, portanto, imutáveis. Para proteger a integridade dos dados e evitar violação, o sistema poderia armazenar os pontos de dados em um blockchain. O IBM Watson IoT Platform e o IBM Blockchain oferecem esses serviços. Para saber mais sobre como implementar o blockchain para aplicativos de IoT, é possível encontrar esse tutorial no developerWorks, Integre dados do dispositivo com contratos inteligentes no IBM Blockchain.

Além de conseguir armazenar pontos de dados, o blockchain também pode suportar transações na rede de IoT. Um exemplo simples são RFIDs em uma rede de cadeia de suprimento. Os dispositivos de IoT podem rastrear os RFIDs identificados em mercadorias físicas e registrar transações confiáveis à medida que as mercadorias se movem de um fornecedor para o próximo. Tais transações não são limitadas a dados gerados pelo dispositivo. Elas também poderiam ser aplicadas para gerenciar os próprios dispositivos. Por exemplo, quaisquer mudanças no local, status e configuração de cada dispositivo também poderiam ser registradas no blockchain como transações para rastrear os dispositivos.

Às vezes, os blockchains tradicionais são computacionalmente muito caros para serem usados pelos dispositivos de IoT. Novos protocolos semelhantes a blockchain estão sendo inventados agora para tratar especificamente do caso de uso de IoT. Por exemplo, o projeto IOTA desenvolveu uma estrutura de dados de rede chamada tangle (em oposição às cadeias) para estabelecer confiança e imutabilidade. Ele pode ser um substituto razoável para blockchains na área de IoT. O tempo dirá.

Conclusão

Nós discutimos os desafios no desenvolvimento de aplicativos de IoT e algumas abordagens para tratar desses desafios. Especificamente, devido à diversidade de aplicativos de IoT e às restrições nos dispositivos, é válido conhecer diversos kits de desenvolvimento, SDKs e protocolos, como o MQTT. Para gerenciar melhor a implementação e a segurança dos aplicativos de IoT, é possível usar estruturas de contêiner, como OSGi e Docker, e redes de blockchain.


Recursos para download


Temas relacionados


Comentários

Acesse ou registre-se para adicionar e acompanhar os comentários.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Internet of Things
ArticleID=1056766
ArticleTitle=Lições aprendidas em minhas primeiras experiências no desenvolvimento da IoT
publish-date=01192018