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!
Espero que tenham gostado.