Taula de continguts:

Feu un seguiment de la qualitat de l’aire mitjançant Grafana i Raspberry Pi: 7 passos
Feu un seguiment de la qualitat de l’aire mitjançant Grafana i Raspberry Pi: 7 passos

Vídeo: Feu un seguiment de la qualitat de l’aire mitjançant Grafana i Raspberry Pi: 7 passos

Vídeo: Feu un seguiment de la qualitat de l’aire mitjançant Grafana i Raspberry Pi: 7 passos
Vídeo: Мужчина Строит Секретный Подземный БУНКЕР На Своем Заднем Дворе 2024, Juliol
Anonim
Feu un seguiment de la qualitat de l’aire mitjançant Grafana i Raspberry Pi
Feu un seguiment de la qualitat de l’aire mitjançant Grafana i Raspberry Pi

Buscava un petit projecte IOT i un amic em va recomanar que fes un cop d'ull a aquest tutorial:

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

Us recomano seguir el tutorial per continuar amb la configuració d'un Raspberry Pi per al control. Aquest tutorial completarà altres passos en el disseny d'un dispositiu IoT simple que permeti una tolerància d'errors elevada, així com la utilitat que pot tenir un Raspberry Pi quan es combina amb Arduino.

També aprofundeixo en l’eficàcia i en certa manera la limitació dels models MQ * dels sensors d’aire. Els sensors MQ * són econòmics i bastant eficaços i són molt fàcils de configurar.

En general, això us ajudarà a començar a connectar un Arduino a Internet de la manera més senzilla possible i us permetrà utilitzar els mòduls d’empremta més lleugers (re: ESP8266).

Diverteix-te!

Pas 1: equipament + configuració

Equipament

  • Raspberry Pi amb Raspbian instal·lat
  • Alimentació Raspberry Pi
  • Arduino Uno / Equivalent
  • USB masculí a masculí tipus B a tipus A (hauria de venir amb el vostre Arduino)
  • Qualsevol dels sensors MQ * (he utilitzat el MQ-2, 4, 5 i 135)
  • Variats cables de pont
  • mini taulell de suport

Configuració

Aquest tutorial s’entén com una introducció suau a l’ús d’Arduino i Raspberry Pi; us ajudarà a saber com utilitzar el terminal Linux. Tot i això, no suposo molta experiència amb el treball a Arduino o Raspberry Pi; tot el que realment necessiteu és l’equip subministrat i una actitud curiosa.

  • Haureu de completar els passos d’aquest tutorial.
  • Us recomano que utilitzeu Secure Shell (SSH) per connectar-vos amb el Raspberry Pi, ja que us permet introduir ordres fàcilment. La connexió mitjançant SSH és diferent si utilitzeu Windows, Linux o Mac. Linux i Mac són bastant fàcils d'utilitzar pel que fa a ssh (l'ordre per obrir SSH és literalment ssh). Mireu Putty per a Windows. Us recomano que consulteu la pantalla com a forma de mantenir la sessió durant el projecte.
  • També haureu d’instal·lar Python a Raspbian. Quan vaig completar aquests passos, vaig fer una còpia d’una antiga targeta SD que tenia al voltant d’un projecte anterior, que ja tenia instal·lat Python. Si la vostra distribució de NOOBS / Raspbian no té Python 3.7 o superior, consulteu aquests passos per compilar Python des de la font.
  • Conegueu Git i instal·leu-lo per si encara no està instal·lat a la vostra distribució de Raspbian.

Pas 2: Configuració del circuit

Configuració del circuit
Configuració del circuit

Hi ha un circuit que haureu de configurar a l’Arduino.

He proporcionat un esquema que podeu utilitzar com a referència.

La bellesa de tots els sensors de gas MQ- * és que un cop realitzada una connexió de 5 volts i terra, la resistència d’entrada dels pins analògics d’Arduino permet que el sensor funcioni correctament.

Aneu amb compte de garantir que la connexió analògica de la placa de sortida del sensor està connectada a l’Arduino i no a la connexió digital. Si us trobeu amb un rang de valors molt reduït en fer les proves, us recomanem que primer comproveu la vostra connexió.

