Enviando temperatura dos núcleos da Raspberry Pi 3 para o ThingSpeak em C

temperatura dos núcleos

Baseado neste artigo de minha autoria (sobre como enviar dados em C no Linux para o ThingSpeak), será mostrado neste artigo como enviar a temperatura instantânea dos núcleos ARM (da CPU da Raspberry Pi 3) para o ThingSpeak. 

Por que monitorar a temperatura?

A Raspberry Pi 3 trata-se de uma SBC (Single Board Computer) com aplicações das mais diversas possíveis, indo desde um computador de bolso para uso pessoal até um dispositivo de processamento pesado de imagens e dados.

Sendo assim, dependendo da demanda de processamento, a temperatura dos núcleos ARM do SoC da Raspberry Pi 3 podem subir muito, o que não é uma coisa boa em se tratando de um sistema que pode estar confinado / sem muito acesso à ventilação (aquecimento excessivo em unidades de processamento NUNCA é bom, podendo levar à redução drástica do tempo de vida da unidade de processamento / SoC em questão).

Deste modo, com base na temperatura dos núcleos, pode-se tomar a decisão de se colocar e/ou ligar um cooler na Raspberry Pi 3.

Canal ThingSpeak

Antes de ir em frente neste projeto, é necessário criar um canal no ThingSpeak e ter em mãos a chave de escrita do canal. Esta chave é fundamental para que o projeto funcione.

Projeto

Aproveitando o boom da Internet das Coisas, este projeto tem como objetivo permitir o monitoramento da temperatura dos núcleos da CPU da Raspberry Pi 3 via Internet. Ou seja, de qualquer lugar do planeta você poderá saber qual a temperatura (e um breve histórico das mesmas) dos núcleos da CPU de sua Raspberry Pi 3. 

Para isto, será utilizado como base o projeto deste artigo.  Portanto, o primeiro passo é, na Raspberry Pi 3, clonar o projeto digitando o comando abaixo:

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

Feito isso, entrar na pasta ThingSpeakC e, nela, substituir o conteúdo dos arquivos main.c e makefile pelos seguintes conteúdos:

main.c:

/*
	Projeto: enviar temperatura dos nucleos da CPU para o ThingSpeak
	Autor: Pedro Bertoleti
	Date: 07/2016
*/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "ThingSpeakLinux.h"

int main (int argc, char *argv[])
{
	char ChaveEscritaThingSpeak[]="kkkkkkkkkkkkkkkk";  //coloque aqui a chave de escrita ThingSpeak
	int i;
	float TemperaturaARMCPU;
	FILE *fp;  //ponteiro de arquivo
	time_t DataHoraRaw;
	char* DataHoraString;
		
	//loop principal
	while(1)
	{
		//obtencao da temperatura dos nucleos da CPU
		fp = fopen("/sys/class/thermal/thermal_zone0/temp","r");

		if (!fp)
		{
			printf("[Falha ao ler arquivo de temperatura]\n");
			continue;
		}	

                fscanf(fp, "%f", &TemperaturaARMCPU);
		TemperaturaARMCPU = TemperaturaARMCPU/ 1000;
                printf("- Temperatura: %fC\n",TemperaturaARMCPU);
		fclose(fp);

                //obtencao da data e hora atuais
		DataHoraRaw = time(NULL);
		DataHoraString = ctime(&DataHoraRaw);

		//Enviando temperatura ao canal ThingSpeak.
		SendDataToThingSpeak(1, &TemperaturaARMCPU,ChaveEscritaThingSpeak,sizeof(ChaveEscritaThingSpeak));
		printf("%s [Temperatura enviada com sucesso]\n", DataHoraString);
          
                //Aguarda 20 segundos para enviar proxima temperatura
                sleep(20);
	}	
	
	return 0;
}

makefile:

ThingSpeakC: ThingSpeakLinux.c main.c
	gcc ThingSpeakLinux.c main.c -o TemperaturaThingSpeakC

Uma vez com os conteúdos substituídos, basta compilar e rodar o projeto com os seguintes comandos:

make
./TemperaturaThingSpeakC

Tudo pronto! Feito isso, a temperatura dos núcleos da CPU será enviada ao ThingSpeak a cada 20 segundos. Observe:

Gráfico com monitoramento de temperatura dos núcleos da CPU
Figura 1 – Gráfico com monitoramento de temperatura dos núcleos da CPU

Aprenda mais

Referências

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
2 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Ezaul Zillmer
Ezaul Zillmer
30/01/2019 13:09

seu codigo falto
#include <unistd.h
Para o Sleep funcionar

main.c:47:1: warning: implicit declaration of function âsleepâ [-Wimplicit-function-declaration]
sleep(20);

para resolver somente add o #include <unistd.h

José Ilton
José Ilton
17/10/2017 09:46

olá, primeiramente parabéns pelo projeto!
Como seria para enviar mais de um valor pelo thingspeak? pois ele não aceita que mande outro dado em menos de 15 segundos, então teria que enviar os dois valores juntos, seu código prevê isso?

Home » Raspberry Pi » Enviando temperatura dos núcleos da Raspberry Pi 3 para o ThingSpeak em C

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: