Artigos

Como enviar dados para a Cloud com o Raspberry Pi e ThingSpeak (IoT)

Hoje vamos criar um projeto que tem possibilidades incríveis, inclusive no campo de IoT (Internet of Things), utilizando o Raspberry Pi e ThingSpeak, com programação em linguagem C!

Raspberry Pi como sabemos, é uma das mais populares SBC (Single Board Computer) existentes, sobretudo o modelo mais recente, o Raspberry Pi 3. Os motivos são vários, porém três destacam-se: pequeno tamanho físico (aproximadamente o tamanho de um cartão de crédito!), uso de um SoC de 64 bits (algo surpreendente para o mundo dos embarcados) e alta versatilidade (uma vez que é um computador completo com sistema operacional Linux), possui já integrado Bluetooth e Wifi, permitindo a ligação à internet sem fios.

Raspberry Pi e ThingSpeak

ThingsSpeak

O ThingSpeak é uma plataforma IoT que permite, de forma grátis, o upload de dados numéricos. Tais dados são armazenados e permitem a visualização dos mesmos em gráficos em tempo real. Ou seja, se deseja monitorizar qualquer grandeza numérica (humidade, temperatura, pressão, etc.) à distância via Internet, o ThingSpeak é uma boa pedida.

A plataforma está em constante evolução. Portanto, novos recursos podem ser adicionados a qualquer momento.

Em termos de limitação, o ThingSpeak possui apenas uma: o tempo entre upload de dados deve ser no mínimo de 15 segundos. Se isso for desobedecido, os dados enviados fora deste intervalo de tempo serão ignorados / não registados.

UPLOAD DE DADOS AO THINGSPEAK

Para enviar dados ao ThingSpeak, faz-se uma requisição HTTP ao servidor do ThingSpeak.

Uma requisição HTTP não é mais que uma string (que contém as informações da requisição HTTP) enviada via socket TCP client (quem deseja fazer a requisição) a um socket TCP server (servidor que receberá a requisição, no caso o servidor do ThingSpeak) através da porta 80.

Porém, o socket TCP estabelecido não tem grande tempo de vida. A ligação ao servidor termina assim que o mesmo envia a sua resposta à requisição. Ou seja, uma requisição HTTP foi feita para ter “vida curta”, sendo portanto destinado apenas a um tráfego breve de dados entre socket TCP client e socket TCP server.

Outro ponto importante é que toda requisição HTTP deve, obrigatoriamente, terminar com dois ‘carriage return’ e duas ‘quebras de linha’ (em outras palavras: \r\n\r\n). Se isso não for feito, a requisição não será aceita pelo servidor / será ignorada.

Porque utilizar a linguagem C?

Porque utilizar linguagem C para este projeto? Os motivos são:

  • Recursos nativos: o Linux é, essencialmente, desenvolvido em C. Portanto, uma aplicação em C tende a usar apenas (ou, pelo menos, grande parte) recursos nativos. O compilador C inclusive (GCC) já é nativo em todas as distribuições Linux.
  • Desempenho: em C, tem-se um desempenho maximizado no Linux, uma vez que aqui se programa em um nível mais baixo (em relação ao Python, por exemplo)
  • Portabilidade: por utilizar bibliotecas e funções nativas do Linux, uma mesma aplicação em C pode rodar em diversas distribuições Linux e nos mais diversos hardwares (sistemas embarcados, inclusive) com (quase) nenhum esforço na maioria das vezes.
  • Tamanho final de arquivo executável: por ser uma linguagem compilada, o “fruto” de uma compilação de uma aplicação em C é um arquivo executável. Como dito anteriormente, o Linux é feito essencialmente em C, portanto pode-se utilizar recursos nativos do sistema quando se desenvolve aplicações C. Isto resulta, além de melhor desempenho, em menor tamanho do executável final.

Com outras palavras: se alguma aplicação busca máximo desempenho e mais “leveza na execução”, desenvolve-la em C pode ser o ideal.

Códigos-fonte Raspeberry Pi 3 em C

A aplicação, feito em C e rodando no Linux da Raspberry Pi 3, irá enviar dados a um determinado canal do ThingSpeak, com a chave e os dados a serem enviados informados na própria linha de comando. Ou seja, a partir da simples chamada via linha de comando desta aplicação já é possível enviar dados utilizando Raspberry Pi e ThingSpeak.

A aplicação é dividida em três arquivos:

  • ThingSpeakLinux.c: Contém uma função com o código da requisição HTTP feito em C no Linux. Equivalente a um “driver” do ThingSpeak.
  • ThingSpeakLinux.h: Header do módulo ThingSpeakLinux.c
  • main.c: Módulo principal. Responsável por obter os dados digitados na chamada do programa e direcioná-los à função que envia os dados de fato ao ThingSpeak (contida no módulo ThingSpeakLinux.c). Se deseja customizar a aplicação em C, este arquivo é o que deve ser modificado.

Mãos à obra!

Agora é hora de por a funcionar o projeto com o Raspberry Pi e ThingSpeak! Para facilitar, poderá encontrar todo o projeto (incluindo um exemplo funcional) no Github. Para copiá-lo e utilizá-lo, siga os passos:

1. Com o Raspberry Pi 3 ligado e já com boot completo, vá ao Terminal.

2. Uma vez no terminal, escreva o seguinte comando para copiar o projeto direto do Github:

1
git clone https://github.com/phfbertoleti/ThingSpeakC

3. Entre na pasta onde a cópia do projeto foi guardado e compile-o. Para isso, digite os seguintes comandos:

1
2
cd ThingSpeakC
make

4. Agora é só utilizar o Raspberry Pi 3 e ThingSpeak!

Para utilizar a aplicação desenvolvida, a chave do canal ThingSpeak (informação única para cada canal) e dados a serem enviados devem ser passados via linha de comando (no terminal). A sintaxe desta chamada é a seguinte:

1
./ThingSpeakC CHAVE_DO_CANAL Valor1 Valor2 Valor3 ... ValorN

Onde:
CHAVE_DO_CANAL: corresponde à chave de escrita do canal ThingSpeak. Essa chave pode ser obtida na aba “Chaves” das configurações de seu canal no ThingSpeak
Valor1 Valor2 Valor3 … ValorN: são os valores os quais deseja enviar para o ThingSpeak (separados por espaço).

Observações:

1. O programa, até o momento da escrita deste artigo, apenas aceita valores inteiros

2. Para conseguir enviar N dados para o ThingSpeak e exibi-los, é necessário ter N charts/gráficos criados no canal. Se o número de gráficos criados for inferior ao número de dados enviados, os “dados excedentes” serão ignorados pelo ThingSpeak.

Exemplo de utilização do Raspberry Pi e ThingSpeak

Para fins de exemplificar a utilização,neste canal no ThingSpeak. Possui três gráficos/charts.
Como teste, para enviar dados a este canal, no terminal vá à pasta onde está a aplicação compilada e escreva este comando:

1
./ThingSpeakC E4AKR731LNBQ67EW 10 20 30

Este comando fará com que sejam enviados os dados numéricos 10, 20 e 30 para os gráficos 1, 2 e 3 respectivamente. Para enviar dados para outro canal (de sua autoria), basta substituir a chave de escrita pela do seu canal e os valores pelos que deseja enviar.

Gráfico ThingSpeak

Sugestões de personalização

Segue algumas sugestões de personalização desta aplicação:

1. Enviar dados de Temperatura do SoC, Temperatura da GPU e Processador, a fim de acompanhar detalhadamente pela Internet como está o seu Raspberry Pi 3;

2. Enviar dados da temperatura ou humidade ambiente, para monitorizar remotamente a sua habitação utilizando Raspberry Pi e ThingSpeak;

3. Enviar dados de consumo de energia elétrica de um equipamento, para fins de monitorização remota e estimativa de custo com energia elétrica.

Gostaram deste artigo ? Deixem o vosso comentário no formulário a baixo.

Não se esqueçam de fazer like na nossa página no facebook.

Todos os produtos utilizados neste artigo podem ser encontrados na loja de componentes eletrónicos ElectroFun.

Comments

comments

Deixar uma resposta

Este site utiliza o Akismet para reduzir spam. Fica a saber como são processados os dados dos comentários.