Coleta automática de temperatura e umidade do ar

No post sobre Sensor de temperatura e umidade com Raspberry Pi, você viu como montar um circuito contendo esses elementos e a montagem do sistema operacional e drivers necessários para aquisição dessas variáveis meteorológicas. O objetivo desse post é montar um script em python para coleta e exibição dos dados de modo automático, indo além do exemplo de teste para coleta instantânea dos valores, e salvando os valores em um arquivo CSV.

Circuito com Raspberry Pi e DHT22 no Fritzing
Circuito com Raspberry Pi e DHT22 no Fritzing. Fonte: ViniRoger

A instalação dos drivers da Adafruit para interação da Rapsberry Pi com o sensor DHT 22 é apresentada no item “aquisição de dados” do post anterior. No entanto, aqui segue uma sequência alternativa de comando para instalação usando pip3, em vez de baixar a biblioteca do Github:

sudo apt update
sudo apt upgrade
sudo apt-get install python3-dev python3-pip
sudo python3 -m pip install --upgrade pip setuptools wheel
sudo pip3 install Adafruit_DHT

O script desenvolvido está disponível no Github/viniroger. Ele deve importar a biblioteca Adafruit_DHT já instalada, definir o sensor utilizado (DHT_SENSOR) e o número do GPIO (DHT_PIN). Também são definidas ações quanto ao arquivo que guarda os dados em formato CSV e a aquisição dos dados em si.

O comando “try” permite lidar melhor com um eventual erro gerado pela ausência do arquivo para gravar os valores. O comando “open” acessa o arquivo pelo nome, sendo que o parâmetro “a+” anexa os novos dados em uma nova linha no fim desse arquivo. Também existe uma linha que verifica se o arquivo está zerado, e deve gravar um cabeçalho, ou se já tem dados, gravando somente os dados.

O loop “while TRUE:” permite que o script rode indefinidamente até que o usuário mate o processo. No início de cada loop, a função “read_retry” tenta continuamente recuperar os dados do sensor. Com isso, os dados já podem ser impressos na tela ou salvos em um arquivo. Foi inserido um “sleep” para limitar a obtenção de amostras para cada 60 segundos.

Para executar o script no terminal, execute o comando “python3 sensor.py” no diretório onde está o arquivo. Será salvo o arquivo “data.csv” com as colunas “timestamp, temperature, humidity” no próprio diretório do script. Caso deixe o script operacional, é interessante salvar os arquivos de dados coletados em um sub-diretório.

Executando em background

O método “write()” não necessariamente grava os dados diretamente no arquivo em disco. Se o script está rodando em um terminal “travado”, você pode acompanhar a escrita do arquivo em outro terminal usando o comando “tail -f data.csv”. No entanto, se executar o processo para background, seja inicializando o script com o início do sistema ou jogando o processo diretamente para segundo plano ou mesmo através do comando screen, os dados serão gravados na memória até que o script seja interrompido, e nesse momento que os dados são salvos em disco. Por isso, depois do “f.write()” é inserido o “f.flush()” para garantir a escrita em disco a cada execução dentro do loop infinito.

Para executar um comando (no caso, esse script) sempre que a Raspberry Pi iniciar, execute o comando “crontab -e” para acessar o arquivo gerenciador de tarefas e escreva a seguinte linha (com o caminho e o nome do arquivo que você esteja trabalhando) no final do arquivo:

@reboot python3 /home/pi/sensor_DHT22/sensor.py 2>&1 >/tmp/sensor_dht22.log

Será gravado um log na pasta temporária, caso dê alguma mensagem de erro. Para iniciar o processo, basta reiniciar a Raspberry.

Com o arquivo CSV gerado, é possível criar um script para gerar gráficos e promover análises, o que pode ser visto no post Gráficos e análises de séries temporais de temperatura e umidade.

Fontes

2 comentários

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.