Fonte: Gravando Os Dados Do Sensor No Banco De Dados | Raspberry Pi Brasil



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:

  1. apt-get upgrade && apt-get update
  2. apt-get install apache2 apache2-doc apache2-utils
  3. apt-get install libapache2-mod-php5 php5 php-pear php5-xcache
  4. apt-get install php5-mysql

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

 

  1. 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:

 

  1. mysql -uroot -p
  2. #Quando pedir a senha digite sua senha
  3. #Depois digite
  4. 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:

  1. mysql -uroot -p
  2. #Digite sua senha

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

  1. create database raspibr;
  2. 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:

  1. CREATE TABLE `log_temperatura` (
  2. `codTemperatura` int(11) NOT NULL AUTO_INCREMENT,
  3. `dataLog` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `temperatura` decimal(20,2) NOT NULL, `umidade` decimal(20,2) NOT NULL,
  4. PRIMARY KEY (`codTemperatura`))
  5. 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

 

  1. #!/usr/bin/python
  2. import Adafruit_DHT;
  3. import MySQLdb as mysql;
  4. import datetime;
  5. import time;
  6. ts = time.time();
  7. sensor = Adafruit_DHT.DHT22;
  8. pin = 4; #Pino 7
  9. umidade, temperatura = Adafruit_DHT.read_retry(sensor, pin);
  10. db = mysql.connect(“localhost”,“root”,“{SUASENHA}”,“raspibr”);
  11. #iniciando o cursor do mysql
  12. curs = db.cursor();
  13. if umidade is not None and temperatura is not None:
  14. try:
  15. dataHora = datetime.datetime.fromtimestamp(ts).strftime(‘%Y-%m-%d %H:%M:%S’);
  16. sql = (“”“Insert into log_temperatura VALUES(null,'{2}’,'{0:0.1f}’,'{1:0.1f}’)”“”).format(temperatura,umidade,dataHora);
  17. curs.execute(sql);
  18. db.commit();
  19. print “ENVIADO PRO BANCO”;
  20. except:
  21. print “Error: impossivel gravar no banco de dados”;
  22. db.rollback();
  23. else:
  24. 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.

  1. crontab -e
  2. #então colocaremos a seguinte instrução no final do arquivo
  3. */30 * * * * sudo python /path/para/arquivo/python.py /dev/null 2>&1
  4. #isso fará com que a cada 30 minutos seja executado e gravado no banco os dados do sensor.
  5. #Salve o arquivo e de restart no cron
  6. 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.


 

Anúncios

Escrito por zrhans

Professor at UFSM

Deixe um comentário

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.