Sadržaj:

Pratite kvalitetu zraka pomoću Grafane i Raspberry Pi: 7 koraka
Pratite kvalitetu zraka pomoću Grafane i Raspberry Pi: 7 koraka

Video: Pratite kvalitetu zraka pomoću Grafane i Raspberry Pi: 7 koraka

Video: Pratite kvalitetu zraka pomoću Grafane i Raspberry Pi: 7 koraka
Video: How To Do Stable Diffusion LORA Training By Using Web UI On Different Models - Tested SD 1.5, SD 2.1 2024, Srpanj
Anonim
Pratite kvalitetu zraka pomoću Grafane i Raspberry Pi
Pratite kvalitetu zraka pomoću Grafane i Raspberry Pi

Tražio sam mali IOT projekt i prijatelj mi je preporučio da pogledam ovaj vodič:

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

Toplo preporučujem da slijedite vodič za nastavak postavljanja Raspberry Pi za praćenje. Ovaj će vodič dovršiti daljnje korake u dizajnu jednostavnog IoT uređaja koji omogućuje visoku toleranciju pogrešaka, kao i koliko Raspberry Pi može biti koristan kada se upari s Arduinom.

Također ulazim u učinkovitost i donekle ograničenje MQ* modela senzora zraka. MQ* senzori su jeftini i prilično učinkoviti te ih je super jednostavno postaviti.

Sve u svemu, ovo će vam pomoći da započnete s povezivanjem Arduina na internet na najjednostavniji mogući način i postavlja način na koji ćete koristiti module lakših dimenzija (re: ESP8266).

Zabavi se!

Korak 1: Oprema + postavljanje

Oprema

  • Raspberry Pi s instaliranim Raspbian -om
  • Napajanje malinom Pi
  • Arduino Uno/ekvivalent
  • Muški USB priključak tipa B do tipa A (trebao bi doći s vašim Arduinom)
  • Bilo koji od senzora MQ* (koristio sam MQ-2, 4, 5 i 135)
  • Razne kratkospojne žice
  • mini ploča

Postaviti

Ovaj je vodič zamišljen kao blagi uvod u korištenje Arduina i Raspberry Pi - pomoći će vam znati kako koristiti linux terminal. Međutim, ne pretpostavljam puno iskustva u radu na Arduinu ili Raspberry Pi - sve što vam doista treba je oprema i znatiželjan stav.

  • Morat ćete dovršiti korake u ovom vodiču.
  • Preporučujem da koristite Secure Shell (SSH) za sučelje s Raspberry Pi jer vam to omogućuje jednostavan unos naredbi. Povezivanje putem SSH -a razlikuje se koristite li Windows, Linux ili Mac. Linux i Mac prilično su laki za korištenje u pogledu ssh -a (naredba za otvaranje SSH -a doslovno je ssh). Pogledajte Putty za Windows. Preporučujem vam da provjerite zaslon kao način održavanja sesije tijekom projekta.
  • Također ćete morati instalirati Python na Raspbian. Kad sam dovršio ove korake, napravio sam kopiju stare SD kartice koju sam ležao iz prethodnog projekta, na kojem je već bio instaliran Python. Ako vaša distribucija NOOBS -a/Raspbiana nema Python 3.7 ili noviju verziju, pogledajte ove korake za kompajliranje Pythona iz izvora.
  • Upoznajte se s gitom i instalirajte ga u slučaju da već nije instaliran u vašoj distribuciji Raspbiana.

Korak 2: Postavljanje kruga

Postavljanje kruga
Postavljanje kruga

Postoji jedan krug koji ćete morati postaviti u Arduinu.

Naveo sam shemu koju možete koristiti kao referencu.

Ljepota svih senzora za plin MQ-* je u tome što nakon što se uspostavi veza od 5 V i uzemljenje, ulazni otpor analognih pinova Arduina omogućuje ispravno funkcioniranje senzora.

Pazite da analogna veza s razvodne ploče u senzoru bude spojena na Arduino, a ne na digitalnu vezu. Ako ste tijekom testiranja suočeni s vrlo uskim rasponom vrijednosti, preporučujem da ovdje prvo provjerite svoju vezu.

Korak 3: Arduino kod i bljeskanje

U koraku koji slijedi ovaj, povezat ćemo Arduino ploču s Raspberry Pi. Prije nego što to učinimo, moramo bljeskati Arduino s kodom za čitanje senzora, kao i za prijenos podataka senzora na Raspberry Pi. To se može učiniti na bilo koji način koji inače gurate kôd na Arduino. Koristio sam alat treće strane osim Arduino IDE -a - stoga uvrštavam Arduino biblioteku na vrh. To nije potrebno za druge projekte.

Provjerite kôd za kopiranje/lijepljenje na kraju ovog odjeljka.

Što radi kod

Kôd je postavljen za dobivanje podataka s četiri različita senzora - ako koristite različite vrste senzora, bit će razumno promijeniti imena izlaznog signala poslanog sa serijskog porta.

U petlji provjeravamo traži li Raspberry Pi podatke od nas. Stoga koristimo vrlo jednostavnu Master/Slave konfiguraciju u kojoj će Raspberry Pi neprestano slati zahtjeve Arduinu za podatke. Ovo je mnogo jednostavnije nego imati brojač u Arduino kodu jer je lakše provjeriti koje vrijednosti rade iz Raspberry Pi, umjesto da morate bljeskati nove vrijednosti u Arduino.

Arduino, nakon što primi zahtjev za podacima, formatirat će izlaz kao GET parametar - to se odnosi na HTTP metode i jednostavno je izbor dizajna. Ako biste dizajnirali komunikacijsku shemu iz Arduina putem serijskog porta, mogli biste lako pristupiti bilo čemu drugom, sve dok je dizajnirate tako da su podaci razumno odvojeni. Odabrao sam GET jer je poznat i robustan.

Jednostavno testiranje…

Nakon što je Arduino bljesnuo i kôd pokrenut, otvorite serijski monitor Arduino IDE -a. Ako pošaljete pojedinačni znak "H" (osigurajte njegov kapital!) Dobit ćete korisnu količinu podataka. Čestitam, radi!

Uzorak, asinkroni sakupljač podataka MQ-*

#uključi
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 ispisuje vrijednost za ovu oznaku.
* Stvara samo nuspojave.
*/
voidvaluePrint (Oznaka niza, int čitanje) {
Serijski.ispis (naljepnica);
Serial.print ("=");
Serijski.ispis (čitanje);
}
voidloop () {
// vidjeti postoje li dolazni serijski podaci:
if (Serial.available ()> 0) {
// čita najstariji bajt u serijskom međuspremniku:
// "Kada pozovete Serial.read, bajt se uklanja iz međuspremnika za primanje i vraća u vaš kôd"
incomingByte = Serial.read ();
// ako je veliko H (ASCII 72), pročitajte vrijednosti i pošaljite ih na malinovo računalo.
// TODO: provjerite je li poruka uvijek iste duljine, svaki put
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", mq135Reading);
Serial.print ("\ n");
}
}
// čitati serijal samo svake sekunde
kašnjenje (1000);
}

pogledajte rawmain.cpp hostiran sa ❤ na GitHubu

Korak 4: Raspberry Pi kod

Sada kada ste konfigurirali Raspberry Pi prema https://dzone.com/articles/raspberry-pi-iot-sensor…, sada možete pokrenuti Raspberry Client kod koji će slati podatke putem MQTT-a u našu bazu podataka, koja također povezuje s Grafanom.

  1. Provjerite je li vaša malina povezana s internetom, a zatim izvedite naredbu git clone da biste kopirali cijeli kôd na Raspberry Pi. Vaša naredba će izgledati pomalo ovako:

    git klon

  2. Unutar terminala maline Pi izvedite naredbu za promjenu direktorija (cd) u "raspberry_client":

    cd malina_klijent.

  3. Morat ćete koristiti virtualno okruženje*. Jednostavan. Trčanje

    python3 -m venv env. To će stvoriti virtualno okruženje pod nazivom "env" koje ćemo koristiti za instaliranje ovisnosti.

  4. Sada moramo ući u svoje virtualno okruženje. Trčanje:

    izvor env/bin/aktiviraj. Sada ste spremni za instaliranje ovisnosti projekta.

  5. U paketu koji ste upravo klonirali nalazi se datoteka pod nazivom requirements.txt. Otvorite ovu datoteku; vidjet ćete da su nam potrebni paho-mqtt i pyserial paketi, kao i njihove odgovarajuće verzije. Sadržaj datoteke možete pregledati pokretanjem

    zahtjevi za mačke.txt. Za instaliranje ovih paketa, ru

    pip install -r requirements.txt.

  6. Ovo zaključuje konfiguraciju.

Doslovno svaki vodič koji koristi python spominje Virtual env, pa čak ću i za ovaj mali projekt spomenuti. Virtualna okruženja omogućuju vam da odvojite verzije ovisnosti, kao i da odvojite svoj Python tijek rada - To je lijep način pospremanja vaših Python radnih prostora. Ako prvi put koristite virtualna okruženja, pročitajte ih ukratko ovdje.

Što radi kod …

Datoteka client.py uvest će jednostavan skup knjižnica, uključujući naš vlastiti arduinosenzor. U glavnoj funkciji dobit ćemo vrijednosti iz Arduina, objaviti podatke u posredniku MQTT, a zatim spavati 10 sekundi.

Datoteka arduinosensor.py skup je pomoćnih metoda koje obuhvaćaju biblioteku paho.mqtt, a također pružaju i neke korisne komunikacijske sheme za komunikaciju s korisnim teretom Arduina (vidi: parse_payload). Naravno, kôd se nalazi na kraju ovog odjeljka.

Jednostavan klijent koji komunicira s arduino stavkom putem serijskog monitora. Očekujte da ćete kôd pronaći ovdje kada postane javan:

fromimportlibimportimport_module
importos
importtime
importarduinosensor
defmain ():
# otvoren definirani klijent
start_time = time.time ()
whileTrue:
čitanje = arduinosensor.get_values (os.environ.get ('PORT', "/dev/ttyUSB0"))
arduinosensor.pub ("python_client", korisni teret = čitanje)
time.sleep (10.0- ((time.time () -start_time) %10.0))
if_name _ == "_ main_":
glavni()

pogledajte rawclient.py hostirano sa ❤ na GitHubu

Korak 5: Sve spojite

Imamo postavljen Raspberry Python kod i postavljen je Arduino klijentski kod. Prijeđimo na povezivanje oba entiteta zajedno.

Prvo, spojimo Arduino i postavimo ispravnu konfiguraciju:

  1. Pokrenite na svom terminalu Raspberry Pi

    python -m serial.tools.list_ports. Ovdje će se navesti svi USB priključci koji podržavaju serijsku komunikaciju.

  2. Sada priključite svoj Arduino i pričekajte oko 2 sekunde da ga malina prepozna. Upisivanje

    python -m serial.tools.list_ports još jednom će vam ponovno pokazati portove. Možda ćete vidjeti dodatni popis - ako je to zaista tako, onda je ovaj novi unos u koji je vaš Arduino povezan. To će vjerojatno biti "/dev/ttyUSB0".

  3. Pokušajte pokrenuti python kôd u svom virtualnom okruženju pokretanjem python3.7 client.py. Pričekajte nekoliko sekundi (najviše deset) - ako se suočite s iznimkom, to znači da ćemo morati promijeniti vrijednost za naš port na malini pi. Ako vidite da kôd ispisuje redak koji počinje s "Poslano sljedećim korisnim teretom: …" Zatim ćete biti dobri da prijeđete na posljednji korak s Grafanom. Savjet: svakako pokrenite

    screen -S python prije nego što pokrenete python klijent, u protivnom ćete, kada prekinete vezu sa svojim malinom pi, izgubiti svoj pokrenuti python program. Tehnički, ne morate strogo koristiti "python" kao posljednji parametar, ali volim imenovati svoje sesije zaslona u skladu s tim.

    1. Da biste promijenili vrijednost za COM port, morat ćete postaviti varijablu okruženja prije pokretanja koda. Morat ćete ovo isprobati za svaku moguću vrijednost izlaza koju ste dobili prilikom izvođenja python -m serial.tools.list_ports. Na primjer, ako sam dobio dva unosa i bili bi sljedeći:

      • /dev/ttyUSB6
      • /dev/acm0

tada bi naredbe koje bih pokrenuo bile:

PORT = "/dev/ttyUSB6" python3.7 client.py, a da to ne uspijeva, naknadno bih ru

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

Nakon što dovršite ove korake, kôd će predati podatke našoj instanci baze podataka fluxdb, što će nam, kad se poveže s Grafanom, omogućiti pregled naše nadzorne ploče.

Korak 6: Konfiguracija Grafane i pregled nadzorne ploče

Grafana konfiguracija i pregled nadzorne ploče
Grafana konfiguracija i pregled nadzorne ploče

U redu, sada smo u posljednjoj dionici! Sada ćemo koristiti Grafanu za izradu jednostavne nadzorne ploče.

  1. Povežite se sa svojom instancom Grafana. Budući da ste slijedili korake iz izvornog članka o dzone -u, trebali biste se moći prijaviti sa svojim administratorskim korisnikom. Samo naprijed i prijavite se.
  2. Na lijevom oknu zadržite pokazivač iznad ikone "nadzorne ploče" - četiri kvadrata. Kliknite na "Upravljanje".
  3. Na novoj stranici kliknite "Nova nadzorna ploča". Nadalje, kliknite "Dodaj novu ploču".
  4. Ovo otvara Grafana editor. Izradit ćemo jednostavan prikaz koji prikazuje jednu mjernu vrijednost.

    1. U desnom oknu promijenite naslov ploče u nešto smisleno, poput "Kuhinjsko štivo". Također možete unijeti opcionalni opis.
    2. U donjem lijevom kutu, "Upit", dodat ćemo jedan vremenski niz. Grafana ovdje zaista blista jer možemo jednostavno stvoriti SQL izraze s sučeljem zasnovanim na klikovima. Pod "zadano" odaberite InfluxDB.
    3. Sada, za čitanje "A" - u FROM klauzuli, odaberite mjerenje "airtestt". Ako pogledate izvorni python kod u funkciji get_values arduinosensor.py, vidjet ćete da definiramo ovu tablicu airtestta unutar koda.
    4. Za uzorak idemo na klauzulu "SELECT" i odaberite polje (mq4). U početku će nam naša nadzorna ploča dati izbor "mean ()" - kliknite na ovaj izbor i odaberite "Ukloni". zatim kliknite znak plus i pod "Agregacije" odaberite "različit ()". Ovo će pokazati određene vremenske točke. Možemo izabrati i druge mjere, ali za sada će naš panel pokazati različita očitanja iz mq4.
    5. Kliknite Spremi u gornjem desnom kutu i gotovi ste!

U slučaju da naiđete na problem, svoje postavke možete provjeriti pomoću onih na priloženoj snimci zaslona.

Korak 7: Završite

Zamotati
Zamotati

U ovom vodiču uspjeli ste postaviti robusnu MQTT mrežu sastavljenu od jednog čvora i posrednika. Također ste mogli vizualizirati svoje IOT podatke pomoću Grafane. Na kraju, ovu jednostavnu arhitekturu sustava uspjeli ste sastaviti iz (nadamo se) udobnosti vašeg preglednika i računala putem SSH veze.

Možda bismo htjeli poboljšati neke stvari.

  • Očitavanja senzora na našem grafikonu zapravo nisu točna očitanja senzora - oni su izlazni napon našeg senzora. Moraju se kalibrirati, za više detalja pogledajte ovaj blog post.
  • Naša konfiguracija maline pi može se učiniti mnogo lakšom korištenjem ploče ESP8266 spojene na arduino i potpuno uklanjanjem pi. Pogledajte uvod u modul ESP8266.
  • Možda bismo htjeli dodati upozorenja za određene događaje. Srećom, Grafana nudi način za to.

Ostavit ću još čitanja kako bih zamamio vašu maštu svijetom IOT -a. Veselim se vidjeti vas u sljedećim instrukcijama!

Daljnja čitanja:

Preporučeni: