Satura rādītājs:

Izsekojiet gaisa kvalitāti, izmantojot Grafana un Raspberry Pi: 7 soļi
Izsekojiet gaisa kvalitāti, izmantojot Grafana un Raspberry Pi: 7 soļi

Video: Izsekojiet gaisa kvalitāti, izmantojot Grafana un Raspberry Pi: 7 soļi

Video: Izsekojiet gaisa kvalitāti, izmantojot Grafana un Raspberry Pi: 7 soļi
Video: Kā uzlabot gaisa kvalitāti Rīgā? 2024, Decembris
Anonim
Izsekojiet gaisa kvalitāti, izmantojot Grafana un Raspberry Pi
Izsekojiet gaisa kvalitāti, izmantojot Grafana un Raspberry Pi

Es meklēju nelielu mazu IOT projektu, un draugs ieteica pārbaudīt šo apmācību:

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

Es ļoti iesaku sekot apmācībai, lai turpinātu iestatīt Raspberry Pi uzraudzībai. Šī apmācība pabeigs turpmākus vienkāršas IoT ierīces projektēšanas soļus, kas nodrošina augstu kļūdu toleranci, kā arī to, cik noderīga var būt Raspberry Pi, ja tā ir savienota pārī ar Arduino.

Es arī iedziļinos gaisa sensoru MQ* modeļu efektivitātē un nedaudz ierobežojumos. MQ* sensori ir lēti un diezgan efektīvi, un tos ir ļoti viegli uzstādīt.

Kopumā tas palīdzēs jums sākt darbu, savienojot Arduino ar internetu pēc iespējas vienkāršākā veidā, un nosaka veidu, kā izmantot vieglākus nospiedumu moduļus (re: ESP8266).

Izklaidējieties!

1. darbība: aprīkojums + iestatīšana

Aprīkojums

  • Raspberry Pi ar instalētu Raspbian
  • Raspberry Pi barošanas avots
  • Arduino Uno/ekvivalents
  • No B tipa līdz A tipa vīriešu un vīriešu USB (jāiegādājas kopā ar Arduino)
  • Jebkurš no MQ* sensoriem (es izmantoju MQ-2, 4, 5 un 135)
  • Dažādi džemperu vadi
  • mini maizes dēlis

Uzstādīt

Šī apmācība ir domāta kā maigs ievads Arduino un Raspberry Pi lietošanai - tas palīdzēs uzzināt, kā izmantot linux termināli. Tomēr es neuzņemos lielu pieredzi darbā ar Arduino vai Raspberry Pi - viss, kas jums patiešām nepieciešams, ir aprīkojums un ziņkārīga attieksme.

  • Jums būs jāveic šīs apmācības darbības.
  • Es iesaku saskarnei ar Raspberry Pi izmantot Secure Shell (SSH), jo tas ļauj ērti ievadīt komandas. Savienojuma izveide, izmantojot SSH, atšķiras atkarībā no tā, vai izmantojat Windows, Linux vai Mac. Linux un Mac ir diezgan viegli izmantot attiecībā uz ssh (komanda atvērt SSH burtiski ir ssh). Pārbaudiet Putty for Windows. Es iesaku jums apskatīt ekrānu, lai saglabātu savu sesiju projekta laikā.
  • Jums būs jāinstalē arī Python uz Raspbian. Kad es pabeidzu šīs darbības, es izveidoju kopiju no vecas SD kartes, kas man bija gulējusi no iepriekšējā projekta, kurā jau bija instalēts Python. Ja jūsu NOOBS/Raspbian izplatīšanai nav Python 3.7 vai jaunākas versijas, pārbaudiet šīs darbības, lai apkopotu Python no avota.
  • Iepazīstieties ar git un instalējiet to, ja tas vēl nav instalēts jūsu Raspbian izplatīšanā.

2. darbība: shēmas iestatīšana

Ķēdes iestatīšana
Ķēdes iestatīšana

Ir viena shēma, kas jums būs jāiestata Arduino.

Es sniedzu shēmu, kuru varat izmantot kā atsauci.

Visu MQ-* gāzes sensoru skaistums ir tāds, ka, tiklīdz ir izveidots 5 voltu un zemes savienojums, Arduino analogo tapu ievades pretestība ļauj sensoram darboties pareizi.

Esiet uzmanīgi, lai nodrošinātu, ka analogais savienojums no sensora sadalīšanas paneļa ir pievienots Arduino, nevis digitālais savienojums. Ja testēšanas laikā jūs saskaraties ar ļoti šauru vērtību diapazonu, iesaku vispirms pārbaudīt savienojumu šeit.

3. darbība: Arduino kods un mirgošana

