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, Juli
Anonim
Pratite kvalitetu zraka pomoću Grafane i Raspberry Pi
Pratite kvalitetu zraka pomoću Grafane i Raspberry Pi

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

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

Toplo preporučujem da pratite uputstva za nastavak postavljanja Raspberry Pi za nadgledanje. Ovaj vodič će dovršiti daljnje korake u dizajnu jednostavnog IoT uređaja koji dopušta visoku toleranciju grešaka, kao i koliko Raspberry Pi može biti koristan kada se upari s Arduinom.

Takođe ulazim u efikasnost i donekle ograničenje MQ* modela vazdušnih senzora. MQ* senzori su jeftini i prilično efikasni i super se lako postavljaju.

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 sa instaliranim Raspbian -om
  • Napajanje Raspberry Pi
  • Arduino Uno/ekvivalent
  • Muški na muški USB tip 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 vodič je 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 zaista treba je oprema i znatiželjan stav.

  • Morat ćete dovršiti korake u ovom vodiču.
  • Preporučujem vam da koristite Secure Shell (SSH) za povezivanje s Raspberry Pi, jer vam to omogućava lak unos naredbi. Povezivanje putem SSH -a razlikuje se bilo da koristite Windows, Linux ili Mac. Linux i Mac su prilično laki za korištenje u pogledu ssh -a (naredba za otvaranje SSH -a je doslovno ssh). Pogledajte Putty za Windows. Preporučujem vam da provjerite ekran kao način održavanja sesije tokom projekta.
  • Takođe ć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 jednom kada se uspostavi veza od 5 V i uzemljenje, ulazni otpor analognih pinova Arduina omogućava senzoru da radi ispravno.

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

Korak 3: Arduino kôd i bljeskanje

U koraku koji slijedi ovaj, povezat ćemo Arduino ploču s Raspberry Pi. Prije nego što to učinimo, moramo bljeskati Arduino sa 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.

Šta kod radi

Kôd je postavljen za dobivanje podataka sa četiri različita senzora - ako koristite različite tipove 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 funkcioniraju 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 Arduino zatreperi i kôd se pokrene, otvorite serijski monitor Arduino IDE -a. Ako pošaljete pojedinačni znak "H" (osigurajte njegovo veliko slovo!), Dobit ćete korisne podatke. Čestitamo, radi!

Uzorak, asinhroni sakupljač MQ-* podataka

#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 ispisuje vrijednost za ovu oznaku.
* Stvara samo nuspojave.
*/
voidvaluePrint (Oznaka niza, int čitanje) {
Serial.print (label);
Serial.print ("=");
Serial.print (čitanje);
}
voidloop () {
// vidjeti ima li ulaznih serijskih podataka:
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 malinovom hostu.
// TODO: provjerite je li poruka uvijek iste dužine, 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");
}
}
// čita seriju samo svake sekunde
kašnjenje (1000);
}

pogledajte rawmain.cpp hostiran sa ❤ na GitHub -u

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 sa 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 clone

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

    cd raspberry_client.

  3. Morat ćete koristiti virtualno okruženje*. Jednostavno. Trči

    python3 -m venv env. Ovo ć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 pogledati pokretanjem

    cat requirements.txt. Za instaliranje ovih paketa, ru

    pip install -r requirements.txt.

  6. Ovo završava konfiguraciju.

Bukvalno svaki vodič koji koristi python spominje Virtual env, pa čak i za ovaj mali projekat, spomenuću. Virtuelna okruženja omogućavaju vam da odvojite verzije zavisnosti, kao i da odvojite svoj tok rada Pythona - To je lep način za sređivanje vaših Python radnih prostora. Ako prvi put koristite virtualna okruženja, pročitajte ih ukratko ovdje.

Šta radi kod …

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

Datoteka arduinosensor.py je skup pomoćnih metoda koje se omotavaju oko biblioteke paho.mqtt, kao i pružaju neke korisne komunikacijske sheme za komunikaciju s korisnim teretom Arduina (vidi: parse_payload). Naravno, kôd je priložen na kraju ovog odjeljka.

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

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_":
main ()

pogledajte rawclient.py hostirano sa ❤ na GitHub -u

Korak 5: Sastavite sve zajedno

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

Prvo, spojimo Arduino i postavimo ispravnu konfiguraciju:

  1. Pokrenite na svom terminalu Raspberry Pi

    python -m serial.tools.list_ports. Ovo će navesti sve USB portove koji podržavaju serijsku komunikaciju.

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

    python -m serial.tools.list_ports još jednom će vam se ponovo prikazati portovi. Možda ćete vidjeti dodatni popis - ako je to zaista slučaj, onda je ovaj novi unos u koji je povezan vaš Arduino. 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 izuzetkom, to znači da ćemo morati promijeniti vrijednost za naš port na malini pi. Ako vidite da kôd ispisuje redak koji počinje sa "Poslano nakon korisnog tereta: …" Zatim ćete biti dobri da prijeđete na posljednji korak s Grafanom. Savjet: obavezno pokrenite

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

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

      • /dev/ttyUSB6
      • /dev/acm0

tada bi naredbe koje bih pokrenuo bile:

PORT = "/dev/ttyUSB6" python3.7 client.py, a da to ne uspije, 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 koja će nam, kada 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 stvaranje 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 na "Nova nadzorna ploča". Zatim kliknite "Dodaj novu ploču".
  4. Ovo otvara Grafana editor. Napravit ćemo jednostavan prikaz koji prikazuje jednu metriku.

    1. U desnom oknu promijenite naslov ploče u nešto smisleno, poput "Kuhinjsko štivo". Možete unijeti i opcionalni opis.
    2. U donjem lijevom kutu, "Upit", dodat ćemo jednu vremensku seriju. Grafana ovdje zaista blista jer možemo lako kreirati SQL izraze sa sučeljem zasnovanim na klikovima. Pod "default" 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 ispod "Agregacije" odaberite "različit ()". Ovo će pokazati određene vremenske tač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, možete provjeriti svoje postavke s onima na priloženom snimku zaslona.

Korak 7: Završite

Zamotati
Zamotati

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

Postoje neke stvari koje bismo možda htjeli poboljšati.

  • Očitavanja senzora na našem grafikonu nisu tačna očitanja senzora - oni su izlazni napon našeg senzora. Treba ih 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 želimo dodati upozorenja za određene događaje. Srećom, Grafana nudi način za to.

Ostavit ću još čitanja kako bih privukao vašu maštu u svijet IOT -a. Jedva čekam da vas vidim u sljedećim instrukcijama!

Dalje čitanje:

Preporučuje se: