Índice:

Rastreie a qualidade do ar usando Grafana e Raspberry Pi: 7 etapas
Rastreie a qualidade do ar usando Grafana e Raspberry Pi: 7 etapas
Anonim
Rastreie a qualidade do ar usando Grafana e Raspberry Pi
Rastreie a qualidade do ar usando Grafana e Raspberry Pi

Eu estava procurando um pequeno projeto IOT e um amigo recomendou que eu desse uma olhada neste tutorial:

dzone.com/articles/raspberry-pi-iot-sensor…

Eu recomendo fortemente seguir o tutorial para seguir na configuração de um Raspberry Pi para monitoramento. Este tutorial irá completar as etapas adicionais no projeto de um dispositivo IoT simples que permite uma alta tolerância a erros, bem como o quão útil um Raspberry Pi pode ser quando emparelhado com o Arduino.

Também discuto a eficácia e algumas limitações dos modelos MQ * de sensores de ar. Os sensores MQ * são baratos e bastante eficazes e são muito fáceis de configurar.

De modo geral, isso o ajudará a começar a conectar um Arduino à Internet da maneira mais simples possível e definirá o caminho para o uso de módulos mais leves (referência: ESP8266).

Divirta-se!

Etapa 1: Equipamento + Configuração

Equipamento

  • Raspberry Pi com Raspbian instalado
  • Fonte de alimentação Raspberry Pi
  • Arduino Uno / Equivalent
  • Macho para macho USB tipo B para tipo A (deve vir com seu Arduino)
  • Qualquer um dos sensores MQ * (usei o MQ-2, 4, 5 e 135)
  • Fios de ligação variados
  • mini tábua de pão

Configurar

Este tutorial é uma introdução suave ao uso do Arduino e do Raspberry Pi - ajudará a saber como usar o terminal Linux. No entanto, não presumo muita experiência em trabalhar com Arduino ou Raspberry Pi - tudo o que você realmente precisa é o equipamento fornecido e uma atitude curiosa.

  • Você precisará concluir as etapas deste tutorial.
  • Eu recomendo que você use Secure Shell (SSH) para fazer a interface com o Raspberry Pi, pois isso permite que você insira comandos facilmente. A conexão via SSH difere se você estiver usando Windows, Linux ou Mac. Linux e Mac são muito fáceis de usar em relação ao ssh (o comando para abrir o SSH é literalmente ssh). Confira o Putty para Windows. Recomendo que você dê uma olhada na tela como forma de manter sua sessão durante o projeto.
  • Você também precisará instalar o Python no Raspbian. Quando concluí essas etapas, fiz uma cópia de um cartão SD antigo que tinha em um projeto anterior, que já tinha o Python instalado. Se sua distribuição de NOOBS / Raspbian não tem Python 3.7 ou superior, verifique estas etapas para compilar Python a partir do código-fonte.
  • Familiarize-se com o git e instale-o caso ainda não esteja instalado em sua distribuição do Raspbian.

Etapa 2: Configurando o Circuito

Configurando o circuito
Configurando o circuito

Há um circuito que você precisa configurar no Arduino.

Forneci um esquema que você pode usar como referência.

A beleza de todos os sensores de gás MQ- * é que, uma vez que uma conexão de 5 volts e aterramento são feitas, a resistência de entrada dos pinos analógicos do Arduino permite que o sensor funcione corretamente.

Tenha o cuidado de garantir que a conexão analógica da placa breakout no sensor esteja conectada ao Arduino e não à conexão digital. Se você estiver enfrentando uma faixa muito estreita de valores durante o teste, recomendo que verifique sua conexão aqui primeiro.

Etapa 3: Código Arduino e Flashing

Na etapa seguinte a esta, conectaremos a placa Arduino ao Raspberry Pi. Antes de fazermos isso, precisamos atualizar o Arduino com o código para ler o sensor, bem como transmitir os dados do sensor para o Raspberry Pi. Isso pode ser feito de qualquer maneira que você normalmente empurra o código para o Arduino. Usei uma ferramenta de terceiros além do IDE do Arduino - portanto, incluo a biblioteca do Arduino no topo. Isso não é necessário para outros projetos.

Verifique o código para copiar / colar no final desta seção.

O que o código faz

O código é configurado para obter dados de quatro sensores diferentes - se você usar diferentes tipos de sensores, será sensato alterar os nomes no sinal de saída enviado da porta serial.

No loop, verificamos se o Raspberry Pi solicita dados de nós. Portanto, estamos usando uma configuração Mestre / Escravo muito simples, em que o Raspberry Pi fará solicitações de dados continuamente ao Arduino. Isso é muito mais simples do que ter um contador no código do Arduino porque é mais fácil testar quais valores funcionam no Raspberry Pi, em vez de ter que atualizar os novos valores para o Arduino.

O arduino, depois de receber uma solicitação de dados, formatará a saída como um parâmetro GET - isso está relacionado aos métodos HTTP e é simplesmente uma escolha de design. Se você fosse projetar um esquema de comunicação do Arduino via porta serial, você poderia facilmente ir para qualquer outra coisa, contanto que você projetasse de forma que os dados fiquem razoavelmente separados. Eu escolhi GET porque é familiar e robusto.

Teste simples …

Depois de ter o Arduino atualizado e o código em execução, abra o Serial Monitor do IDE do Arduino. Se você enviar o único caractere "H" (garanta a letra maiúscula!), Receberá a carga de dados. Parabéns, funciona!

Um coletor assíncrono de amostra de dados MQ- *

#incluir
int mq2 = A2;
int mq4 = A3;
int mq5 = A4;
int mq135 = A5;
int EntryByte;
voidsetup () {
pinMode (mq2, INPUT);
pinMode (mq4, INPUT);
pinMode (mq5, INPUT);
pinMode (mq135, INPUT);
Serial.begin (9600);
}
/ * valuePrint imprime o valor para este rótulo.
* Cria apenas efeitos colaterais.
*/
voidvaluePrint (String label, int reading) {
Serial.print (etiqueta);
Serial.print ("=");
Serial.print (leitura);
}
voidloop () {
// veja se há dados seriais de entrada:
if (Serial.available ()> 0) {
// lê o byte mais antigo no buffer serial:
// "Quando você chama Serial.read, um byte é removido do buffer de recebimento e retornado ao seu código"
EntryByte = Serial.read ();
// se for um H maiúsculo (ASCII 72), leia os valores e envie-os para o host do raspberry.
// TODO: certifique-se de que a mensagem sempre tenha o mesmo comprimento, todas as vezes
if (EntryByte == 72) {
int mq2Reading = analogRead (mq2);
int mq4Reading = analogRead (mq4);
int mq5Reading = analogRead (mq5);
int mq135Reading = analogRead (mq135);
Serial.print ("?");
valuePrint ("mq2", mq2Reading);
Serial.print ("&");
valuePrint ("mq4", mq4Reading);
Serial.print ("&");
valuePrint ("mq5", mq5Reading);
Serial.print ("&");
valuePrint ("mq135", mq135Reading);
Serial.print ("\ n");
}
}
// leia a série apenas a cada segundo
atraso (1000);
}

visualizar rawmain.cpp hospedado com ❤ por GitHub

Etapa 4: Código Raspberry Pi

Agora que você configurou o Raspberry Pi de acordo com https://dzone.com/articles/raspberry-pi-iot-sensor …, agora você pode executar o código do Cliente Raspberry que enviará dados via MQTT para nosso banco de dados, que também conecta-se ao Grafana.

  1. Certifique-se de que seu raspberry está conectado à internet e execute um comando git clone para copiar todo o código para o Raspberry Pi. Seu comando se parecerá um pouco com:

    git clone

  2. No terminal do raspberry Pi, execute um comando de mudança de diretório (cd) para "raspberry_client":

    cd raspberry_client.

  3. Você precisará usar um ambiente virtual *. Simples. Corre

    python3 -m venv env. Isso criará um ambiente virtual chamado "env", que usaremos para instalar as dependências.

  4. Agora, precisamos entrar em nosso ambiente virtual. Corre:

    env / bin / ativar fonte. Agora você está pronto para instalar as dependências do projeto.

  5. No pacote que você acabou de clonar, há um arquivo chamado requirements.txt. Abra este arquivo; você verá que exigimos os pacotes paho-mqtt e pyserial, bem como suas respectivas versões. Você pode ver o conteúdo do arquivo executando

    cat requirements.txt. Para instalar esses pacotes, ru

    pip install -r requisitos.txt.

  6. Isso conclui a configuração.

Literalmente, todo tutorial que usa python faz uma menção ao ambiente virtual, e mesmo para este pequeno projeto, farei uma menção. Ambientes virtuais permitem que você separe versões de dependências, bem como separe seu fluxo de trabalho Python - é uma boa maneira de organizar seus espaços de trabalho Python. Se esta é a primeira vez que você usa ambientes virtuais, faça uma breve leitura sobre eles aqui.

O que o código faz …

O arquivo client.py importará um conjunto simples de bibliotecas, incluindo nosso próprio arduinosensor. Na função principal, obteremos os valores do Arduino, publicaremos os dados no broker MQTT e, em seguida, dormiremos por 10 segundos.

O arquivo arduinosensor.py é um conjunto de métodos auxiliares que envolvem a biblioteca paho.mqtt, além de fornecer algum esquema de comunicação útil para se comunicar com a carga útil do Arduino (consulte: parse_payload). Obviamente, o código está anexado no final desta seção.

Um cliente simples que se comunica com um item do arduino via monitor serial. Espere encontrar o código aqui quando ele se tornar público:

fromimportlibimportimport_module
importos
importtime
importarduinosensor
defmain ():
# cliente definido aberto
start_time = time.time ()
whileTrue:
leitura = arduinosensor.get_values (os.environ.get ('PORT', "/ dev / ttyUSB0"))
arduinosensor.pub ("python_client", carga útil = leitura)
time.sleep (10.0- ((time.time () -start_time)% 10.0))
if_name _ == "_ main_":
a Principal()

visualizar rawclient.py hospedado com ❤ por GitHub

Etapa 5: juntando tudo

Temos o código do Raspberry Python configurado e o código do cliente Arduino configurado. Vamos prosseguir para conectar as duas entidades.

Primeiro, vamos conectar o Arduino e definir a configuração correta:

  1. Em seu terminal Raspberry Pi, execute

    python -m serial.tools.list_ports. Isso listará todas as portas USB que oferecem suporte à comunicação serial.

  2. Agora, conecte seu Arduino e aguarde cerca de 2 segundos para que o Raspberry o reconheça. Digitando

    python -m serial.tools.list_ports mais uma vez mostrará as portas novamente. Você pode ver uma lista adicional exibida - se for realmente o caso, então esta nova entrada é a entrada em que seu Arduino está conectado. Provavelmente será "/ dev / ttyUSB0".

  3. Tente executar o código python em seu ambiente virtual executando python3.7 client.py. Aguarde alguns segundos (no máximo dez) - se você enfrentar uma exceção, isso significa que teremos que alterar o valor de nossa porta de comunicação no pi do raspberry. Se você vir que o código imprime uma linha começando com "Enviada carga útil seguinte: …" Então, você estará pronto para ir para a etapa final com Grafana. Dica: certifique-se de executar

    tela -S python antes de iniciar o cliente python, caso contrário, ao encerrar sua conexão com o raspberry pi, você perderá o programa python em execução. Tecnicamente, você não precisa usar estritamente "python" como o último parâmetro, mas gosto de nomear minhas sessões de tela de acordo.

    1. Para alterar o valor da porta COM, você terá que definir uma variável de ambiente antes de executar o código. Você terá que tentar isso para cada valor possível de saída obtido ao executar python -m serial.tools.list_ports. Por exemplo, se a quantidade de entradas que obtive fosse duas e fosse a seguinte:

      • / dev / ttyUSB6
      • / dev / acm0

então os comandos que eu executaria seriam:

PORT = "/ dev / ttyUSB6" python3.7 client.py, e se isso não funcionasse, eu posteriormente ru

PORT = "/ dev / acm0" python3.7 client.py

Depois de concluir essas etapas, o código irá comprometer os dados para nossa instância de banco de dados influxdb que, quando conectado ao Grafana, nos permitirá visualizar nosso painel.

Etapa 6: Configuração do Grafana e visualização do painel

Configuração do Grafana e visualização do painel
Configuração do Grafana e visualização do painel

Tudo bem, agora estamos na reta final! Agora usaremos o Grafana para criar um painel simples.

  1. Conecte-se à sua instância Grafana. Como você seguiu as etapas do artigo dzone original, deve ser capaz de fazer login com seu usuário administrador. Vá em frente e faça login.
  2. No painel esquerdo, passe o mouse sobre o ícone "painéis" - os quatro quadrados. Clique em "Gerenciar".
  3. Na nova página, clique em "Novo Painel". Além disso, clique em "Adicionar novo painel".
  4. Isso abre o editor Grafana. Criaremos uma visualização simples mostrando uma única métrica.

    1. No painel direito, altere o título do painel para algo significativo, como "Leituras de cozinha". Você também pode inserir uma Descrição opcional.
    2. No canto inferior esquerdo, "Consulta", adicionaremos uma única série temporal. Grafana realmente brilha aqui, pois podemos criar facilmente instruções SQL com uma interface baseada em cliques. Em "padrão", escolha InfluxDB.
    3. Agora, para ler "A" - na cláusula FROM, selecione a medição "airtestt". Se você observar o código python original na função get_values de arduinosensor.py, verá que definimos essa tabela airtestt dentro do código.
    4. Para obter um exemplo, vamos para a cláusula "SELECT" e escolha o campo (mq4). Originalmente, nosso painel nos dará a opção "mean ()" - clique nesta opção e selecione "Remover". em seguida, clique no sinal de mais e, em "Agregações", escolha "distinto ()". Isso mostrará pontos de tempo específicos. Podemos escolher outras medidas, mas por enquanto, nosso painel mostrará leituras distintas de mq4.
    5. Clique em Salvar no canto superior direito e pronto!

No caso de você ter problemas, você pode verificar suas configurações com as da imagem em anexo.

Etapa 7: Conclusão

Embrulhar
Embrulhar

Neste tutorial, você foi capaz de configurar uma rede MQTT robusta composta de um único nó e broker. Você também foi capaz de visualizar seus dados IOT usando Grafana. Por último, você foi capaz de compor essa arquitetura de sistema simples (com sorte) do conforto de seu navegador e PC por meio do uso de uma conexão SSH.

Há algumas coisas que podemos querer melhorar.

  • As leituras do sensor em nosso gráfico não são realmente leituras precisas do sensor - são a tensão de saída do nosso sensor. Eles precisam ser calibrados, consulte esta postagem do blog para obter mais detalhes.
  • Nossa configuração raspberry pi pode ser muito mais leve usando uma placa ESP8266 conectada ao arduino e removendo o pi completamente. Confira uma introdução ao módulo ESP8266.
  • Podemos querer adicionar alertas para eventos específicos. Felizmente, Grafana oferece uma maneira de fazer isso.

Vou deixar algumas leituras adicionais para estimular sua imaginação com o mundo da IOT. Estou ansioso para vê-lo no próximo instrutível!

Leituras adicionais:

Recomendado: