Kazalo:
- 1. korak: Oprema + nastavitev
- 2. korak: Nastavitev vezja
- 3. korak: Arduino koda in utripanje
- 4. korak: Koda Raspberry Pi
- 5. korak: Združite vse skupaj
- Korak 6: Konfiguracija Grafana in ogled nadzorne plošče
- 7. korak: Zaključite
Video: Sledite kakovosti zraka z uporabo Grafane in Raspberry Pi: 7 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:03
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
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.
-
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
-
V terminalu maline Pi izvedite ukaz za spremembo imenika (cd) v "raspberry_client":
cd raspberry_client.
-
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.
-
Zdaj moramo vstopiti v svoje virtualno okolje. Zaženi:
vir env/bin/aktiviraj. Zdaj ste pripravljeni namestiti odvisnosti projekta.
-
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.
- 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:
-
Na terminalu Raspberry Pi zaženite
python -m serial.tools.list_ports. Tu bodo prikazana vsa vrata USB, ki podpirajo serijsko komunikacijo.
-
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".
-
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.
-
Č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
V redu, zdaj smo v zadnjem delu! Zdaj bomo z Grafano ustvarili preprosto nadzorno ploščo.
- 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.
- Na levem podoknu se pomaknite nad ikono »nadzorne plošče« - štiri kvadrate. Kliknite na "Upravljanje".
- Na novi strani kliknite "Nova nadzorna plošča". Nato kliknite »Dodaj novo ploščo«.
-
S tem se odpre urejevalnik Grafana. Ustvarili bomo preprost pogled, ki prikazuje eno samo meritev.
- V desnem podoknu spremenite naslov plošče v nekaj smiselnega, na primer »Branje v kuhinji«. Vnesete lahko tudi izbirni opis.
- 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.
- 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.
- 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.
- 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
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:
Merilnik kakovosti zraka v zaprtih prostorih: 5 korakov (s slikami)
Merilnik kakovosti zraka v zaprtih prostorih: Enostaven projekt za preverjanje kakovosti zraka v vaši hiši. Ker v zadnjem času veliko ostajamo/delamo od doma, je morda dobro, da spremljate kakovost zraka in se spomnite, kdaj je čas, da odprete okno in vdihnite svež zrak
AEROBOT senzor kakovosti zraka V1.0: 6 korakov (s slikami)
AEROBOT senzor kakovosti zraka V1.0: Ta navodila govorijo o izdelavi poceni in zelo natančnega senzorja kakovosti zraka po imenu AEROBOT. Ta projekt prikazuje temperaturo, relativno vlažnost, gostoto prahu PM 2,5 in opozarja na kakovost zraka v okolici. Uporablja senzor DHT11
Senzor kakovosti zraka z uporabo Arduina: 4 koraki
Senzor kakovosti zraka z uporabo Arduina: V tem prispevku se bomo naučili, kako sestaviti preprost, a uporaben senzor kakovosti zraka. Senzor SGP30 bomo uporabljali skupaj s Piksey Pico, čeprav bo skica delovala s skoraj vsako ploščo, združljivo z Arduinom. Zgornji videoposnetek govori o
Zgradite hišni senzor kakovosti zraka IoT brez oblaka: 10 korakov
Zgradite hišni senzor kakovosti zraka IoT No Cloud Required: Kakovost notranjega ali zunanjega zraka je odvisna od številnih virov onesnaženja in tudi od vremena. Ta naprava zajema nekatere običajne in nekatere najbolj zanimive parametre z uporabo 2 senzorskih čipov. Temperatura vlaga tlak organski plin mikro
Sensly Hat za detektor kakovosti zraka in plina Raspberry Pi V0.9: 8 korakov
Sensly klobuk za detektor kakovosti zraka in plina Raspberry Pi V0.9: Sensly je prenosni senzor onesnaževanja, ki lahko s pomočjo vgrajenih senzorjev za plin zbira podatke o različnih prisotnih plinih. Te podatke lahko v realnem času posredujete neposredno na vaš pametni telefon