Raspberry Pi e ThingSpeak 4

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 é uma das mais populares SBC (Single Board Computer) existentes, sobretudo seu modelo mais recente, Raspberry Pi 3. Os motivos são vários, porém três se destacam: 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).

Raspberry Pi e ThingSpeak

ThingSpeak

O ThingSpeak é uma plataforma IoT que permite, sem custo algum, o upload de dados numéricos. Tais dados são armazenados lá e permitem a visualização dos mesmos em gráficos em tempo real. Ou seja, se você deseja monitorar qualquer grandeza numérica (umidade, 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 de, no mínimo, 15 segundos. Se isso for desobedecido, os dados enviados fora deste intervalo de tempo serão ignorados / não registrados.

Upload de dados ao ThingSpeak

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

Uma requisição HTTP nada 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 conexã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 somente a um tráfego breve de dados entre socket TCP client e socket TCP server.

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

Porque utilizar linguagem C?

Vocês podem estar se perguntando: 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 somente (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.

Em 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 Raspberry 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 custo mizar a aplicação em C, este arquivo é o que deve ser modificado.

Mãos a obra!

Agora é hora de por pra funcionar o seu projeto de Raspberry Pi e ThingSpeak! Para facilitar, coloquei todo o projeto (incluindo um exemplo funcional) no meu Github. Para cloná-lo e utilizá-lo, siga os passos:

1. Com sua Raspberry Pi 3 ligada e já com boot completo, acesse o terminal.

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

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

3. Entre na pasta onde o clone do projeto foi salvo e compile-o. Para isso, digite os seguintes comandos:

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:

./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, somente 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, criei este canal no ThingSpeak. Ele 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 digite este comando:

./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 a um 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 customização

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

1. Enviar dados de temperatura do SoC, temperatura da GPU e processamento, a fim de acompanhar detalhadamente pela Internet como sua Raspberry Pi 3 está

2. Enviar dados de temperatura ambiente, para monitoramento remoto de temperatura utilizando Raspberry Pi e ThingSpeak

3. Enviar dados de consumo de energia elétrica de um equipamento, para fins de monitoramento remoto e estimativa de custo com energia elétrica

Enfim, aqui o céu é o limite!

Gostou? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

4 Comentários

  1. Eu usei o ThingSpeak em meu TCC final no final do ano de 2019, um projeto de Monitoramento Ambiental Para Leito Hospitalar onde os dados dos sensores de Umidade, Temperatura e Luminosidade foram salvos na nuvem usando o ThingSpeak mostrando em forma de graficos os horarios da coleta de dados dos sensores e um backup salva os dados em um cartão micro SD que usei juntamente com Arduino Mega R3 e Ethernet shield acoplado nele.

  2. Tem até no site do thingspeak um tutorial com biblioteca pra download pra usar no arduino

    http://community.thingspeak.com/tutorials/arduino/send-data-to-thingspeak-with-arduino/

  3. Gustavo, boa tarde.

    Sim, é possível. Qualquer dispositivo Arduino que se comunique com um ESP8266 ou que já tenha o ESP8266 integrado (exemplo: NodeMCU) pode fazer isso sem problemas.

  4. Tem como usar esse sistema de gráficos do Things com Arduino?