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

  

NEWSLETTER

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

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

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

Pedro Bertoleti
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

2
Deixe um comentário

avatar
 
1 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
phfbertoletiLenio Rodrigues Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Lenio Rodrigues
Visitante

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

phfbertoleti
Visitante
phfbertoleti

Lenio, boa noite!

Muito obrigado por ler o artigo e pelos elogios.

Atenciosamente,
Pedro Bertoleti