Cuprins:

Urmăriți calitatea aerului utilizând Grafana și Raspberry Pi: 7 pași
Urmăriți calitatea aerului utilizând Grafana și Raspberry Pi: 7 pași

Video: Urmăriți calitatea aerului utilizând Grafana și Raspberry Pi: 7 pași

Video: Urmăriți calitatea aerului utilizând Grafana și Raspberry Pi: 7 pași
Video: Inspiră România: Calitatea aerului şi pădurile (@TVR1) 2024, Iulie
Anonim
Urmăriți calitatea aerului utilizând Grafana și Raspberry Pi
Urmăriți calitatea aerului utilizând Grafana și Raspberry Pi

Căutam un mic proiect IOT mic și un prieten mi-a recomandat să verific acest tutorial:

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

Vă recomandăm să urmați tutorialul pentru a continua în configurarea unui Raspberry Pi pentru monitorizare. Acest tutorial va finaliza pașii suplimentari în proiectarea unui dispozitiv IoT simplu care permite o toleranță ridicată la erori, precum și cât de util poate fi un Raspberry Pi atunci când este asociat cu Arduino.

De asemenea, intru în eficiența și oarecum limitarea modelelor MQ * ale senzorilor de aer. Senzorii MQ * sunt ieftini și destul de eficienți și sunt foarte ușor de configurat.

În general, acest lucru vă va ajuta să începeți să conectați un Arduino la internet în cel mai simplu mod posibil și să stabilească calea pentru utilizarea modulelor de amprentă mai ușoare (re: ESP8266).

A se distra!

Pasul 1: Echipament + Configurare

Echipament

  • Raspberry Pi cu Raspbian instalat
  • Alimentare Raspberry Pi
  • Arduino Uno / Echivalent
  • USB de la bărbat la bărbat de tip B la tip A (ar trebui să vină cu Arduino)
  • Oricare dintre senzorii MQ * (am folosit MQ-2, 4, 5 și 135)
  • Firuri jumper asortate
  • mini panou de prindere

Înființat

Acest tutorial este conceput ca o introducere ușoară a utilizării Arduino și Raspberry Pi - vă va ajuta să știți cum să utilizați terminalul Linux. Cu toate acestea, nu îmi asum multă experiență în lucrul la Arduino sau Raspberry Pi - tot ce aveți nevoie este echipamentul furnizat și o atitudine curioasă.

  • Va trebui să parcurgeți pașii din acest tutorial.
  • Vă recomand să utilizați Secure Shell (SSH) pentru a interfața cu Raspberry Pi, deoarece acest lucru vă permite să introduceți comenzi cu ușurință. Conectarea prin SSH diferă dacă utilizați Windows, Linux sau Mac. Linux și Mac sunt destul de ușor de utilizat în ceea ce privește ssh (comanda pentru a deschide SSH este literalmente ssh). Check out Putty pentru Windows. Vă recomand să verificați ecranul ca modalitate de a vă menține sesiunea în timpul proiectului.
  • De asemenea, va trebui să instalați Python pe Raspbian. Când am finalizat acești pași, am făcut o copie a unui card SD vechi pe care îl aveam în jurul unui proiect anterior, care avea deja instalat Python. Dacă distribuția dvs. de NOOBS / Raspbian nu are Python 3.7 sau o versiune ulterioară, consultați acești pași pentru a compila Python din sursă.
  • Faceți cunoștință cu git și instalați-l în cazul în care nu este deja instalat în distribuția dvs. Raspbian.

Pasul 2: Configurarea circuitului

Configurarea circuitului
Configurarea circuitului

Există un circuit pe care va trebui să îl configurați în Arduino.

Am furnizat o schemă pe care o puteți folosi ca referință.

Frumusețea tuturor senzorilor de gaz MQ- * este că, odată realizată o conexiune de 5 volți și masă, rezistența de intrare a pinilor analogici Arduino permite senzorului să funcționeze corect.

Aveți grijă să vă asigurați că conexiunea analogică de la placa de rupere din senzor este conectată la Arduino și nu la conexiunea digitală. Dacă vă confruntați cu o gamă foarte mică de valori atunci când testați, vă recomand să verificați mai întâi conexiunea aici.

Pasul 3: Cod Arduino și intermitent

În pasul următor, vom conecta placa Arduino la Raspberry Pi. Înainte de a face acest lucru, trebuie să intermitem Arduino cu cod pentru a citi senzorul, precum și pentru a transmite datele senzorului către Raspberry Pi. Acest lucru se poate face în orice mod în care în mod normal împingeți codul către Arduino. Am folosit un instrument terță parte, în afară de Arduino IDE - prin urmare, includ biblioteca Arduino în partea de sus. Acest lucru nu este necesar pentru alte proiecte.

Verificați codul de copiat / lipit la sfârșitul acestei secțiuni.

Ce face codul

Codul este configurat pentru a obține date de la patru senzori diferiți - dacă utilizați diferite tipuri de senzori, va fi sensibil să modificați denumirile pe semnalul de ieșire trimis de la portul Serial.

În buclă verificăm dacă Raspberry Pi ne solicită date. Prin urmare, folosim o configurație Master / Slave foarte simplă în care Raspberry Pi va face continuu cereri către Arduino pentru date. Acest lucru este mult mai simplu decât să ai un contor în codul Arduino, deoarece este mai ușor să testezi ce valori funcționează de la Raspberry Pi, în loc să trebuiască să arunci valori noi pe Arduino.

Arduino, odată ce a primit o cerere de date, va formata ieșirea ca parametru GET - acesta este legat de metodele HTTP și este pur și simplu o alegere de proiectare. Dacă ar fi să proiectați o schemă de comunicații de la Arduino prin portul serial, puteți alege cu ușurință orice altceva, atâta timp cât îl proiectați, astfel încât datele să fie separate în mod rezonabil. Am ales GET pentru că este familiar și robust.

Testare simplă …

După ce ați Arduino intermitent și codul rulează, deschideți Serial Monitor Arduino IDE. Dacă trimiteți singurul caracter „H” (asigurați-l capitalul!) Veți obține sarcina utilă de date. Felicitări, funcționează!

Un eșantion, colector asincron de date MQ- *

#include
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 tipărește valoarea pentru această etichetă.
* Creează numai efecte secundare.
*/
voidvaluePrint (Etichetă șir, citire int) {
Serial.print (etichetă);
Serial.print ("=");
Serial.print (citire);
}
voidloop () {
// vezi dacă există date seriale de intrare:
if (Serial.available ()> 0) {
// citiți cel mai vechi octet din bufferul serial:
// „Când apelați Serial.read, un octet este eliminat din bufferul de recepție și returnat la codul dvs.”
incomingByte = Serial.read ();
// dacă este un H majuscule (ASCII 72), citiți valorile și trimiteți-le către gazda zmeură.
// TODO: asigurați-vă că mesajul are întotdeauna aceeași lungime, de fiecare dată
if (incomingByte == 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", mq135Citire);
Serial.print ("\ n");
}
}
// citiți serialul în fiecare secundă
întârziere (1000);
}

vizualizați rawmain.cpp găzduit cu ❤ de GitHub

Pasul 4: Cod Raspberry Pi

Acum că ați configurat Raspberry Pi conform https://dzone.com/articles/raspberry-pi-iot-sensor…, puteți rula acum codul Raspberry Client care va trimite date prin MQTT la baza noastră de date, care de asemenea se conectează la Grafana.

  1. Asigurați-vă că zmeura este conectată la internet și apoi efectuați o comandă git clone pentru a copia întregul cod pe Raspberry Pi. Comanda ta va arăta puțin ca:

    git clone

  2. În terminalul raspberry Pi, efectuați o comandă de modificare a directorului (cd) în „raspberry_client”:

    cd raspberry_client.

  3. Va trebui să utilizați un mediu virtual *. Simplu. Alerga

    python3 -m venv env. Aceasta va crea un mediu virtual numit „env” pe care îl vom folosi pentru a instala dependențe.

  4. Acum, trebuie să intrăm în mediul nostru virtual. Alerga:

    sursa env / bin / activate. Acum sunteți gata să instalați dependențele proiectului.

  5. În pachetul pe care tocmai l-ați clonat există un fișier numit requirements.txt. Deschideți acest fișier; veți vedea că avem nevoie de pachetele paho-mqtt și pyserial, precum și versiunile lor respective. Puteți vizualiza conținutul fișierului rulând

    cerințele pisicii.txt. Pentru a instala aceste pachete, ru

    pip install -r requirements.txt.

  6. Aceasta încheie configurația.

Literal, fiecare tutorial care folosește python face o mențiune despre Virtual env și, chiar și pentru acest mic proiect, voi face o mențiune. Mediile virtuale vă permit să separați versiunile dependențelor, precum și să vă separați fluxul de lucru Python - Este un mod frumos de a vă ordona spațiile de lucru Python. Dacă este prima dată când utilizați medii virtuale, citiți-le pe scurt aici.

Ce face codul …

Fișierul client.py va importa un set simplu de biblioteci, inclusiv propriul nostru senzor arduinos. În funcția principală, vom obține valorile din Arduino, vom publica datele către brokerul MQTT și apoi vom dormi timp de 10 secunde.

Fișierul arduinosensor.py este un set de metode de ajutor care înfășoară biblioteca paho.mqtt, precum și oferă câteva scheme utile de comunicare pentru comunicarea cu sarcina utilă a Arduino (a se vedea: parse_payload). Desigur, codul este atașat la sfârșitul acestei secțiuni.

Un client simplu care comunică cu un articol arduino prin intermediul monitorului Serial. Așteptați să găsiți codul aici când va fi public:

fromimportlibimportimport_module
importos
timp de import
importarduinosensor
defmain ():
# deschideți clientul definit
start_time = time.time ()
whileTrue:
reading = arduinosensor.get_values (os.environ.get ('PORT', "/ dev / ttyUSB0"))
arduinosensor.pub ("python_client", sarcină utilă = citire)
time.sleep (10.0- ((time.time () -start_time)% 10.0))
if_name _ == "_ main_":
principal()

vizualizați rawclient.py găzduit cu ❤ de GitHub

Pasul 5: Puneți totul împreună

Avem configurat codul Raspberry Python și avem configurat codul client Arduino. Să trecem la conectarea ambelor entități împreună.

Mai întâi, să conectăm Arduino și să configurăm configurația corectă:

  1. Pe terminalul dvs. Raspberry Pi, rulați

    python -m serial.tools.list_ports. Aceasta va enumera toate porturile USB care acceptă comunicarea serială.

  2. Acum, conectați-vă Arduino și așteptați aproximativ 2 secunde până când Raspberry îl recunoaște. Tastând

    python -m serial.tools.list_ports încă o dată vă vor arăta din nou porturile. Este posibil să vedeți o listă suplimentară care apare - dacă într-adevăr este cazul, atunci această nouă intrare este intrarea la care este conectat Arduino. Probabil că va fi „/ dev / ttyUSB0”.

  3. Încercați să rulați codul python în mediul virtual executând python3.7 client.py. Așteptați câteva secunde (cel mult zece) - dacă vă confruntați cu o excepție, aceasta înseamnă că va trebui să schimbăm valoarea pentru portul nostru de com de pe raspberry pi. Dacă vedeți că codul tipărește o linie care începe cu „Trimis după sarcina utilă:…” Apoi, veți fi bine să mergeți la pasul final cu Grafana. Sfat: asigurați-vă că rulați

    ecran -S python înainte de a porni clientul Python, în caz contrar, când vă terminați conexiunea la raspberry pi, veți pierde programul Python care rulează. Din punct de vedere tehnic, nu este nevoie să utilizați strict „python” ca ultim parametru, dar îmi place să-mi numesc sesiunile de ecran în consecință.

    1. Pentru a modifica valoarea portului COM, va trebui să setați o variabilă de mediu înainte de a rula codul. Va trebui să încercați acest lucru pentru fiecare valoare posibilă a rezultatului obținut atunci când rulați python -m serial.tools.list_ports. De exemplu, dacă suma înregistrărilor pe care le-am obținut au fost două și ar fi următoarele:

      • / dev / ttyUSB6
      • / dev / acm0

atunci comenzile pe care le-aș executa ar fi:

PORT = "/ dev / ttyUSB6" python3.7 client.py, și dacă asta nu ar funcționa, aș ruza ulterior

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

După ce ați parcurs acești pași, codul va trimite datele către instanța noastră de bază de date influxdb care, atunci când este conectat la Grafana, ne va permite să vizualizăm tabloul nostru de bord.

Pasul 6: Configurarea Grafana și vizualizarea tabloului de bord

Configurare Grafana și vizualizare tablou de bord
Configurare Grafana și vizualizare tablou de bord

Bine, suntem acum în treapta finală! Vom folosi acum Grafana pentru a crea un tablou de bord simplu.

  1. Conectați-vă la instanța dvs. Grafana. Deoarece ați urmat pașii din articolul original dzone, ar trebui să vă puteți conecta cu utilizatorul administrator. Continuați și conectați-vă.
  2. În panoul din stânga, plasați cursorul peste pictograma „tablouri de bord” - cele patru pătrate. Faceți clic pe „Gestionați”.
  3. Pe pagina nouă, faceți clic pe „Tablou de bord nou”. Mai departe, faceți clic pe „Adăugați un panou nou”.
  4. Aceasta deschide editorul Grafana. Vom crea o vizualizare simplă care arată o singură valoare.

    1. În panoul din dreapta, schimbați titlul panoului cu ceva semnificativ, cum ar fi „Lecturi în bucătărie”. De asemenea, puteți introduce o descriere opțională.
    2. În partea stângă jos, „Interogare”, vom adăuga o singură serie temporală. Grafana strălucește cu adevărat aici, deoarece putem crea cu ușurință instrucțiuni SQL cu o interfață bazată pe clicuri. Sub „implicit”, alegeți InfluxDB.
    3. Acum, pentru citirea „A” - în clauza FROM, selectați măsurarea „airtestt”. Dacă vă uitați la codul original Python în funcția get_values a arduinosensor.py, veți vedea că definim acest tabel airtestt în cadrul codului.
    4. Pentru un eșantion, să mergem la clauza „SELECT” și să alegem câmpul (mq4). Inițial, tabloul nostru de bord ne va oferi opțiunea „mean ()” - faceți clic pe această alegere și selectați „Remove”. apoi, faceți clic pe semnul plus și, sub „Agregări” alegeți „distinct ()”. Aceasta va arăta anumite puncte de timp. Putem alege alte măsuri, dar pentru moment, panoul nostru va afișa citiri distincte de la mq4.
    5. Faceți clic pe Salvare în dreapta sus și ați terminat!

În cazul în care întâmpinați probleme, vă puteți verifica setările cu cele din captura de ecran atașată.

Pasul 7: încheie

Învelire
Învelire

În acest tutorial ați putut configura o rețea robustă MQTT compusă dintr-un singur nod și un broker. De asemenea, ați putut să vă vizualizați datele IOT folosind Grafana. În cele din urmă, ați reușit să compuneți această arhitectură simplă de sistem din (sperăm) confortul browserului și al computerului dvs. prin utilizarea unei conexiuni SSH.

Există câteva lucruri pe care am putea dori să le îmbunătățim.

  • Citirile senzorilor din graficul nostru nu sunt de fapt citiri precise ale senzorilor - sunt tensiunea de ieșire de la senzorul nostru. Trebuie calibrate, consultați această postare pe blog pentru mai multe detalii.
  • Configurația noastră raspberry pi poate fi mult mai ușoară utilizând o placă ESP8266 conectată la arduino și scoaterea pi complet. Consultați o prezentare a modulului ESP8266.
  • Este posibil să dorim să adăugăm alerte pentru evenimente specifice. Din fericire, Grafana oferă un mod de a face asta.

Voi lăsa câteva lecturi suplimentare pentru a vă atrage imaginația cu lumea IOT. Aștept cu nerăbdare să vă văd în următorul instructabil!

Lecturi suplimentare:

Recomandat: