O ThingSpeak é uma das mais populares plataformas voltadas a IoT (Internet Of Things) atualmente. Com ela é possível fazer, totalmente de graça, upload de dados para a nuvem e visualizá-los em gráficos ao longo do tempo. Com isso, configura-se uma plataforma com grande utilidade para sistemas de medição e sistemas científicos.
Dada a grande utilidade e relevância do ThingSpeak, este artigo irá mostrar como fazer upload de dados para o ThingSpeak a partir da Intel Edison e seu Linux embarcado. O programa é feito em C (compilado com GCC e utilizando bibliotecas nativas do Linux), o que garante máxima performance nesta tarefa.
ThingSpeak – Upload de dados
Conforme foi explicado neste artigo, para enviar dados ao ThingSpeak é necessário fazer uma requisição HTTP para o mesmo. Esta requisição é do tipo GET, e contém a chave (única por canal do ThingSpeak) e os valores a serem enviados. Neste artigo faremos exatamente o mesmo, porém no Linux em linguagem C (compilado com o GCC, compilador C nativo do Linux).
Quando se fala em termos de tráfego de rede, uma requisição HTTP nada mais é que uma string (que contém a requisição HTTP em si) enviada por um socket TCP client (quem deseja fazer a requisição) a um socket TCP server (servidor que receberá a requisição) através da porta 80. Outra característica importante de uma requisição HTTP é que a conexão ao socket TCP server termina assim que o mesmo envia a resposta à requisição. Ou seja, uma requisição HTTP foi feita para ter “vida”/conexão curta, sendo algo destinado a um tráfego breve de dados entre socket TCP client e socket TCP server.
Importante: Toda requisição HTTP deve, obrigatoriamente, terminar com dois retornos de carro e duas quebras de linha (\r\n\r\n). Se isso não for feito, a requisição não será aceita pelo servidor.
Vamos à programação!
Na programação iremos fazer um programa em Linux para enviar dados a um determinado canal do ThingSpeak, com a chave e os dados a serem enviados informados na própria linha de comando. Para desenvolver, compilar e rodar este exemplo, foi escolhida a Intel Edison, por possuir Linux embarcado e por possuir de forma já nativa uma boa biblioteca para comunicação com periféricos (mraa), o que expande os horizontes em termos de upload de informações para a nuvem.
O programa é dividido em 3 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).
O projeto é totalmente open-source e está preparado para receber atualizações da comunidade. Desta forma, para ter acesso ao código-fonte, a melhor maneira é acessar o GitHub do projeto. Instruções para clonar o repositório do projeto estão contidas no tópico a seguir.
Como baixar e compilar o projeto ThingSpeakC na Intel Edison?
O projeto está hospedado no GitHub neste endereço. Para cloná-lo, compilá-lo e utilizá-lo, siga os passos a seguir:
1- Primeiramente, é preciso instalar o git na Intel Edison. Considerando que a Intel Edison já está com acesso à Internet, instale o git digitando o seguinte comando:
opkg install git
2- Uma vez instalado, vá a um diretório que deseja salvar o projeto. Uma vez nele, clone o projeto do git com o seguinte comando:
git clone https://github.com/phfbertoleti/ThingSpeakC
3- Após o clone ser feito, irá surgir um diretório chamado ThingSpeakC no diretório corrente. Entre nesse diretório e compile o projeto com o seguinte comando:
make
4- Está pronto para uso!
Para utilizar o programa desenvolvido, a chave do canal ThingSpeak (única para cada canal) e dados devem ser passados via linha de comando. A sintaxe é a seguinte:
./ThingSpeakC CHAVE_DO_CANAL Valor1 Valor2 Valor3 … ValorN
Onde:
- CHAVE_DO_CANAL: Chave do canal ThingSpeak. Essa chave, chamada de chave de escrita, pode ser obtida na aba “Chaves” das configurações de um canal seu no ThingSpeak;
- Valor1 Valor2 Valor3 … ValorN: Valores que 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.
Teste do programa
Criei um canal de teste com três gráficos/charts. Veja este canal aqui. A chave de escrita deste canal é E4AKR731LNBQ67EW. Desta forma, se fosse desejado enviar os dados 1, 5 e 10 para os charts 1, 2 e 3, respectivamente, seria usada a seguinte chamada:
./ThingSpeakC E4AKR731LNBQ67EW 1 5 10
Para fazer upload de dados no seu próprio canal, basta substituir a chave de escrita pela sua, substituir os dados pelos quais você deseja enviar. Sinta-se à vontade para fazer quaisquer modificações no software que lhe forem convenientes!
Conclusão
Neste artigo foi mostrado como fazer em linguagem C (a nível de socket) o upload/envio de dados ao ThingSpeak. Desta forma, garante-se máximo desempenho e, além disso, tem-se grande aprendizado sobre desenvolvimento com Sockets em C no Linux (algo que pode ser fundamental quando for necessário especificar um protocolo de camada de aplicação em rede, por exemplo).
Referências










Bom dia Pedro !
Parabéns pela excelente dica ! muito bom e útil mesmo !
A propósito, se você tiver mais alguma referência de desenvolvimento em a nvel de socket em Linux, gostaria de ter acesso se possível !
Att.
Lenio
Técnico Eletrônico Sênior
Lenio, boa noite!
Muito obrigado por ler o artigo e pelos elogios.
Atenciosamente,
Pedro Bertoleti