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.
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.
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.