Nākamajā solī mēs savienosim Arduino dēli ar Raspberry Pi. Pirms mēs to darām, mums ir jāapgaismo Arduino ar kodu, lai nolasītu sensoru, kā arī jānosūta sensora dati uz Raspberry Pi. To var izdarīt jebkurā veidā, kā parasti nosūta kodu Arduino. Es izmantoju trešās puses rīku, izņemot Arduino IDE, tāpēc augšpusē es iekļauju Arduino bibliotēku. Citiem projektiem tas nav nepieciešams.

Šīs sadaļas beigās pārbaudiet kopējamo/ielīmējamo kodu.

Ko dara kods

Kods ir iestatīts, lai iegūtu datus no četriem dažādiem sensoriem - ja izmantojat dažāda veida sensorus, būs saprātīgi mainīt nosaukumus izejas signālam, kas nosūtīts no seriālā porta.

Cikla laikā mēs pārbaudām, vai Raspberry Pi pieprasa no mums datus. Tāpēc mēs izmantojam ļoti vienkāršu galvenā/palīgkonfigurāciju, kurā Raspberry Pi nepārtraukti pieprasīs Arduino datus. Tas ir daudz vienkāršāk nekā skaitītāja ievietošana Arduino kodā, jo ir vieglāk pārbaudīt, kādas vērtības darbojas no Raspberry Pi, nevis jāzibina jaunas vērtības Arduino.

Arduino, saņēmis datu pieprasījumu, formatēs izvadi kā GET parametru - tas ir saistīts ar HTTP metodēm un ir vienkārši dizaina izvēle. Ja jūs izstrādātu komunikācijas shēmu no Arduino, izmantojot seriālo portu, jūs varētu viegli izmantot jebko citu, ja vien to veidojat, lai dati būtu saprātīgi nodalīti. Es izvēlējos GET, jo tas ir pazīstams un izturīgs.

Vienkārša pārbaude…

Kad esat mirgojis Arduino un darbojas kods, atveriet Arduino IDE sērijas monitoru. Ja nosūtīsit vienu rakstzīmi "H" (nodrošiniet tā lielo kapitālu!), Jūs iegūsit datu lietderīgo slodzi. Apsveicam, tas darbojas!

Paraugs, asinhronais MQ-* datu savācējs

#iekļaut
int mq2 = A2;
int mq4 = A3;
int mq5 = A4;
int mq135 = A5;
int ienākošais baits;
voidsetup () {
pinMode (mq2, INPUT);
pinMode (mq4, INPUT);
pinMode (mq5, INPUT);
pinMode (mq135, INPUT);
Sērijas sākums (9600);
}
/* valuePrint izdrukā šīs etiķetes vērtību.
* Izveido tikai blakusparādības.
*/
voidvaluePrint (virknes iezīme, lasot) {
Serial.print (etiķete);
Sērijas.druka ("=");
Serial.print (lasīšana);
}
voidloop () {
// pārbaudiet, vai ir ienākošie sērijas dati:
ja (Serial.available ()> 0) {
// lasīt vecāko baitu sērijas buferī:
// "Zvanot Serial.read, baits tiek noņemts no saņemšanas bufera un tiek atgriezts jūsu kodā"
ienākošais baits = Serial.read ();
// ja tas ir lielais H (ASCII 72), izlasiet vērtības un nosūtiet tās aveņu saimniekdatoram.
// TODO: pārliecinieties, ka ziņojums vienmēr ir vienāda garuma
ja (ienākošais baits == 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", mq5Lasīšana);
Serial.print ("&");
valuePrint ("mq135", mq135Lasīšana);
Serial.print ("\ n");
}
}
// sēriju lasīt tikai katru sekundi
kavēšanās (1000);
}

skatiet rawmain.cpp, kuru mitina GitHub ar ❤

4. solis: Raspberry Pi kods

Tagad, kad esat konfigurējis Raspberry Pi atbilstoši vietnei https://dzone.com/articles/raspberry-pi-iot-sensor…, tagad varat palaist Raspberry klienta kodu, kas nosūtīs datus, izmantojot MQTT, uz mūsu datu bāzi. savienojas ar Grafanu.

  1. Pārliecinieties, vai jūsu avenes ir savienotas ar internetu, un pēc tam izpildiet komandu git clone, lai kopētu visu kodu uz Raspberry Pi. Jūsu komanda izskatīsies nedaudz šādi:

    git klons

  2. Raspberry Pi terminālī izpildiet komandu direktorija maiņa (cd) uz "raspberry_client":

    cd aveņu_klients.

  3. Jums būs jāizmanto virtuālā vide*. Vienkārši. Skrien

    python3 -m venv env. Tādējādi tiks izveidota virtuālā vide ar nosaukumu "env", kuru mēs izmantosim atkarību instalēšanai.

  4. Tagad mums ir jāiekļūst mūsu virtuālajā vidē. Palaist:

    avots env/bin/aktivizēt. Tagad esat gatavs instalēt projekta atkarības.

  5. Paketē, kuru tikko klonējāt, ir fails ar nosaukumu Request.txt. Atveriet šo failu; jūs redzēsit, ka mums ir vajadzīgas paho-mqtt un pyserial paketes, kā arī to attiecīgās versijas. Jūs varat apskatīt faila saturu, palaižot

    kaķa prasības.txt. Lai instalētu šīs paketes, ru

    pip instalēt -r prasības.txt.

  6. Tādējādi tiek pabeigta konfigurācija.

Burtiski katra apmācība, kurā tiek izmantots python, piemin Virtual env, un pat par šo mazo projektu es minēšu. Virtuālā vide ļauj atdalīt atkarību versijas, kā arī atdalīt python darbplūsmu - tas ir jauks veids, kā sakārtot savas Python darbvietas. Ja šī ir pirmā reize, kad izmantojat virtuālo vidi, īsi izlasiet to šeit.

Ko dara kods…

Fails client.py importēs vienkāršu bibliotēku komplektu, ieskaitot mūsu pašu arduinosensora. Galvenajā funkcijā mēs iegūsim vērtības no Arduino, publicēsim datus MQTT brokerim un pēc tam gulēsim 10 sekundes.

Fails arduinosensor.py ir palīgu metožu kopums, kas aptver paho.mqtt bibliotēku, kā arī sniedz noderīgu saziņas shēmu saziņai ar Arduino lietderīgo slodzi (sk. Parse_payload). Protams, kods ir pievienots šīs sadaļas beigās.

Vienkāršs klients, kas sazinās ar arduino vienumu, izmantojot seriālo monitoru. Gaidiet, ka kods tiks atrasts šeit, kad tas tiks publiskots:

fromimportlibimportimport_module
imports
importēšanas laiks
nozīmīgs sensors
defmain ():
# atvērts definēts klients
start_time = time.time ()
kamēr patiesība:
lasījums = arduinosensor.get_values (os.environ.get ('PORT', "/dev/ttyUSB0"))
arduinosensor.pub ("python_client", lietderīgā slodze = lasījums)
time.sleep (10.0- ((time.time () -start_time) %10.0))
ja _vārds _ == "_ galvenais_":
galvenais ()

apskatīt rawclient.py, ko mitina GitHub ar ❤

5. solis: salieciet to visu kopā

Mums ir iestatīts Raspberry Python kods, kā arī Arduino klienta kods. Pāriesim pie abu entītiju savienošanas kopā.

Vispirms savienosim Arduino un iestatīsim pareizo konfigurāciju:

  1. Palaidiet savu Raspberry Pi termināli

    python -m serial.tools.list_ports. Tas uzskaitīs visus USB portus, kas atbalsta seriālo komunikāciju.

  2. Tagad pievienojiet savu Arduino un pagaidiet apmēram 2 sekundes, līdz avene to atpazīst. Ierakstīšana

    python -m serial.tools.list_ports atkal parādīs ostas. Jūs varat redzēt papildu ierakstu - ja tas tā ir, tad šis jaunais ieraksts ir ieraksts, kurā ir pievienots jūsu Arduino. Tas, visticamāk, būs "/dev/ttyUSB0".

  3. Mēģiniet palaist python kodu savā virtuālajā vidē, palaižot python3.7 client.py. Pagaidiet dažas sekundes (ne vairāk kā desmit) - ja jūs saskaraties ar izņēmumu, tas nozīmē, ka mums būs jāmaina mūsu aveņu pi porta vērtība. Ja redzat, ka kods izdrukā rindiņu, kas sākas ar “Nosūtīta pēc lietderīgās slodzes:…”. Padoms: noteikti palaidiet

    ekrāns -S python pirms python klienta palaišanas, pretējā gadījumā, pārtraucot savienojumu ar savu aveņu pi, jūs zaudēsit savu darbināmo python programmu. Tehniski jums nav nepieciešams stingri izmantot "python" kā pēdējo parametru, bet man patīk atbilstoši nosaukt savas ekrāna sesijas.

    1. Lai mainītu COM porta vērtību, pirms koda palaišanas jums būs jāiestata vides mainīgais. Jums tas būs jāizmēģina katrai iespējamai izvades vērtībai, kas iegūta, palaižot python -m serial.tools.list_ports. Piemēram, ja iegūto ierakstu skaits bija divi un bija šādi:

      • /dev/ttyUSB6
      • /dev/acm0

tad komandas, kuras es izpildītu, būtu šādas:

PORT = "/dev/ttyUSB6" python3.7 client.py, un, ja tas nedarbotos, es vēlāk ru

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

Kad būsit pabeidzis šīs darbības, kods nosūtīs datus mūsu pieplūdes datu bāzes gadījumam, kas, kad būs izveidots savienojums ar Grafana, ļaus mums apskatīt mūsu informācijas paneli.

6. darbība: Grafana konfigurācija un informācijas paneļa apskate

Grafana konfigurācija un informācijas paneļa apskate
Grafana konfigurācija un informācijas paneļa apskate

Labi, mēs esam pēdējā posmā! Tagad mēs izmantosim Grafana, lai izveidotu vienkāršu informācijas paneli.

  1. Izveidojiet savienojumu ar savu Grafana instanci. Tā kā jūs izpildījāt sākotnējā dzone raksta darbības, jums vajadzētu būt iespējai pieteikties ar savu administratora lietotāju. Iet uz priekšu un piesakieties.
  2. Kreisajā rūtī virziet kursoru virs informācijas paneļu ikonas - četriem kvadrātiem. Noklikšķiniet uz "Pārvaldīt".
  3. Jaunajā lapā noklikšķiniet uz "Jauns informācijas panelis". Tālāk noklikšķiniet uz "Pievienot jaunu paneli".
  4. Tas atver Grafana redaktoru. Mēs izveidosim vienkāršu skatu, kurā būs redzama viena metrika.

    1. Labajā rūtī mainiet paneļa nosaukumu uz kaut ko nozīmīgu, piemēram, "Virtuves lasījumi". Varat arī ievadīt izvēles aprakstu.
    2. Apakšējā kreisajā stūrī “Vaicājums” mēs pievienosim vienu laika rindu. Grafana šeit patiešām spīd, jo mēs varam viegli izveidot SQL paziņojumus ar saskarni balstītu saskarni. Sadaļā "noklusējums" izvēlieties InfluxDB.
    3. Tagad, lai lasītu "A" - FROM klauzulā izvēlieties mērījumu "airtestt". Ja aplūkojat sākotnējo pitona kodu arduinosensor.py funkcijā get_values, jūs redzēsit, ka mēs definējam šo airtestt tabulu kodā.
    4. Lai iegūtu paraugu, dodieties uz klauzulu "SELECT" un izvēlieties lauku (mq4). Sākotnēji mūsu informācijas panelis mums dos iespēju izvēlēties "mean ()" - noklikšķiniet uz šīs izvēles un izvēlieties "Noņemt". pēc tam noklikšķiniet uz pluszīmes un sadaļā “Apkopojumi” izvēlieties “atšķirīgs ()”. Tas parādīs konkrētus laika punktus. Mēs varam izvēlēties citus pasākumus, bet pagaidām mūsu panelī būs redzami atšķirīgi rādījumi no mq4.
    5. Augšējā labajā stūrī noklikšķiniet uz Saglabāt, un esat pabeidzis!

Ja rodas problēmas, varat pārbaudīt savus iestatījumus, izmantojot pievienotajā ekrānuzņēmumā.

7. solis: ietiniet

Satīt
Satīt

Šajā apmācībā jūs varējāt izveidot spēcīgu MQTT tīklu, kas sastāv no viena mezgla un brokera. Jūs arī varējāt vizualizēt savus IOT datus, izmantojot Grafana. Visbeidzot, jūs varat izveidot šo vienkāršo sistēmas arhitektūru no (cerams) pārlūkprogrammas un datora ērtībām, izmantojot SSH savienojumu.

Ir dažas lietas, kuras mēs varētu vēlēties uzlabot.

  • Sensora rādījumi mūsu grafikā patiesībā nav precīzi sensora rādījumi - tie ir mūsu sensora izejas spriegums. Tie ir jākalibrē, lai iegūtu sīkāku informāciju, skatiet šo emuāra ziņu.
  • Mūsu aveņu pi konfigurāciju var padarīt daudz vieglāku, izmantojot ESP8266 plati, kas pievienota arduino, un pilnībā noņemot pi. Iepazīstieties ar ESP8266 moduļa ievadu.
  • Iespējams, vēlēsimies pievienot brīdinājumus par konkrētiem notikumiem. Par laimi, Grafana piedāvā veidu, kā to izdarīt.

Es atstāšu vēl kādu lasāmvielu, lai vilinātu jūsu iztēli ar IOT pasauli. Es ar nepacietību gaidu jūs nākamajā pamācībā!

Papildu lasījumi:

Ieteicams: