Tabla de contenido:

Seguimiento de la calidad del aire con Grafana y Raspberry Pi: 7 pasos
Seguimiento de la calidad del aire con Grafana y Raspberry Pi: 7 pasos

Video: Seguimiento de la calidad del aire con Grafana y Raspberry Pi: 7 pasos

Video: Seguimiento de la calidad del aire con Grafana y Raspberry Pi: 7 pasos
Video: 🍓que se puede HACER CON una RASPBERRY PI 4🍓 2024, Noviembre
Anonim
Seguimiento de la calidad del aire con Grafana y Raspberry Pi
Seguimiento de la calidad del aire con Grafana y Raspberry Pi

Estaba buscando un pequeño proyecto IOT y un amigo me recomendó que revisara este tutorial:

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

Recomiendo encarecidamente seguir el tutorial a seguir para configurar una Raspberry Pi para el monitoreo. Este tutorial completará más pasos en el diseño de un dispositivo IoT simple que permite una alta tolerancia a errores, así como lo útil que puede ser una Raspberry Pi cuando se combina con Arduino.

También entro en la efectividad y algo de limitación de los modelos MQ * de sensores de aire. Los sensores MQ * son económicos y bastante efectivos, y son muy fáciles de configurar.

En general, esto lo ayudará a comenzar a conectar un Arduino a Internet de la manera más simple posible, y establece el camino para usar módulos de huella más livianos (re: ESP8266).

¡Divertirse!

Paso 1: Equipo + Configuración

Equipo

  • Raspberry Pi con Raspbian instalado
  • Fuente de alimentación Raspberry Pi
  • Arduino Uno / Equivalente
  • USB macho a macho tipo B a tipo A (debe venir con su Arduino)
  • Cualquiera de los sensores MQ * (usé el MQ-2, 4, 5 y 135)
  • Cables de puente surtidos
  • mini tablero

Configurar

Este tutorial está pensado como una introducción suave al uso de Arduino y Raspberry Pi; lo ayudará a saber cómo usar la terminal de Linux. Sin embargo, no asumo mucha experiencia trabajando en Arduino o Raspberry Pi; todo lo que realmente necesita es el equipo provisto y una actitud curiosa.

  • Deberá completar los pasos de este tutorial.
  • Le recomiendo que use Secure Shell (SSH) para interactuar con Raspberry Pi, ya que esto le permite ingresar comandos fácilmente. La conexión a través de SSH es diferente si usa Windows, Linux o Mac. Linux y Mac son bastante fáciles de usar con respecto a ssh (el comando para abrir SSH es literalmente ssh). Echa un vistazo a Putty para Windows. Te recomiendo que revises la pantalla como una forma de mantener tu sesión durante el proyecto.
  • También necesitará instalar Python en Raspbian. Cuando completé estos pasos, hice una copia de una vieja tarjeta SD que tenía de un proyecto anterior, que ya tenía Python instalado. Si su distribución de NOOBS / Raspbian no tiene Python 3.7 o superior, consulte estos pasos para compilar Python desde la fuente.
  • Familiarícese con git e instálelo en caso de que aún no esté instalado en su distribución de Raspbian.

Paso 2: configuración del circuito

Configuración del circuito
Configuración del circuito

Hay un circuito que deberá configurar en Arduino.

Le proporcioné un esquema que puede usar como referencia.

La belleza de todos los sensores de gas MQ- * es que una vez que se realiza una conexión de 5 voltios y tierra, la resistencia de entrada de los pines analógicos del Arduino permite que el sensor funcione correctamente.

Tenga cuidado de asegurarse de que la conexión analógica de la placa de conexión en el sensor esté conectada al Arduino y no a la conexión digital. Si se enfrenta a un rango de valores muy estrecho al realizar la prueba, le recomiendo que primero verifique su conexión aquí.

Paso 3: código Arduino y flasheo

En el paso siguiente a este, conectaremos la placa Arduino a la Raspberry Pi. Antes de hacer esto, necesitamos flashear el Arduino con el código para leer el sensor y transmitir los datos del sensor a la Raspberry Pi. Esto se puede hacer de cualquier manera que normalmente envíe código al Arduino. Utilicé una herramienta de terceros además del IDE de Arduino; por lo tanto, incluyo la biblioteca de Arduino en la parte superior. Esto no es necesario para otros proyectos.

Verifique el código para copiar / pegar al final de esta sección.

Que hace el codigo

El código está configurado para obtener datos de cuatro sensores diferentes; si usa diferentes tipos de sensores, será sensato cambiar los nombres de la señal de salida enviada desde el puerto serie.

En el bucle verificamos si la Raspberry Pi nos solicita datos. Por lo tanto, estamos usando una configuración maestro / esclavo muy simple en la que Raspberry Pi continuamente solicitará datos al Arduino. Esto es mucho más simple que tener un contador en el código Arduino porque es más fácil probar qué valores funcionan desde la Raspberry Pi, en lugar de tener que actualizar nuevos valores al Arduino.

El arduino, una vez recibido una solicitud de datos, formateará la salida como un parámetro GET; esto está relacionado con los métodos HTTP y es simplemente una elección de diseño. Si tuviera que diseñar un esquema de comunicación desde Arduino a través del puerto serie, podría optar fácilmente por cualquier otra cosa, siempre y cuando lo diseñe para que los datos estén razonablemente separados. Elegí GET porque es familiar y robusto.

Prueba simple …

Una vez que tenga el Arduino flasheado y el código en ejecución, abra el Monitor serial del Arduino IDE. Si envía el carácter único "H" (¡asegúrese de que esté en mayúscula!) Obtendrá la carga útil de datos. ¡Felicidades, funciona!

Un recopilador asíncrono de muestra de datos MQ- *

#incluir
int mq2 = A2;
int mq4 = A3;
int mq5 = A4;
int mq135 = A5;
int entranteByte;
voidsetup () {
pinMode (mq2, ENTRADA);
pinMode (mq4, ENTRADA);
pinMode (mq5, ENTRADA);
pinMode (mq135, ENTRADA);
Serial.begin (9600);
}
/ * valuePrint imprime el valor de esta etiqueta.
* Crea solo efectos secundarios.
*/
voidvaluePrint (etiqueta de cadena, lectura int) {
Serial.print (etiqueta);
Serial.print ("=");
Serial.print (lectura);
}
voidloop () {
// mira si hay datos seriales entrantes:
if (Serial.available ()> 0) {
// lee el byte más antiguo en el búfer serial:
// "Cuando llamas a Serial.read, se elimina un byte del búfer de recepción y se devuelve a tu código"
entranteByte = Serial.read ();
// si es una H mayúscula (ASCII 72), lea los valores y envíelos al host de frambuesa.
// TODO: asegúrese de que el mensaje tenga siempre la misma longitud, cada vez
si (entranteByte == 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");
}
}
// lee la serie solo cada segundo
retraso (1000);
}

ver rawmain.cpp alojado con ❤ por GitHub

Paso 4: Código Raspberry Pi

Ahora que ha configurado la Raspberry Pi según https://dzone.com/articles/raspberry-pi-iot-sensor …, ahora puede ejecutar el código del cliente Raspberry que enviará datos a través de MQTT a nuestra base de datos, que también se conecta a Grafana.

  1. Asegúrese de que su frambuesa esté conectada a Internet y luego realice un comando git clone para copiar todo el código en la Raspberry Pi. Tu comando se verá un poco como:

    clon de git

  2. Dentro de la terminal de la Raspberry Pi, ejecute un comando de cambio de directorio (cd) en "raspberry_client":

    cd raspberry_client.

  3. Deberá utilizar un entorno virtual *. Sencillo. Correr

    python3 -m venv env. Esto creará un entorno virtual llamado "env" que usaremos para instalar dependencias.

  4. Ahora, necesitamos ingresar a nuestro entorno virtual. Correr:

    env de origen / bin / activar. Ahora está listo para instalar las dependencias del proyecto.

  5. En el paquete que acaba de clonar hay un archivo llamado requirements.txt. Abra este archivo; verá que requerimos los paquetes paho-mqtt y pyserial, así como sus respectivas versiones. Puede ver el contenido del archivo ejecutando

    cat requirements.txt. Para instalar estos paquetes, ru

    pip install -r requirements.txt.

  6. Esto concluye la configuración.

Literalmente, cada tutorial que usa Python hace una mención de Virtual env, e incluso para este pequeño proyecto, haré una mención. Los entornos virtuales le permiten separar versiones de dependencias, así como separar su flujo de trabajo de Python: es una buena forma de ordenar sus espacios de trabajo de Python. Si esta es la primera vez que usa entornos virtuales, lea brevemente sobre ellos aquí.

¿Qué hace el código …

El archivo client.py importará un conjunto simple de bibliotecas, incluido nuestro propio arduinosensor. En la función principal, obtendremos los valores del Arduino, publicaremos los datos en el corredor MQTT y luego dormiremos durante 10 segundos.

El archivo arduinosensor.py es un conjunto de métodos auxiliares que envuelven la biblioteca paho.mqtt, además de proporcionar un esquema de comunicación útil para comunicarse con la carga útil de Arduino (ver: parse_payload). Por supuesto, el código se adjunta al final de esta sección.

Un cliente simple que se comunica con un elemento arduino a través de un monitor serial. Espere encontrar el código aquí cuando se haga público:

fromimportlibimportimport_module
importos
importtime
importarduinosensor
defmain ():
# cliente definido abierto
hora_inicio = hora.hora ()
whileTrue:
lectura = arduinosensor.get_values (os.environ.get ('PUERTO', "/ dev / ttyUSB0"))
arduinosensor.pub ("python_client", carga útil = lectura)
time.sleep (10.0- ((time.time () -start_time)% 10.0))
if_name _ == "_ main_":
principal()

ver rawclient.py alojado con ❤ por GitHub

Paso 5: Poniéndolo todo junto

Tenemos configurado el código Raspberry Python, y tenemos configurado el código del cliente Arduino. Pasemos a conectar ambas entidades juntas.

Primero, conectemos el Arduino y configuremos la configuración correcta:

  1. En su terminal Raspberry Pi, ejecute

    python -m serial.tools.list_ports. Esto mostrará una lista de todos los puertos USB que admiten la comunicación en serie.

  2. Ahora, conecte su Arduino y espere unos 2 segundos para que la Raspberry lo reconozca. Escribiendo

    python -m serial.tools.list_ports una vez más le mostrará los puertos nuevamente. Es posible que vea aparecer una lista adicional; si ese es el caso, entonces esta nueva entrada es la entrada a la que está conectado su Arduino. Es probable que sea "/ dev / ttyUSB0".

  3. Intente ejecutar el código de Python dentro de su entorno virtual ejecutando python3.7 client.py. Espere unos segundos (como máximo diez): si se enfrenta a una excepción, esto significa que tendremos que cambiar el valor de nuestro puerto com en la raspberry pi. Si ve que el código imprime una línea que comienza con "Enviado después de la carga útil: …" Entonces, estará listo para continuar con el paso final con Grafana. Consejo: asegúrese de ejecutar

    pantalla -S python antes de iniciar el cliente de Python, de lo contrario, cuando finalice su conexión con su Raspberry Pi, perderá su programa Python en ejecución. Técnicamente, no es necesario utilizar estrictamente "python" como último parámetro, pero me gusta nombrar mis sesiones de pantalla en consecuencia.

    1. Para cambiar el valor del puerto COM, deberá establecer una variable de entorno antes de ejecutar el código. Tendrá que probar esto para cada valor posible de salida que obtuvo al ejecutar python -m serial.tools.list_ports. Por ejemplo, si la cantidad de entradas que obtuve fueran dos y fueran las siguientes:

      • / dev / ttyUSB6
      • / dev / acm0

entonces los comandos que ejecutaría serían:

PUERTO = "/ dev / ttyUSB6" python3.7 client.py, y si eso no funcionara, posteriormente lo haría

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

Una vez que haya completado estos pasos, el código enviará datos a nuestra instancia de base de datos influxdb que, cuando se conecte a Grafana, nos permitirá ver nuestro panel de control.

Paso 6: Configuración de Grafana y visualización del panel

Configuración de Grafana y visualización del panel
Configuración de Grafana y visualización del panel

Muy bien, ¡ahora estamos en la recta final! Ahora usaremos Grafana para crear un tablero simple.

  1. Conéctese a su instancia de Grafana. Dado que siguió los pasos del artículo original de dzone, debería poder iniciar sesión con su usuario administrador. Adelante, inicie sesión.
  2. En el panel izquierdo, coloque el cursor sobre el ícono de "tableros": los cuatro cuadrados. Haga clic en "Administrar".
  3. En la nueva página, haga clic en "Nuevo panel de control". Además, haga clic en "Agregar nuevo panel".
  4. Esto abre el editor de Grafana. Crearemos una vista simple que muestre una única métrica.

    1. En el panel derecho, cambie el título del panel a algo significativo, como "Lecturas de cocina". También puede ingresar una Descripción opcional.
    2. En la parte inferior izquierda, "Consulta", agregaremos una única serie de tiempo. Grafana realmente brilla aquí, ya que podemos crear fácilmente sentencias SQL con una interfaz basada en clics. En "predeterminado", elija InfluxDB.
    3. Ahora, para leer "A", en la cláusula FROM, seleccione la medida "airtestt". Si observa el código Python original en la función get_values de arduinosensor.py, verá que definimos esta tabla airtestt dentro del código.
    4. Para una muestra, vayamos a la cláusula "SELECT" y escojamos el campo (mq4). Originalmente, nuestro panel de control nos dará la opción "mean ()": haga clic en esta opción y seleccione "Eliminar". luego, haga clic en el signo más y, en "Agregaciones", elija "distinto ()". Esto mostrará puntos de tiempo específicos. Podemos elegir otras medidas, pero por ahora, nuestro panel mostrará distintas lecturas de mq4.
    5. Haga clic en Guardar en la parte superior derecha y listo.

En caso de que tenga problemas, puede verificar su configuración con la de la captura de pantalla adjunta.

Paso 7: Conclusión

Envolver
Envolver

En este tutorial, pudo configurar una red MQTT sólida compuesta por un solo nodo y un intermediario. También pudo visualizar sus datos de IOT usando Grafana. Por último, pudo componer esta arquitectura de sistema simple desde (con suerte) la comodidad de su navegador y PC mediante el uso de una conexión SSH.

Es posible que deseemos mejorar algunas cosas.

  • Las lecturas del sensor en nuestro gráfico no son realmente lecturas precisas del sensor, son el voltaje de salida de nuestro sensor. Deben calibrarse, consulte esta publicación de blog para obtener más detalles.
  • Nuestra configuración de raspberry pi se puede hacer mucho más liviana usando una placa ESP8266 conectada al arduino y eliminando el pi por completo. Vea una introducción al módulo ESP8266.
  • Es posible que deseemos agregar alertas para eventos específicos. Afortunadamente, Grafana ofrece una forma de hacerlo.

Dejaré algunas lecturas adicionales para seducir tu imaginación con el mundo de IOT. ¡Espero verte en el próximo instructivo!

Lecturas adicionales:

Recomendado: