Përmbajtje:

Ndiqni cilësinë e ajrit duke përdorur Grafana dhe Raspberry Pi: 7 hapa
Ndiqni cilësinë e ajrit duke përdorur Grafana dhe Raspberry Pi: 7 hapa

Video: Ndiqni cilësinë e ajrit duke përdorur Grafana dhe Raspberry Pi: 7 hapa

Video: Ndiqni cilësinë e ajrit duke përdorur Grafana dhe Raspberry Pi: 7 hapa
Video: Первый шаг Ишимоку Кинко Хио Индикатор в Forex Metatrader 4 (4) 2024, Korrik
Anonim
Ndiqni cilësinë e ajrit duke përdorur Grafana dhe Raspberry Pi
Ndiqni cilësinë e ajrit duke përdorur Grafana dhe Raspberry Pi

Unë isha duke kërkuar për një projekt të vogël të vogël IOT dhe një mik rekomandoi që të shikoja këtë tutorial:

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

Unë rekomandoj shumë të ndiqni mësimin për të vazhduar në ngritjen e një Raspberry Pi për monitorim. Ky tutorial do të përfundojë hapa të mëtejshëm në hartimin e një pajisjeje të thjeshtë IoT që lejon një tolerancë të lartë gabimi, si dhe sa i dobishëm mund të jetë një Raspberry Pi kur lidhet me Arduino.

Unë gjithashtu hyj në efektivitetin dhe disi kufizimin e modeleve MQ* të sensorëve të ajrit. Sensorët MQ* janë të lirë dhe mjaft efektivë, dhe janë super të lehtë për tu vendosur.

Në përgjithësi, kjo do t'ju ndihmojë të filloni lidhjen e një Arduino me internetin në mënyrën më të thjeshtë të mundshme, dhe përcakton rrugën për përdorimin e moduleve më të lehta të gjurmëve (ri: ESP8266).

Argëtohu!

Hapi 1: Pajisjet + Konfigurimi

Pajisjet

  • Raspberry Pi me Raspbian të instaluar
  • Furnizimi me energji i Raspberry Pi
  • Arduino Uno/Ekuivalent
  • USB nga burri në mashkull i tipit B në tipin A (duhet të vijë me Arduino -n tuaj)
  • Ndonjë nga sensorët MQ* (kam përdorur MQ-2, 4, 5 dhe 135)
  • Tela të ndryshëm kërcyes
  • mini bordi i bukës

Ngritur

Ky tutorial është menduar si një hyrje e butë për të përdorur Arduino dhe Raspberry Pi - do të ndihmojë të dini se si të përdorni terminalin linux. Sidoqoftë, nuk marr shumë përvojë me punën në Arduino ose Raspberry Pi - gjithçka që ju nevojitet vërtet është pajisjet e ofruara dhe një qëndrim kurioz.

  • Ju do të duhet të plotësoni hapat në këtë tutorial.
  • Unë ju rekomandoj të përdorni Secure Shell (SSH) për t'u ndërlidhur me Raspberry Pi, pasi kjo ju lejon të futni komanda me lehtësi. Lidhja përmes SSH ndryshon nëse jeni duke përdorur Windows, Linux ose Mac. Linux dhe Mac janë goxha të lehtë për t’u përdorur në lidhje me ssh (komanda për të hapur SSH është fjalë për fjalë ssh). Shikoni Putty for Windows. Unë ju rekomandoj të shikoni ekranin si një mënyrë për të mbajtur seancën tuaj gjatë projektit.
  • Ju gjithashtu do të duhet të instaloni Python në Raspbian. Kur përfundova këto hapa, bëra një kopje të një karte të vjetër SD që kisha të shtrirë nga një projekt i mëparshëm, i cili tashmë kishte instaluar Python. Nëse shpërndarja juaj e NOOBS/Raspbian nuk ka Python 3.7 ose më lart, shikoni këto hapa për të përpiluar Python nga burimi.
  • Njihuni me git dhe instalojeni në rast se nuk është instaluar tashmë në shpërndarjen tuaj të Raspbian.

Hapi 2: Vendosja e qarkut

Vendosja e qarkut
Vendosja e qarkut

Ekziston një qark që do t'ju duhet të vendosni në Arduino.

Unë kam dhënë një skemë që mund ta përdorni si referencë.

Bukuria e të gjithë sensorëve të gazit MQ-* është se sapo të bëhet një lidhje 5 Volt dhe Ground, rezistenca hyrëse e kunjave analoge të Arduino lejon që sensori të funksionojë si duhet.

Kini kujdes që të siguroheni që lidhja Analog nga bordi i ndarjes në sensor është e lidhur me Arduino dhe jo lidhjen dixhitale. Nëse jeni duke u përballur me një gamë shumë të ngushtë vlerash kur testoni, ju rekomandoj që së pari të kontrolloni lidhjen tuaj këtu.

Hapi 3: Kodi Arduino dhe Ndezja

Në hapin pas këtij, ne do të lidhim bordin Arduino me Raspberry Pi. Para se ta bëjmë këtë, ne duhet të ndezim Arduino me kod për të lexuar sensorin, si dhe të transmetojmë të dhënat e sensorit në Raspberry Pi. Kjo mund të bëhet në çfarëdo mënyre që normalisht e shtyni kodin në Arduino. Kam përdorur një mjet të palëve të treta përveç Arduino IDE - prandaj, përfshij bibliotekën Arduino në krye. Kjo nuk është e nevojshme për projekte të tjera.

Kontrolloni kodin për të kopjuar/ngjitur në fund të këtij seksioni.

Çfarë bën kodi

Kodi është krijuar për të marrë të dhëna nga katër sensorë të ndryshëm - nëse përdorni lloje të ndryshme të sensorëve, do të jetë e arsyeshme të ndryshoni emrat në sinjalin dalës të dërguar nga porti Serial.

Në lak ne kontrollojmë nëse Raspberry Pi kërkon të dhëna nga ne. Prandaj, ne po përdorim një konfigurim shumë të thjeshtë Master/Slave ku Raspberry Pi do t'i bëjë vazhdimisht kërkesa Arduino për të dhëna. Kjo është shumë më e thjeshtë sesa të kesh një numërues në kodin Arduino sepse është më e lehtë të testosh se cilat vlera funksionojnë nga Raspberry Pi, në vend që të duash të ndezësh vlera të reja në Arduino.

Arduino, pasi të ketë marrë një kërkesë për të dhëna, do të formatojë daljen si një parametër GET - kjo lidhet me metodat HTTP dhe është thjesht një zgjedhje e projektimit. Nëse do të hartonit një skemë komunikimi nga Arduino përmes Portit Serial, ju lehtë mund të shkoni për ndonjë gjë tjetër, për sa kohë që e dizajnoni atë në mënyrë që të dhënat të ndahen në mënyrë të arsyeshme. Zgjodha GET sepse është e njohur dhe e fuqishme.

Testim i thjeshtë…

Pasi të keni ndezur Arduino dhe kodin të funksionojë, hapni Monitoruesin Serial të Arduino IDE. Nëse dërgoni karakterin e vetëm "H" (siguroni kapitalin e tij!) Ju do të merrni ngarkesën e të dhënave. Urime, funksionon!

Një mostër, koleksionist asinkron i të dhënave MQ-*

#përfshi
int mq2 = A2;
int mq4 = A3;
int mq5 = A4;
int mq135 = A5;
int hyrëseByte;
voidsetup () {
pinMode (mq2, INPUT);
pinMode (mq4, INPUT);
pinMode (mq5, INPUT);
pinMode (mq135, INPUT);
Serial.filloj (9600);
}
/* valuePrint printon vlerën për këtë etiketë.
* Krijon vetëm efekte anësore.
*/
voidvaluePrint (Etiketa e vargut, leximi int) {
Serial.print (etiketë);
Serial.print ("=");
Serial.print (leximi);
}
voidloop () {
// shikoni nëse ka të dhëna serike në hyrje:
nëse (Seriali i disponueshëm ()> 0) {
// lexoni bajtin më të vjetër në tampon serik:
// "Kur telefononi Serial.read, një bajt hiqet nga tamponi i marrjes dhe kthehet në kodin tuaj"
incomingByte = Serial.read ();
// nëse është një shkronjë H (ASCII 72), lexoni vlerat dhe dërgojini tek hosti i mjedrës.
// TODO: sigurohuni që mesazhi të jetë gjithmonë me të njëjtën gjatësi, çdo herë
nëse (hyrjaByte == 72) {
int mq2Leximi = analogRead (mq2);
int mq4Reading = analogRead (mq4);
int mq5Leximi = analogRead (mq5);
int mq135Leximi = analogRead (mq135);
Serial.print ("?");
vlerëPrint ("mq2", mq2Leximi);
Serial.print ("&");
valuePrint ("mq4", mq4Leximi);
Serial.print ("&");
vlerëPrint ("mq5", mq5Leximi);
Serial.print ("&");
vlerëPrint ("mq135", mq135Leximi);
Serial.print ("\ n");
}
}
// lexoni serialin vetëm çdo sekondë
vonesa (1000);
}

shikoni rawmain.cpp të pritur me ❤ nga GitHub

Hapi 4: Kodi Raspberry Pi

Tani që keni konfiguruar Raspberry Pi sipas https://dzone.com/articles/raspberry-pi-iot-sensor…, tani mund të ekzekutoni kodin Raspberry Client që do të dërgojë të dhëna përmes MQTT në bazën tonë të të dhënave, i cili gjithashtu lidhet me Grafanën.

  1. Sigurohuni që mjedra juaj është e lidhur me internetin dhe më pas kryeni një komandë git clone për të kopjuar të gjithë kodin në Raspberry Pi. Komanda juaj do të duket pak si:

    git klon

  2. Brenda terminalit të mjedrës Pi, kryeni një komandë të ndryshimit të drejtorisë (cd) në "raspberry_client":

    cd raspberry_client.

  3. Ju do të duhet të përdorni një mjedis virtual*. E thjeshte Vraponi

    python3 -m venv envMe Kjo do të krijojë një mjedis virtual të quajtur "env" të cilin do ta përdorim për të instaluar varësitë.

  4. Tani, ne duhet të hyjmë në mjedisin tonë virtual. Drejtuar:

    burimi env/bin/aktivizoMe Tani jeni gati për të instaluar varësitë e projektit.

  5. Në paketën që sapo keni klonuar ka një skedar të quajtur kërkesat.txt. Hapni këtë skedar; do të shihni që ne kërkojmë paketat paho-mqtt dhe pyserial, si dhe versionet e tyre përkatëse. Ju mund të shihni përmbajtjen e skedarit duke ekzekutuar

    kërkesat e maceve.txtMe Për të instaluar këto pako, ru

    pip instalo -r kërkesat.txt.

  6. Kjo përfundon konfigurimin.

Fjalë për fjalë çdo tutorial që përdor python bën një përmendje të Virtual env, dhe madje edhe për këtë projekt të vogël, unë do të bëj një përmendje. Mjediset virtuale ju lejojnë të ndani versionet e varësive, si dhe të ndani rrjedhën tuaj të punës në python - ashtë një mënyrë e mirë për të rregulluar hapësirat tuaja të punës Python. Nëse kjo është hera e parë që përdorni mjedise virtuale, lexoni shkurtimisht mbi to këtu.

Çfarë bën kodi…

Skedari client.py do të importojë një grup të thjeshtë bibliotekash duke përfshirë arduinosensorin tonë. Në funksionin kryesor, ne do të marrim vlerat nga Arduino, do t'i publikojmë të dhënat tek ndërmjetësi MQTT dhe më pas do të flemë për 10 sekonda.

Skedari arduinosensor.py është një grup metodash ndihmëse që mbështillen rreth bibliotekës paho.mqtt, si dhe ofrojnë disa skema komunikimi të dobishme për komunikimin me ngarkesën e Arduino -s (shiko: parse_payload). Sigurisht, kodi është bashkangjitur në fund të këtij seksioni.

Një klient i thjeshtë që komunikon me një artikull arduino përmes monitorit Serial. Prisni që të gjeni kodin këtu kur të bëhet publik:

ngaimportlibimportimporti_modul
importues
koha e importit
importarduinosensor
defmain ():
# hapur klient të përcaktuar
koha e fillimit = koha. koha ()
ndërsa e vërtetë:
leximi = arduinosensor.get_values (os.environ.get ('PORT', "/dev/ttyUSB0"))
arduinosensor.pub ("python_client", payload = leximi)
koha. gjumi (10.0- ((koha. koha () -fillimi_koha) %10.0))
if_name _ == "_ kryesore_":
kryesore ()

shikoni rawclient.py e pritur me ❤ nga GitHub

Hapi 5: Vendosja e të gjitha së bashku

Ne kemi të vendosur kodin Raspberry Python dhe kemi të vendosur kodin e klientit Arduino. Le të kalojmë në lidhjen e të dy entiteteve së bashku.

Së pari, le të lidhim Arduino dhe të vendosim konfigurimin e duhur:

  1. Në terminalin tuaj Raspberry Pi, drejtohuni

    python -m serial.tools.list_portetMe Kjo do të listojë të gjitha portat USB që mbështesin komunikimin serik.

  2. Tani, lidhni Arduino -n tuaj dhe prisni rreth 2 sekonda që Raspberry ta njohë atë. Duke shkruar

    python -m serial.tools.list_portet edhe një herë do t'ju tregojë përsëri portet. Ju mund të shihni një listë shtesë që shfaqet - nëse është vërtet kështu, atëherë kjo hyrje e re është hyrja në të cilën është lidhur Arduino juaj. Kjo ka të ngjarë të jetë "/dev/ttyUSB0".

  3. Provoni të ekzekutoni kodin python brenda mjedisit tuaj virtual duke drejtuar python3.7 client.py. Prisni disa sekonda (më së shumti dhjetë) - nëse përballeni me një përjashtim, kjo do të thotë që ne do të duhet të ndryshojmë vlerën për portin tonë të komit në mjedër pi. Nëse shihni që kodi printon një rresht duke filluar me "Dërguar ngarkesën e mëposhtme: …" Atëherë, do të jeni mirë të vazhdoni në hapin përfundimtar me Grafana. Këshillë: sigurohuni që të vraponi

    ekran -S pitoni para se të filloni klientin python, përndryshe, kur të përfundoni lidhjen tuaj me pi mjedrën tuaj, do të humbni programin tuaj python. Teknikisht, nuk keni nevojë të përdorni në mënyrë rigoroze "python" si parametrin e fundit, por më pëlqen t'i quaj seancat e ekranit tim në përputhje me rrethanat.

    1. Për të ndryshuar vlerën për portën COM, do të duhet të vendosni një ndryshore të mjedisit para se të ekzekutoni kodin. Ju do të duhet ta provoni këtë për çdo vlerë të mundshme të prodhimit që keni marrë kur përdorni python -m serial.tools.list_ports. Për shembull, nëse sasia e shënimeve që kam marrë ishin dy dhe ishin këto:

      • /dev/ttyUSB6
      • /dev/acm0

atëherë komandat që do të ekzekutoja do të ishin:

PORT = "/dev/ttyUSB6" klienti python3.7.py, dhe nëse kjo nuk do të funksiononte, unë do të ru ruaja më pas

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

Pasi të keni përfunduar këto hapa, kodi do t'i kushtojë të dhëna shembullit tonë të bazës së të dhënave fluxdb i cili, kur lidhet me Grafana, do të na lejojë të shikojmë pultin tonë.

Hapi 6: Konfigurimi i Grafana dhe Shikimi i Panelit

Konfigurimi i Grafana dhe Shikimi i Panelit
Konfigurimi i Grafana dhe Shikimi i Panelit

Mirë, tani jemi në fazën përfundimtare! Tani do të përdorim Grafana për të krijuar një pult të thjeshtë.

  1. Lidhuni me shembullin tuaj Grafana. Meqenëse keni ndjekur hapat nga artikulli origjinal i dzone, duhet të jeni në gjendje të regjistroheni me përdoruesin tuaj të administratorit. Shkoni përpara dhe identifikohuni.
  2. Në panelin e majtë, rri pezull mbi ikonën "pultet" - katër sheshet. Klikoni në "Menaxhoni".
  3. Në faqen e re, klikoni në "Paneli i Ri". Më tej, klikoni "Shto panel të ri".
  4. Kjo hap redaktorin Grafana. Ne do të krijojmë një pamje të thjeshtë që tregon një metrikë të vetme.

    1. Në panelin e djathtë, ndryshoni titullin e panelit në diçka domethënëse, siç është "Leximet e Kuzhinës". Ju gjithashtu mund të futni një përshkrim opsional.
    2. Në pjesën e poshtme të majtë, "Query", ne do të shtojmë një seri të vetme kohore. Grafana me të vërtetë shkëlqen këtu pasi ne lehtë mund të krijojmë deklarata SQL me një ndërfaqe të bazuar në klikim. Nën "default", zgjidhni InfluxDB.
    3. Tani, për të lexuar "A" - në klauzolën FROM, zgjidhni matjen "airtestt". Nëse shikoni kodin python origjinal në funksionin get_values të arduinosensor.py, do të shihni që ne e përcaktojmë këtë tabelë airtestt brenda kodit.
    4. Për një mostër, le të shkojmë te klauzola "SELECT" dhe të zgjedhim fushën (mq4). Fillimisht pulti ynë do të na japë zgjedhjen "mean ()" - klikoni mbi këtë zgjedhje dhe zgjidhni "Remove". pastaj, klikoni në shenjën plus dhe, nën "Grumbullimet" zgjidhni "dallueshme ()". Kjo do të tregojë momente specifike kohore. Ne mund të zgjedhim masa të tjera, por tani për tani, paneli ynë do të tregojë lexime të dallueshme nga mq4.
    5. Klikoni Ruaj në të djathtën e sipërme dhe mbaroni!

Në rast se hasni telashe, mund t'i verifikoni cilësimet tuaja me ato në pamjen e bashkangjitur të ekranit.

Hapi 7: Përfundoni

Përfundoni
Përfundoni

Në këtë tutorial ju keni qenë në gjendje të krijoni një rrjet të fuqishëm MQTT të përbërë nga një nyje dhe ndërmjetës i vetëm. Ju gjithashtu ishit në gjendje të vizualizoni të dhënat tuaja IOT duke përdorur Grafana. Së fundmi, ju keni qenë në gjendje të kompozoni këtë arkitekturë të thjeshtë të sistemit nga (me shpresë) komoditeti i shfletuesit dhe kompjuterit tuaj duke përdorur një lidhje SSH.

Ka disa gjëra në të cilat mund të duam të përmirësohemi.

  • Leximet e sensorëve në grafikun tonë nuk janë në fakt lexime të sakta të sensorit - ato janë tensioni i daljes nga sensori ynë. Ato duhet të kalibrohen, konsultohuni me këtë postim në blog për më shumë detaje.
  • Konfigurimi ynë i mjedrës pi mund të bëhet shumë më i lehtë duke përdorur një tabelë ESP8266 të lidhur me arduino dhe duke hequr plotësisht pi. Shikoni një hyrje në modulin ESP8266.
  • Ne mund të duam të shtojmë paralajmërime për ngjarje të veçanta. Fatmirësisht, Grafana ofron një mënyrë për ta bërë këtë.

Unë do të lë disa lexim të mëtejshëm për të tërhequr imagjinatën tuaj me botën e IOT. Mezi pres t'ju shoh në mësimet e tjera udhëzuese!

Lexime të mëtejshme:

Recommended: