Como escolher o protocolo correto para enviar dados a dispositivos remotos

Este artigo é baseado em outro artigo que Ubidots contribuiu para a edição de setembro/outubro de 2015 da revista Microsolutions da Microchip.

A Internet das Coisas (IoT) não se resume apenas a milhões de objetos comunicando-se conosco; trata-se também — e mais importante — da nossa capacidade de interagir com eles. Tomemos como exemplo as aplicações de análise no varejo. Imagine uma loja com um sensor que contabiliza a entrada e saída de pessoas. Esses dados são enviados para a nuvem, onde uma interface web intuitiva permite à loja analisar o comportamento dos clientes em tempo real, comparar o desempenho de diferentes lojas ou observar a variação na taxa de conversão de visitantes em clientes ao longo do tempo, especialmente durante o lançamento de uma campanha de marketing.

Essa solução é, na verdade, um nicho crescente IoT com diversos fornecedores que estão ajudando milhares de varejistas a otimizar seu desempenho de vendas (inclusive, já publicamos um tutorial sobre como construir um contador de pessoas usando um Raspberry Pi e um sensor PIR).

Com base nessas métricas, imagine as possibilidades se o sistema pudesse controlar automaticamente os dispositivos dentro da loja. Ele poderia exibir anúncios contextuais com base no número de pessoas que passam em frente à loja, enviar códigos promocionais para os celulares dos clientes de acordo com o gênero e a idade deles, ou até mesmo controlar as luzes da loja para criar um ambiente específico. Ser capaz de controlar dispositivos certamente enriqueceria a experiência IoT no varejo e em praticamente todos os outros mercados que ainda não foram impactados pela IoT. Tomar medidas com base nesse ciclo de feedback permitirá que a IoT alcance todo o seu potencial.

Comunicação bidirecional para a IoT

Do ponto de vista técnico, a comunicação da nuvem para o dispositivo mostrou-se mais complexa do que a comunicação tradicional do dispositivo para a nuvem. Por quê? A Internet foi originalmente projetada em um modelo cliente-servidor, onde o cliente sempre iniciava a requisição. Até então, isso permitia que os dispositivos iniciassem a comunicação sempre que precisassem enviar dados para a nuvem. Mas o que acontece se o servidor precisar enviar dados para um cliente sem que este primeiro faça uma requisição? Os desenvolvedores web criaram algumas técnicas para superar esse desafio. Aqui estão três opções que consideramos mais "portáteis" para o mundo dos sistemas embarcados.

A maneira mais básica de resolver esse problema de comunicação é chamada de polling curto — um método no qual o cliente pergunta periodicamente ao servidor se há novos dados disponíveis. Essa é a solução mais simples de programar, embora não seja recomendada se você precisar notificar um dispositivo em tempo real.

A próxima opção é o long polling. Nesse caso, o cliente realiza a solicitação e o servidor não responde até ter algo para enviar. Isso possibilita notificações push em tempo real da nuvem para os dispositivos, embora exija que o dispositivo mantenha a conexão aberta enquanto precisar aguardar o servidor. O uso dessa técnica consome mais energia e também apresenta o risco de perda de conexão. Considere o caso em que um dispositivo controla remotamente a porta de um caminhão. Se uma solicitação de long polling for feita e, em seguida, o caminhão entrar em um túnel, a conexão móvel será interrompida. O dispositivo precisará, então, de uma lógica adicional para encerrar a conexão interrompida e abrir uma nova.

Uma terceira opção é usar protocolos mais recentes, como CoAP ou MQTT, por exemplo, que foram projetados para fornecer baixa latência, pacotes de tamanho reduzido e comunicação estável em redes com sinal fraco. Esses protocolos mais recentes oferecem um canal de comunicação bidirecional, que, por sua vez, suporta notificações push. Isso os torna boas opções para projetos IoT que exigem a capacidade de controlar dispositivos conectados em tempo real. A única desvantagem pode ser a falta de bibliotecas de firmware e exemplos para dispositivos embarcados, que são significativamente mais abundantes para conexões baseadas em HTTP.

A escolha do protocolo correto dependerá da sua aplicação e da frequência com que você precisará se comunicar com o dispositivo. No projeto de exemplo descrito abaixo, optou-se pelo protocolo de polling curto, pois os dados precisam ser atualizados apenas a cada minuto e porque controlar a matriz de LEDs com um soquete aberto exigiria mais poder de processamento.

Prática

Neste exemplo, exploramos como usar o método de polling curto para enviar dados da nuvem Ubidots para uma placa de desenvolvimento chipKIT™ Uno32™ usando um shield Wi-Fi® chipKIT. Nosso exemplo pressupõe a existência de um contador de pessoas enviando dados para a Ubidots, após o qual nosso dispositivo chipKIT lerá o último valor do contador e o exibirá em uma matriz de LEDs. Observe que a memória e o poder de processamento da placa chipKIT nos permitiram controlar as matrizes de LEDs enquanto realizávamos o polling da nuvem Ubidots , conforme mostrado abaixo:

Não teríamos conseguido esse nível de processamento com outras placas similares ao Arduino®. Leia nosso artigo “ Enviando dados para uma placa chipKIT com um LED Maxtix ” para obter mais informações sobre como este projeto foi desenvolvido.

Apoio para o seu projeto de sensoriamento

Ubidots é uma plataforma de desenvolvimento de aplicações baseada na nuvem que não só adere ao padrão web (HTTP), como também foi especificamente concebida para a IoT , fornecendo um conjunto abrangente de funções de API que os desenvolvedores podem compreender .

Além disso, trabalhamos em estreita colaboração com nossos usuários para implementar interfaces de API específicas para atender às suas necessidades, desde endpoints TCP/UDP tradicionais que transmitem dados binários até protocolos mais avançados como MQTT ou CoAP.

Ao desenvolver projetos para a IoT, os engenheiros de sistemas embarcados esperam um backend robusto para armazenar dados de sensores, a capacidade de realizar tarefas como cálculos matemáticos ou operações estatísticas sobre esses dados, a capacidade de acionar alertas ou webhooks com base nas leituras dos sensores e, claro, a capacidade de criar interfaces amigáveis ​​para seus clientes finais. Todos esses são serviços que Ubidots oferece para ajudar você a capturar, armazenar e interpretar os dados do seu projeto de sensoriamento.

Para começar a resolver problemas com a Internet das Coisas hoje mesmo, basta criar uma conta Ubidots e enviar seus dados facilmente para a Plataforma de Desenvolvimento de Aplicativos IoT Ubidots para desenvolver, visualizar e implantar seu aplicativo de resolução de problemas hoje mesmo.