Gravando os dados do sensor no banco de dados

Fala galera!
Agora te temos nosso sensor funcionando perfeitamente e capturando as informações de temperatura e umidade, vamos fazer com que essas informações sejam gravadas em um banco de dados para o uso posterior, seja em um gráfico ou simplesmente mostrando as informações.

Para isso iremos criar em nosso Raspberry um servidor WEB composto pelo PHP + Apache e MySQL, e também iremos habilitar o Python para a utilização do MySQL.

Vamos ao que interessa:

Sempre que iniciarmos qualquer instalação no Raspberry, por definição sempre faremos o update e o upgrade para sempre pegar as atualizações disponíveis.

no LXterminal:

apt-get upgrade && apt-get update
apt-get install apache2 apache2-doc apache2-utils
apt-get install libapache2-mod-php5 php5 php-pear php5-xcache
apt-get install php5-mysql

Depois de instalado, iremos instalar o MySQL propriamente dito, junto com as bibliotecas para a utilização no Python

 

apt-get install mysql-server mysql-client python-mysqldb

Durante a instalação, será requisitado que você digite uma senha para o acesso ROOT no MySQL, porém caso não queira senha simplesmente deixe em branco.

 

para testar se o seu MySQL foi instalado corretamente, entre com  o comando de conexão:

 

mysql -uroot  -p
#Quando pedir a senha digite sua senha
#Depois digite
show databases;

Se tudo foi instalado corretamente, irá mostrar todos os bancos de dados padrão do MySQL.
Agora vamos criar o banco de dados e a nossa tabela para gravação do conteudo:

 

Entre no LXterminal:

mysql -uroot -p
#Digite sua senha

Após entrar no banco de dados iremos criar a nossa base, sempre usando ; para finalizar a linha:

create database raspibr;
use raspibr;

Criamos nossa base de dados e com o use, associamos que estaremos utilizando a base de dados em questão.
Agora criaremos a tabela, utilzaremos MyISAM como engine, pois não precisaremos fazer chaves estrangeiras e pra consulta ela é mais rapida:

CREATE TABLE `log_temperatura` (  
`codTemperatura` int(11) NOT NULL AUTO_INCREMENT, 
`dataLog` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,  `temperatura` decimal(20,2) NOT NULL,  `umidade` decimal(20,2) NOT NULL,  
PRIMARY KEY (`codTemperatura`)) 
ENGINE=MyISAM DEFAULT CHARSET=latin1;

Com isso teremos o banco, tabela e campos criados para a utilização.

Utilizando o post anterior com o sensor conectado na porta 7 (GPIO4) faremos o seguinte código

 

#!/usr/bin/python
import Adafruit_DHT;
import MySQLdb as mysql;
import datetime;
import time;
ts = time.time();
sensor = Adafruit_DHT.DHT22;
pin = 4; #Pino 7
umidade, temperatura = Adafruit_DHT.read_retry(sensor, pin);
db = mysql.connect("localhost","root","{SUASENHA}","raspibr");
#iniciando o cursor do mysql
curs = db.cursor();
if umidade is not None and temperatura is not None:
 try:  
  dataHora = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S');
  sql = ("""Insert into log_temperatura VALUES(null,'{2}','{0:0.1f}','{1:0.1f}')""").format(temperatura,umidade,dataHora); 
  curs.execute(sql);
  db.commit();
  print "ENVIADO PRO BANCO";
 except:
    print "Error: impossivel gravar no banco de dados";
    db.rollback();
else:
  print 'Nao foi possivel fazer a leitura, verifique o pino de conexao!';

Isso fará com que seja inserido no banco de dados uma vez os dados recuperados naquele momento.

Caso queiram, podemos colocar em um  CRON, que é uma área do linux que agenda as tarefas a serem executadas em um período específico, colocando para rodar de hora em hora, a cada 5 , 10 ou 15 minutos.

Faremos que o script seja executado a cada 30 minutos.

crontab -e
#então colocaremos a seguinte instrução no final do arquivo

*/30 * * * * sudo python /path/para/arquivo/python.py /dev/null 2>&1
#isso fará com que a cada 30 minutos seja executado e gravado no banco os dados do sensor.
#Salve o arquivo e de restart no cron
sudo /etc/init.d/crond restart

 

Feito isso é só esperar 30 minutos ou ir executando o arquivo para ir vendo as informações do banco de dados, e ai as possibilidades são imensas, você pode fazer algo como o meu projeto abaixo ou fazer uma listagem de todas as temperaturas por período!

 

Captura_de_tela-1

Espero que tenham gostado.