Pas 3: Codi Arduino i intermitent

Al pas següent, connectarem la placa Arduino al Raspberry Pi. Abans de fer-ho, hem de fer flash Arduino amb codi per llegir el sensor i transmetre les dades del sensor al Raspberry Pi. Això es pot fer de qualsevol manera que normalment envieu el codi a l'Arduino. He utilitzat una eina de tercers a part de l'IDE Arduino; per tant, incloc la biblioteca Arduino a la part superior. Això no és necessari per a altres projectes.

Comproveu el codi per copiar / enganxar al final d'aquesta secció.

Què fa el codi

El codi està configurat per obtenir dades de quatre sensors diferents; si utilitzeu diferents tipus de sensors, serà raonable canviar els noms del senyal de sortida enviat des del port sèrie.

Al bucle comprovem si el Raspberry Pi ens sol·licita dades. Per tant, fem servir una configuració Màster / Esclau molt senzilla on el Raspberry Pi contínuament farà sol·licituds de dades a l’Arduino. Això és molt més senzill que tenir un comptador al codi Arduino, perquè és més fàcil provar quins valors funcionen des del Raspberry Pi, en lloc d’haver de fer passar nous valors a l’Arduino.

L'arduino, un cop rebuda una sol·licitud de dades, formatarà la sortida com a paràmetre GET; això està relacionat amb els mètodes HTTP i és simplement una opció de disseny. Si haguéssiu de dissenyar un esquema de comunicació des d’Arduino mitjançant el port sèrie, podríeu optar per qualsevol altra cosa, sempre que el dissenyeu perquè les dades estiguin raonablement separades. Vaig triar GET perquè és familiar i robust.

Prova senzilla …

Un cop tingueu Arduino llampat i el codi en execució, obriu el monitor sèrie de l'IDE Arduino. Si envieu el caràcter únic "H" (assegureu-ne el capital!) Obtindreu la càrrega útil de dades. Enhorabona, funciona!

Un recopilador de mostra asíncron de dades MQ- *

#incloure
int mq2 = A2;
int mq4 = A3;
int mq5 = A4;
int mq135 = A5;
int incomingByte;
voidsetup () {
pinMode (mq2, INPUT);
pinMode (mq4, INPUT);
pinMode (mq5, INPUT);
pinMode (mq135, INPUT);
Serial.begin (9600);
}
/ * valuePrint imprimeix el valor d'aquesta etiqueta.
* Crea només efectes secundaris.
*/
voidvaluePrint (etiqueta de cadena, lectura int)
Serial.print (etiqueta);
Serial.print ("=");
Serial.print (lectura);
}
voidloop () {
// veure si hi ha dades de sèrie entrants:
if (Serial.available ()> 0) {
// llegiu el byte més antic al buffer de sèrie:
// "Quan truqueu a Serial.read, s'elimina un byte de la memòria intermèdia de recepció i es torna al vostre codi"
incomingByte = Serial.read ();
// si és una majúscula H (ASCII 72), llegiu els valors i envieu-los a l'amfitrió del gerd.
// TODO: assegureu-vos que el missatge tingui sempre la mateixa longitud, cada vegada
if (incomingByte == 72) {
int mq2Reading = analogRead (mq2);
int mq4Reading = analogRead (mq4);
int mq5Reading = analogRead (mq5);
int mq135Reading = analogRead (mq135);
Serial.print ("?");
valuePrint ("mq2", mq2Lectura);
Serial.print ("&");
valuePrint ("mq4", mq4Lectura);
Serial.print ("&");
valuePrint ("mq5", mq5Lectura);
Serial.print ("&");
valuePrint ("mq135", mq135Lectura);
Serial.print ("\ n");
}
}
// només llegiu la sèrie cada segon
retard (1000);
}

visualitza rawmain.cpp allotjat amb ❤ per GitHub

Pas 4: Codi Raspberry Pi

Ara que heu configurat Raspberry Pi segons https://dzone.com/articles/raspberry-pi-iot-sensor…, ara podeu executar el codi de client Raspberry que enviarà dades a través de MQTT a la nostra base de dades, que també connecta amb Grafana.

  1. Assegureu-vos que el vostre raspberry estigui connectat a Internet i, a continuació, realitzeu una ordre git clone per copiar tot el codi al Raspberry Pi. La vostra ordre s'assemblarà una mica a:

    git clone

  2. Dins del terminal del raspberry Pi, realitzeu una ordre de canvi de directori (cd) a "raspberry_client":

    CD raspberry_client.

  3. Haureu d’utilitzar un entorn virtual *. Senzill. Correr

    python3 -m venv env. Això crearà un entorn virtual anomenat "env" que utilitzarem per instal·lar dependències.

  4. Ara, hem d’entrar al nostre entorn virtual. Correr:

    font env / bin / activate. Ja esteu a punt per instal·lar les dependències del projecte.

  5. Al paquet que acabeu de clonar hi ha un fitxer anomenat requirements.txt. Obriu aquest fitxer; veureu que necessitem els paquets paho-mqtt i pyserial, així com les seves respectives versions. Podeu veure el contingut del fitxer executant

    requisits del gat.txt. Per instal·lar aquests paquets, ru

    pip install -r requirements.txt.

  6. Això completa la configuració.

Literalment, cada tutorial que utilitza python fa una menció a Virtual env, i fins i tot per a aquest petit projecte faré una menció. Els entorns virtuals us permeten separar versions de dependències, així com separar el vostre flux de treball Python: és una bona manera d’arreglar els vostres espais de treball Python. Si és la primera vegada que utilitzeu entorns virtuals, feu-ne una breu lectura aquí.

Què fa el codi …

El fitxer client.py importarà un conjunt senzill de biblioteques, inclòs el nostre propi sensor d’arduinos. A la funció principal, obtindrem els valors de l’Arduino, publicarem les dades al corredor MQTT i després dormirem durant 10 segons.

El fitxer arduinosensor.py és un conjunt de mètodes auxiliars que envolten la biblioteca paho.mqtt, a més de proporcionar alguns esquemes de comunicació útils per comunicar-se amb la càrrega útil de l'Arduino (vegeu: parse_payload). Per descomptat, el codi s’adjunta al final d’aquesta secció.

Un client senzill que es comunica amb un element arduino a través del monitor sèrie. Espereu trobar el codi aquí quan es faci públic:

fromimportlibimportimport_module
importos
temps d’importació
importarduinosensor
defmain ():
# obre el client definit
hora_inici = hora.hora ()
whileTrue:
reading = arduinosensor.get_values (os.environ.get ('PORT', "/ dev / ttyUSB0"))
arduinosensor.pub ("python_client", càrrega útil = lectura)
time.sleep (10.0- ((time.time () -start_time)% 10.0))
if_name _ == "_ main_":
main ()

veure rawclient.py allotjat amb ❤ per GitHub

Pas 5: ajuntar-ho tot

Tenim configurat el codi Raspberry Python i el codi client Arduino. Passem a connectar ambdues entitats juntes.

En primer lloc, connectem l’Arduino i configurem la configuració correcta:

  1. Executeu al terminal Raspberry Pi

    python -m serial.tools.list_ports. Es mostraran tots els ports USB que admeten la comunicació en sèrie.

  2. Ara, connecteu el vostre Arduino i espereu uns 2 segons perquè el gerd el reconegui. Escrivint

    python -m serial.tools.list_ports una vegada més us mostrarà els ports de nou. És possible que aparegui una llista addicional: si és que és així, aquesta nova entrada és l'entrada a la qual està connectat el vostre Arduino. Probablement serà "/ dev / ttyUSB0".

  3. Proveu d'executar el codi python al vostre entorn virtual executant python3.7 client.py. Espereu uns segons (com a màxim deu); si teniu una excepció, això vol dir que haurem de canviar el valor del nostre port de com a raspberry pi. Si veieu que el codi imprimeix una línia que comença amb "S'ha enviat la càrrega útil següent: …" Aleshores, estareu bé per passar al pas final amb Grafana. Consell: assegureu-vos de córrer

    pantalla -S python abans d'iniciar el client Python, en cas contrari, quan finalitzeu la connexió amb el vostre raspberry pi, perdrà el programa Python en execució. Tècnicament, no cal que utilitzeu estrictament "python" com a darrer paràmetre, però m'agrada anomenar les meves sessions de pantalla en conseqüència.

    1. Per canviar el valor del port COM, haureu d’establir una variable d’entorn abans d’executar el codi. Haureu de provar-ho per tots els valors possibles de sortida que obtingueu en executar python -m serial.tools.list_ports. Per exemple, si la quantitat d’entrades que he obtingut era de dos i era la següent:

      • / dev / ttyUSB6
      • / dev / acm0

