Kazalo:

Sledite kakovosti zraka z uporabo Grafane in Raspberry Pi: 7 korakov
Sledite kakovosti zraka z uporabo Grafane in Raspberry Pi: 7 korakov

Video: Sledite kakovosti zraka z uporabo Grafane in Raspberry Pi: 7 korakov

Video: Sledite kakovosti zraka z uporabo Grafane in Raspberry Pi: 7 korakov
Video: How To Do Stable Diffusion LORA Training By Using Web UI On Different Models - Tested SD 1.5, SD 2.1 2024, November
Anonim
Sledite kakovosti zraka z uporabo Grafane in Raspberry Pi
Sledite kakovosti zraka z uporabo Grafane in Raspberry Pi

Iskal sem majhen projekt IOT in prijatelj mi je priporočil, naj si ogledam to vadnico:

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

Zelo priporočam, da sledite vadnici, da nadaljujete pri nastavitvi Raspberry Pi za spremljanje. Ta vadnica bo zaključila nadaljnje korake pri oblikovanju preproste naprave IoT, ki omogoča visoko toleranco napak, pa tudi to, kako uporaben je lahko Raspberry Pi, ko je povezan z Arduinom.

Prav tako se ukvarjam z učinkovitostjo in nekoliko omejitvijo modelov senzorjev zraka MQ*. Senzorji MQ* so poceni in dokaj učinkoviti ter jih je zelo enostavno nastaviti.

Na splošno vam bo to pomagalo, da na najpreprostejši način začnete povezovati Arduino z internetom in določa način uporabe modulov lažjih odtisov (re: ESP8266).

Zabavaj se!

1. korak: Oprema + nastavitev

Oprema

  • Raspberry Pi z nameščenim Raspbian
  • Napajanje z Raspberry Pi
  • Arduino Uno/enakovredno
  • Moški USB moški tip B do tipa A (priložen mora biti z vašim Arduinom)
  • Vsak od senzorjev MQ* (uporabil sem MQ-2, 4, 5 in 135)
  • Različne mostične žice
  • mini ploščica

Nastaviti

Ta vadnica je mišljena kot nežen uvod v uporabo Arduina in Raspberry Pi - pomagala bo vedeti, kako uporabljati terminal Linux. Vendar ne predvidevam veliko izkušenj z delom na Arduinu ali Raspberry Pi - vse, kar resnično potrebujete, je oprema in radoveden odnos.

  • Dokončati morate korake v tej vadnici.
  • Priporočam, da za vmesnik z Raspberry Pi uporabite Secure Shell (SSH), saj vam to omogoča enostaven vnos ukazov. Povezovanje prek SSH se razlikuje, ali uporabljate Windows, Linux ali Mac. Linux in Mac sta glede ssh zelo enostavna za uporabo (ukaz za odpiranje SSH je dobesedno ssh). Oglejte si Putty za Windows. Priporočam, da si ogledate zaslon kot način za vzdrževanje seje med projektom.
  • Prav tako boste morali namestiti Python na Raspbian. Ko sem dokončal te korake, sem naredil kopijo stare kartice SD, ki sem jo imel iz prejšnjega projekta, v katerem je bil že nameščen Python. Če vaša distribucija NOOBS/Raspbian nima Pythona 3.7 ali novejšega, preverite te korake za prevedbo Pythona iz vira.
  • Spoznajte git in ga namestite, če še ni nameščen v vaši distribuciji Raspbian.

2. korak: Nastavitev vezja

Nastavitev vezja
Nastavitev vezja

V Arduinu morate nastaviti eno vezje.

Zagotovil sem shemo, ki jo lahko uporabite kot referenco.

Lepota vseh senzorjev za plin MQ-* je v tem, da po izvedbi 5-voltne povezave in ozemljitve vhodni upor analognih zatičev Arduino omogoča pravilno delovanje senzorja.

Pazite, da je analogna povezava z odklopne plošče v senzorju povezana z Arduinom in ne z digitalno povezavo. Če se pri testiranju soočate z zelo ozkim razponom vrednosti, vam priporočam, da najprej preverite svojo povezavo.

3. korak: Arduino koda in utripanje

V naslednjem koraku bomo ploščo Arduino povezali z Raspberry Pi. Preden to storimo, moramo utripati Arduino s kodo za branje senzorja in prenos podatkov senzorja na Raspberry Pi. To lahko storite na kakršen koli način, ki ga običajno potisnete v Arduino. Poleg Arduino IDE sem uporabil tudi orodje tretje osebe - zato na vrh vključujem knjižnico Arduino. Za druge projekte to ni potrebno.

Preverite kodo za kopiranje/lepljenje na koncu tega razdelka.

Kaj počne koda

Koda je nastavljena za pridobivanje podatkov iz štirih različnih senzorjev - če uporabljate različne tipe senzorjev, bo smiselno spremeniti poimenovanja izhodnega signala, poslanega iz zaporednih vrat.

V zanki preverimo, ali Raspberry Pi od nas zahteva podatke. Zato uporabljamo zelo preprosto konfiguracijo Master/Slave, kjer bo Raspberry Pi nenehno zahteval podatke za Arduino. To je veliko enostavnejše od števca v kodi Arduino, ker je lažje preizkusiti, katere vrednosti delujejo iz Raspberry Pi, namesto da bi morali v Arduino utripati nove vrednosti.

Arduino, ko bo prejel zahtevo po podatkih, bo izhod oblikoval kot parameter GET - to je povezano z metodami HTTP in je preprosto izbira oblikovanja. Če bi načrtovali komunikacijsko shemo iz Arduina prek zaporednih vrat, bi lahko brez težav uporabili karkoli drugega, če jo oblikujete tako, da so podatki razumno ločeni. Za GET sem se odločil, ker je znan in robusten.

Enostavno testiranje…

Ko je Arduino utripal in koda zagnana, odprite serijski monitor Arduino IDE. Če pošljete en sam znak "H" (zagotovite njegov kapital!), Boste dobili koristno količino podatkov. Čestitam, deluje!

Vzorec, asinhroni zbiralnik podatkov MQ-*

#vključ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 natisne vrednost te nalepke.
* Ustvarja samo stranske učinke.
*/
voidvaluePrint (oznaka niza, int branje) {
Serial.print (nalepka);
Serial.print ("=");
Serial.print (branje);
}
voidloop () {
// preverite, ali so vhodni serijski podatki:
if (Serial.available ()> 0) {
// preberemo najstarejši bajt v zaporedju:
// "Ko pokličete Serial.read, se bajt odstrani iz sprejemnega vmesnika in vrne v vašo kodo"
incomingByte = Serial.read ();
// če gre za veliko H (ASCII 72), preberite vrednosti in jih pošljite gostitelju malin.
// TODO: zagotovite, da je sporočilo vedno enako dolgo
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");
}
}
// samo vsako sekundo preberite serijo
zamuda (1000);
}

poglejte rawmain.cpp, ki ga gosti ❤ GitHub

4. korak: Koda Raspberry Pi

Zdaj, ko ste konfigurirali Raspberry Pi v skladu s https://dzone.com/articles/raspberry-pi-iot-sensor…, lahko zdaj zaženete kodo odjemalca Raspberry, ki bo pošiljala podatke prek MQTT v našo bazo podatkov, ki prav tako povezuje z Grafano.

  1. Prepričajte se, da je vaša malina povezana z internetom, nato pa izvedite ukaz git clone, da kopirate celotno kodo v Raspberry Pi. Vaš ukaz bo videti nekoliko tako:

    git clone

  2. V terminalu maline Pi izvedite ukaz za spremembo imenika (cd) v "raspberry_client":

    cd raspberry_client.

  3. Uporabiti boste morali virtualno okolje*. Enostavno. Teči

    python3 -m venv env. To bo ustvarilo virtualno okolje z imenom "env", ki ga bomo uporabili za namestitev odvisnosti.

  4. Zdaj moramo vstopiti v svoje virtualno okolje. Zaženi:

    vir env/bin/aktiviraj. Zdaj ste pripravljeni namestiti odvisnosti projekta.

  5. V paketu, ki ste ga pravkar klonirali, je datoteka z imenom requirements.txt. Odprite to datoteko; videli boste, da potrebujemo pakete paho-mqtt in pyserial ter njihove ustrezne različice. Vsebino datoteke si lahko ogledate tako, da zaženete

    mačje zahteve.txt. Za namestitev teh paketov, ru

    pip install -r requirements.txt.

  6. To zaključuje konfiguracijo.

Dobesedno vsaka vadnica, ki uporablja python, omenja Virtual env, in tudi za ta majhen projekt bom omenil. Navidezna okolja vam omogočajo ločevanje različic odvisnosti in ločevanje delovnega toka Python - To je lep način za pospravljanje delovnih prostorov Python. Če prvič uporabljate virtualna okolja, si jih na kratko preberite tukaj.

Kaj počne koda …

Datoteka client.py bo uvozila preprost nabor knjižnic, vključno z lastnim arduinosenzorjem. V glavni funkciji bomo dobili vrednosti iz Arduina, objavili podatke posredniku MQTT in nato spali 10 sekund.

Datoteka arduinosensor.py je niz pomožnih metod, ki se ovijejo okoli knjižnice paho.mqtt, poleg tega pa nudijo nekaj uporabnih komunikacijskih shem za komunikacijo s koristno obremenitvijo Arduina (glej: parse_payload). Seveda je koda priložena na koncu tega razdelka.

Preprost odjemalec, ki komunicira z arduino elementom prek serijskega monitorja. Pričakujte, da boste kodo našli tukaj, ko bo objavljena:

fromimportlibimportimport_module
importos
importtime
importarduinosensor
defmain ():
# odprta definirana stranka
start_time = time.time ()
medtem ko res:
branje = arduinosensor.get_values (os.environ.get ('PORT', "/dev/ttyUSB0"))
arduinosensor.pub ("python_client", koristna obremenitev = branje)
time.sleep (10.0- ((time.time () -start_time) %10.0))
if_name _ == "_ main_":
main ()

oglejte si rawclient.py, ki ga gosti ❤ GitHub

5. korak: Združite vse skupaj

Nastavili smo kodo Raspberry Python in nastavili kodo odjemalca Arduino. Preidimo k povezovanju obeh entitet skupaj.

Najprej povežimo Arduino in nastavimo pravilno konfiguracijo:

  1. Na terminalu Raspberry Pi zaženite

    python -m serial.tools.list_ports. Tu bodo prikazana vsa vrata USB, ki podpirajo serijsko komunikacijo.

  2. Zdaj priključite svoj Arduino in počakajte približno 2 sekundi, da ga malina prepozna. Vpisovanje

    python -m serial.tools.list_ports spet vam bodo znova prikazala vrata. Morda se bo prikazal dodaten seznam - če je res tako, potem je ta novi vnos vnos, v katerega je povezan vaš Arduino. To bo verjetno "/dev/ttyUSB0".

  3. Poskusite zagnati kodo python v svojem navideznem okolju tako, da zaženete python3.7 client.py. Počakajte nekaj sekund (največ deset) - če se soočite z izjemo, to pomeni, da bomo morali spremeniti vrednost našega com porta na malini pi. Če vidite, da koda natisne vrstico, ki se začne z "Poslano po koristnem tovoru: …" Potem lahko nadaljujete z zadnjim korakom z Grafano. Nasvet: zagotovo zaženite

    screen -S python Preden zaženete odjemalca python, boste v nasprotnem primeru, ko končate povezavo z malinovim pi, izgubili zagnani program python. Tehnično vam ni treba strogo uporabljati "python" kot zadnjega parametra, vendar mi je všeč, da svoje seje zaslona ustrezno poimenujem.

    1. Če želite spremeniti vrednost vrat COM, morate pred zagonom kode nastaviti spremenljivko okolja. To boste morali poskusiti za vsako možno vrednost izpisa, ki ste jo dobili pri izvajanju python -m serial.tools.list_ports. Na primer, če sem dobil dva vnosa in so bili naslednji:

      • /dev/ttyUSB6
      • /dev/acm0

potem bi bili ukazi, ki bi jih izvajal:

PORT = "/dev/ttyUSB6" python3.7 client.py, in če to ne bi delovalo, bi kasneje ru

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

Ko dokončate te korake, bo koda posredovala podatke našemu primerku zbirke podatkov fluxdb, ki nam bo, ko bo povezana z Grafano, omogočila ogled naše nadzorne plošče.

Korak 6: Konfiguracija Grafana in ogled nadzorne plošče

Grafana Konfiguracija in ogled nadzorne plošče
Grafana Konfiguracija in ogled nadzorne plošče

V redu, zdaj smo v zadnjem delu! Zdaj bomo z Grafano ustvarili preprosto nadzorno ploščo.

  1. Povežite se s svojim primerkom Grafana. Ker ste sledili korakom iz prvotnega članka o dzone, bi se morali prijaviti s skrbniškim uporabnikom. Pojdi naprej in se prijavi.
  2. Na levem podoknu se pomaknite nad ikono »nadzorne plošče« - štiri kvadrate. Kliknite na "Upravljanje".
  3. Na novi strani kliknite "Nova nadzorna plošča". Nato kliknite »Dodaj novo ploščo«.
  4. S tem se odpre urejevalnik Grafana. Ustvarili bomo preprost pogled, ki prikazuje eno samo meritev.

    1. V desnem podoknu spremenite naslov plošče v nekaj smiselnega, na primer »Branje v kuhinji«. Vnesete lahko tudi izbirni opis.
    2. V spodnjem levem kotu »Poizvedba« bomo dodali eno časovno vrsto. Grafana tukaj resnično sije, saj lahko preprosto ustvarimo stavke SQL z vmesnikom, ki temelji na kliku. Pri »privzeto« izberite InfluxDB.
    3. Zdaj za branje "A" - v klavzuli FROM izberite meritev "airtestt". Če pogledate izvirno kodo python v funkciji get_values arduinosensor.py, boste videli, da to tabelo airtestt definiramo znotraj kode.
    4. Za vzorec pojdimo na klavzulo "SELECT" in izberite polje (mq4). Prvotno nam bo naša nadzorna plošča dala na izbiro "mean ()" - kliknite to izbiro in izberite "Odstrani". nato kliknite znak plus in pod "Združevanja" izberite "različno ()". To bo pokazalo določene časovne točke. Izberemo lahko druge ukrepe, vendar bo zaenkrat naša plošča pokazala različne odčitke od mq4.
    5. Kliknite Shrani v zgornjem desnem kotu in končali ste!

Če naletite na težave, lahko svoje nastavitve preverite s tistimi na priloženem posnetku zaslona.

7. korak: Zaključite

Zaviti
Zaviti

V tej vadnici ste lahko nastavili robustno omrežje MQTT, sestavljeno iz enega vozlišča in posrednika. S pomočjo Grafane ste lahko vizualizirali tudi svoje podatke IOT. Nazadnje ste lahko to preprosto sistemsko arhitekturo sestavili iz (upajmo) udobja brskalnika in računalnika prek povezave SSH.

Nekaj stvari bi lahko želeli izboljšati.

  • Odčitki tipala v našem grafikonu dejansko niso natančni odčitki senzorja - so izhodna napetost našega senzorja. Umeriti jih je treba, za več podrobnosti si oglejte to objavo v spletnem dnevniku.
  • Našo konfiguracijo maline pi lahko naredimo veliko lažjo z uporabo plošče ESP8266, povezane z arduinom, in s popolno odstranitvijo pi. Oglejte si uvod v modul ESP8266.
  • Morda bomo želeli dodati opozorila za določene dogodke. Na srečo Grafana ponuja način za to.

Pustil bom še nekaj branja, ki bo pritegnilo vašo domišljijo v svet IOT. Veselim se, da se vidimo v naslednjih navodilih!

Nadaljnji odčitki:

Priporočena: