ThingSpeakC – Upload de dados em C na Intel Edison

ThingSpeakC

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:

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:

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:

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:

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

Website | Veja + conteúdo

Sou engenheiro eletricista formado pela Faculdade de Engenharia de Guaratinguetá (FEG - UNESP) e trabalho com Android embarcado em Campinas-SP.
Curioso e viciado em tecnologia, sempre busco me aprimorar na área de sistemas embarcados (modalidades bare-metal, RTOS, Linux embarcado e Android embarcado).

Para mais informações, acesse minha página no Facebook:https://www.facebook.com/pbertoleti

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Comentários:
Notificações
Notificar
guest
2 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Lenio Rodrigues
30/05/2016 11:43

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

Pedro Henrique Bertoleti
phfbertoleti
Reply to  Lenio Rodrigues
13/06/2016 23:41

Lenio, boa noite!

Muito obrigado por ler o artigo e pelos elogios.

Atenciosamente,
Pedro Bertoleti

Talvez você goste:

Séries

Menu