llavors les ordres que executaria serien:

PORT = "/ dev / ttyUSB6" python3.7 client.py, i si això no funcionés, posteriorment ho faria

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

Un cop hàgiu completat aquests passos, el codi enviarà les dades a la nostra instància de base de dades influxdb que, quan estigueu connectada a Grafana, ens permetrà visualitzar el nostre tauler.

Pas 6: Configuració de Grafana i visualització del tauler

Configuració de Grafana i visualització del tauler
Configuració de Grafana i visualització del tauler

Molt bé, ara som a la recta final! Ara utilitzarem Grafana per crear un senzill tauler.

  1. Connecteu-vos a la vostra instància de Grafana. Com que heu seguit els passos de l'article original de la zona de zones, haureu de poder iniciar sessió amb l'usuari administrador. Seguiu i inicieu la sessió.
  2. Al tauler esquerre, passeu el cursor per sobre de la icona de "taulers": els quatre quadrats. Feu clic a "Gestiona".
  3. A la pàgina nova, feu clic a "Tauler nou". A més, feu clic a "Afegeix un tauler nou".
  4. Això obre l'editor de Grafana. Crearem una visualització senzilla que mostri una única mètrica.

    1. Al tauler de la dreta, canvieu el títol del tauler per un element significatiu, com ara "Lectures de cuina". També podeu introduir una descripció opcional.
    2. A la part inferior esquerra, "Consulta", afegirem una sola sèrie temporal. Grafana realment brilla aquí, ja que podem crear sentències SQL fàcilment amb una interfície basada en clics. A "predeterminat", trieu InfluxDB.
    3. Ara, per llegir "A", a la clàusula FROM, seleccioneu la mesura "airtestt". Si mireu el codi python original a la funció get_values d’arduinosensor.py, veureu que definim aquesta taula airtestt dins del codi.
    4. Per obtenir una mostra, anem a la clàusula "SELECT" i trieu camp (mq4). Originalment, el nostre tauler ens donaria l'opció "mean ()": feu clic a aquesta opció i seleccioneu "Elimina". després, feu clic al signe més i, a "Agregacions", trieu "distinct ()". Això mostrarà punts de temps específics. Podem triar altres mesures, però de moment, el nostre panell mostrarà lectures diferents de mq4.
    5. Feu clic a Desa a la part superior dreta i ja està.

En cas que tingueu problemes, podeu verificar la configuració amb els de la captura de pantalla adjunta.

Pas 7: conclou

Embolicar
Embolicar

En aquest tutorial heu pogut configurar una xarxa MQTT robusta composta per un únic node i un intermediari. També heu pogut visualitzar les vostres dades IOT mitjançant Grafana. Finalment, heu pogut compondre aquesta arquitectura senzilla del sistema (amb sort) de la comoditat del navegador i del PC mitjançant l’ús d’una connexió SSH.

Hi ha algunes coses que potser voldríem millorar.

  • Les lectures del sensor al nostre gràfic no són en realitat lectures del sensor exactes, sinó que són la tensió de sortida del nostre sensor. Cal calibrar-los; consulteu aquesta entrada del bloc per obtenir més detalls.
  • La nostra configuració de raspberry pi es pot fer molt més lleugera mitjançant l’ús d’una placa ESP8266 connectada a l’arduino i traient el pi completament. Consulteu una introducció al mòdul ESP8266.
  • És possible que vulguem afegir alertes per a esdeveniments específics. Afortunadament, Grafana ofereix una manera de fer-ho.

Deixaré una lectura més per atraure la vostra imaginació amb el món de l’IOT. Espero veure-us en la propera instrucció!

Més lectures:

Recomanat: