Turinys:

Stebėkite oro kokybę naudodami „Grafana“ir „Raspberry Pi“: 7 žingsniai
Stebėkite oro kokybę naudodami „Grafana“ir „Raspberry Pi“: 7 žingsniai

Video: Stebėkite oro kokybę naudodami „Grafana“ir „Raspberry Pi“: 7 žingsniai

Video: Stebėkite oro kokybę naudodami „Grafana“ir „Raspberry Pi“: 7 žingsniai
Video: Karšto oro gruzdintuvė FRITO EASY FRY 2024, Liepa
Anonim
Stebėkite oro kokybę naudodami „Grafana“ir „Raspberry Pi“
Stebėkite oro kokybę naudodami „Grafana“ir „Raspberry Pi“

Aš ieškojau nedidelio mažo IOT projekto ir draugas rekomendavo patikrinti šią pamoką:

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

Aš labai rekomenduoju vadovautis pamoka ir toliau nustatyti „Raspberry Pi“stebėjimui. Ši pamoka užbaigs tolesnius paprasto daiktų interneto įrenginio, kuris leidžia toleranciją klaidoms, projektavimo veiksmus, taip pat parodys, koks naudingas gali būti „Raspberry Pi“, kai jis suporuotas su „Arduino“.

Taip pat nagrinėju oro jutiklių MQ* modelių efektyvumą ir šiek tiek apribojimus. MQ* jutikliai yra pigūs ir gana veiksmingi, juos labai lengva nustatyti.

Apskritai tai padės jums kuo paprasčiau prijungti „Arduino“prie interneto ir nustatyti lengvesnių pėdsakų modulių naudojimo būdą (žr. ESP8266).

Pasilinksmink!

1 žingsnis: įranga + sąranka

Įranga

  • Raspberry Pi su įdiegta Raspbian
  • Raspberry Pi maitinimo šaltinis
  • „Arduino Uno“/lygiavertis
  • Nuo B tipo iki A tipo USB nuo vyrų iki vyrų (turėtų būti su „Arduino“)
  • Bet kuris MQ* jutiklis (aš naudoju MQ-2, 4, 5 ir 135)
  • Įvairūs jungiamieji laidai
  • mini duonos lenta

Nustatyti

Ši pamoka skirta švelniam „Arduino“ir „Raspberry Pi“naudojimo įvadui - tai padės žinoti, kaip naudotis „Linux“terminalu. Tačiau aš neprisiimu didelės patirties dirbant su „Arduino“ar „Raspberry Pi“- viskas, ko jums tikrai reikia, yra tiekiama įranga ir smalsus požiūris.

  • Turėsite atlikti šios pamokos veiksmus.
  • Rekomenduoju naudoti „Secure Shell“(SSH) sąsajai su „Raspberry Pi“, nes tai leidžia lengvai įvesti komandas. Prisijungimas per SSH skiriasi, ar naudojate „Windows“, „Linux“ar „Mac“. „Linux“ir „Mac“yra gana paprasta naudoti ssh atžvilgiu (komanda atidaryti SSH pažodžiui yra ssh). Peržiūrėkite „Putty for Windows“. Rekomenduoju peržiūrėti ekraną kaip būdą išlaikyti sesiją projekto metu.
  • Taip pat turėsite įdiegti „Python“„Raspbian“. Kai baigiau šiuos veiksmus, padariau senos SD kortelės, kurią gulėjau iš ankstesnio projekto, kopiją, kurioje jau buvo įdiegtas „Python“. Jei jūsų NOOBS/Raspbian platinime nėra „Python 3.7“ar naujesnės versijos, atlikite šiuos veiksmus, kad surinktumėte „Python“iš šaltinio.
  • Susipažinkite su „git“ir įdiekite jį, jei jis dar neįdiegtas jūsų „Raspbian“platinime.

2 žingsnis: grandinės nustatymas

Grandinės nustatymas
Grandinės nustatymas

Yra viena grandinė, kurią turėsite nustatyti „Arduino“.

Pateikiau schemą, kurią galite naudoti kaip nuorodą.

Visų MQ-* dujų jutiklių grožis yra tas, kad kai bus prijungtas 5 voltų ir įžeminimo jungtis, „Arduino“analoginių kaiščių įėjimo varža leis jutikliui veikti tinkamai.

Būkite atsargūs ir įsitikinkite, kad analoginis ryšys iš jutiklio išjungimo plokštės yra prijungtas prie „Arduino“, o ne prie skaitmeninio. Jei bandydami susiduriate su labai siauru verčių diapazonu, rekomenduoju čia pirmiausia patikrinti savo ryšį.

3 žingsnis: „Arduino“kodas ir mirksėjimas

Atlikdami šį veiksmą, mes prijungsime „Arduino“plokštę prie „Raspberry Pi“. Prieš tai darydami, turime „Arduino“blykstę koduoti, kad nuskaitytume jutiklį, taip pat perduotume jutiklio duomenis į „Raspberry Pi“. Tai galima padaryti bet kokiu būdu, paprastai įkeliant kodą į „Arduino“. Aš naudoju trečiosios šalies įrankį, išskyrus „Arduino IDE“, todėl viršuje įtraukiu „Arduino“biblioteką. Kitiems projektams tai nėra būtina.

Patikrinkite kodą, kurį norite nukopijuoti/įklijuoti šio skyriaus pabaigoje.

Ką daro kodas

Kodas nustatytas gauti duomenis iš keturių skirtingų jutiklių - jei naudojate skirtingų tipų jutiklius, bus tikslinga pakeisti iš serijinio prievado siunčiamo išvesties signalo pavadinimus.

Mes patikriname, ar „Raspberry Pi“prašo iš mūsų duomenų. Taigi, mes naudojame labai paprastą „Master/Slave“konfigūraciją, kur „Raspberry Pi“nuolat teiks „Arduino“duomenų užklausas. Tai daug paprasčiau nei turėti „Arduino“kodo skaitiklį, nes lengviau patikrinti, kokios vertės veikia iš „Raspberry Pi“, o ne „Arduino“rodyti naujas vertes.

„Arduino“, gavęs duomenų užklausą, suformatuos išvestį kaip GET parametrą - tai susiję su HTTP metodais ir yra tiesiog dizaino pasirinkimas. Jei suprojektuotumėte ryšio schemą iš „Arduino“per nuoseklųjį prievadą, galite lengvai pasirinkti bet ką kitą, jei tik kuriate, kad duomenys būtų tinkamai atskirti. Pasirinkau GET, nes jis yra pažįstamas ir tvirtas.

Paprastas testavimas…

Kai „Arduino“mirksi ir veikia kodas, atidarykite „Arduino IDE“serijos monitorių. Jei atsiųsite vieną simbolį „H“(užtikrinkite jo kapitalą!), Gausite naudingą duomenų krūvį. Sveikinu, tai veikia!

Pavyzdinis, asinchroninis MQ-* duomenų rinkėjas

#įtraukti
int mq2 = A2;
int mq4 = A3;
int mq5 = A4;
int mq135 = A5;
int gaunamas baitas;
voidsetup () {
pinMode (mq2, INPUT);
pinMode (mq4, INPUT);
pinMode (mq5, INPUT);
pinMode (mq135, INPUT);
Serial.begin (9600);
}
/* valuePrint spausdina šios etiketės vertę.
* Sukuria tik šalutinį poveikį.
*/
voidvaluePrint (eilutės etiketė, int skaitymas) {
Serial.print (etiketė);
Serijinis atspaudas ("=");
Serial.print (skaitymas);
}
voidloop () {
// pažiūrėkite, ar yra gaunamų serijinių duomenų:
jei (Serial.available ()> 0) {
// skaityti seniausią baitą serijos buferyje:
// "Kai skambinate Serial.read, baitas pašalinamas iš priėmimo buferio ir grąžinamas į jūsų kodą"
gaunamas baitas = Serial.read ();
// jei tai didžioji raidė H (ASCII 72), perskaitykite reikšmes ir nusiųskite jas aviečių prieglobai.
// TODO: įsitikinkite, kad pranešimas visada yra vienodo ilgio
jei (gaunamas baitas == 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", mq135Skaitymas);
Serial.print ("\ n");
}
}
// serialą skaityti tik kas sekundę
vėlavimas (1000);
}

peržiūrėkite „rawmain.cpp“, kurį su „❤“priglobia „GitHub“

4 žingsnis: „Raspberry Pi Code“

Dabar, kai sukonfigūravote „Raspberry Pi“pagal https://dzone.com/articles/raspberry-pi-iot-sensor…, dabar galite paleisti „Raspberry Client“kodą, kuris siunčia duomenis per MQTT į mūsų duomenų bazę. jungiasi prie Grafanos.

  1. Įsitikinkite, kad jūsų avietė yra prijungta prie interneto, tada atlikite komandą „git clone“, kad nukopijuotumėte visą kodą į „Raspberry Pi“. Jūsų komanda atrodys šiek tiek taip:

    git klonas

  2. Raspberry Pi terminale atlikite katalogo pakeitimo komandą (cd) į „raspberry_client“:

    cd aviečių_klientas.

  3. Turėsite naudoti virtualią aplinką*. Paprasta. Bėgti

    python3 -m venv env. Taip bus sukurta virtuali aplinka pavadinimu „env“, kurią naudosime priklausomybėms įdiegti.

  4. Dabar turime patekti į savo virtualią aplinką. Vykdyti:

    šaltinis env/bin/active. Dabar esate pasiruošę įdiegti projekto priklausomybes.

  5. Pakete, kurį ką tik klonavote, yra failas, vadinamas Request.txt. Atidarykite šį failą; pamatysite, kad mums reikalingi paho-mqtt ir pyserial paketai, taip pat atitinkamos jų versijos. Failo turinį galite peržiūrėti paleisdami

    katės reikalavimai.txt. Norėdami įdiegti šiuos paketus, ru

    pip install -r reikalavimai.txt.

  6. Tai užbaigia konfigūraciją.

Žodžiu, kiekviena pamoka, kurioje naudojamas „python“, mini „Virtual env“ir net apie šį nedidelį projektą paminėsiu. Virtuali aplinka leidžia atskirti priklausomybių versijas, taip pat atskirti „python“darbo eigą - tai puikus būdas sutvarkyti „Python“darbo sritis. Jei pirmą kartą naudojatės virtualia aplinka, trumpai perskaitykite ją čia.

Ką daro kodas…

Failas client.py importuos paprastą bibliotekų rinkinį, įskaitant mūsų pačių arduinosensorį. Pagrindinėje funkcijoje mes gausime vertes iš „Arduino“, paskelbsime duomenis MQTT tarpininkui ir tada miegosime 10 sekundžių.

Arduinosensor.py failas yra pagalbinių metodų rinkinys, apjuosiantis paho.mqtt biblioteką, taip pat pateikiantis keletą naudingų bendravimo schemų, skirtų bendrauti su „Arduino“naudinguoju kroviniu (žr. Parse_payload). Žinoma, kodas pridedamas šio skyriaus pabaigoje.

Paprastas klientas, kuris bendrauja su „arduino“elementu per serijinį monitorių. Tikimasi, kad kodą rasite čia, kai jis bus paskelbtas viešai:

fromimportlibimportimport_module
importas
importo laikas
importuojantis jutiklis
defmain ():
# atviras apibrėžtas klientas
start_time = time.time ()
o tiesa:
reading = arduinosensor.get_values (os.environ.get ('PORT', "/dev/ttyUSB0"))
arduinosensor.pub ("python_client", naudingoji apkrova = skaitymas)
time.sleep (10.0- ((time.time () -start_time) %10.0))
if_vardas _ == "_ pagrindinis_":
pagrindinis ()

peržiūrėti rawclient.py, kurį su „❤“priglobia „GitHub“

5 žingsnis: sudėkite viską kartu

Mes turime „Raspberry Python“kodą ir „Arduino“kliento kodą. Pereikime prie abiejų subjektų sujungimo.

Pirmiausia prijunkite „Arduino“ir nustatykite teisingą konfigūraciją:

  1. „Raspberry Pi“terminale paleiskite

    python -m serial.tools.list_ports. Čia bus išvardyti visi USB prievadai, palaikantys nuoseklųjį ryšį.

  2. Dabar prijunkite „Arduino“ir palaukite apie 2 sekundes, kol avietė jį atpažins. Rašymas

    python -m serial.tools.list_ports dar kartą parodys uostus. Galite pamatyti papildomą sąrašą - jei taip yra, tada šis naujas įrašas yra įrašas, prie kurio prijungtas jūsų „Arduino“. Tikėtina, kad tai bus „/dev/ttyUSB0“.

  3. Pabandykite paleisti „Python“kodą savo virtualioje aplinkoje, paleisdami „python3.7 client.py“. Palaukite kelias sekundes (daugiausiai dešimt) - jei susiduriate su išimtimi, tai reiškia, kad turėsime pakeisti savo aviečių pi porto vertę. Jei matote, kad kodas išspausdina eilutę, prasidedančią „Išsiųsta po naudingos apkrovos:…“, tada jums bus gerai pereiti prie paskutinio žingsnio su „Grafana“. Patarimas: būtinai paleiskite

    ekranas -S python prieš paleisdami „python“klientą, kitaip, nutraukę ryšį su „aviečių pi“, prarasite veikiančią „python“programą. Techniškai jums nereikia griežtai naudoti „python“kaip paskutinio parametro, tačiau man patinka atitinkamai pavadinti savo ekrano sesijas.

    1. Norėdami pakeisti COM prievado vertę, prieš paleisdami kodą turėsite nustatyti aplinkos kintamąjį. Turėsite tai išbandyti kiekvienai įmanomai išvesties vertei, kurią gavote paleisdami „python -m serial.tools.list_ports“. Pavyzdžiui, jei gavau du įrašus ir jie buvo tokie:

      • /dev/ttyUSB6
      • /dev/acm0

tada komandos, kurias paleisiu, būtų tokios:

PORT = "/dev/ttyUSB6" python3.7 client.py, o jei tai neveiktų, aš vėliau ru

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

Kai atliksite šiuos veiksmus, kodas perduos duomenis į mūsų „influenxdb“duomenų bazės egzempliorių, kuris, prisijungęs prie „Grafana“, leis mums peržiūrėti mūsų prietaisų skydelį.

6 veiksmas: „Grafana“konfigūracija ir prietaisų skydelio peržiūra

„Grafana“konfigūracija ir prietaisų skydelio peržiūra
„Grafana“konfigūracija ir prietaisų skydelio peržiūra

Gerai, mes jau paskutinėje stadijoje! Dabar mes naudosime „Grafana“, kad sukurtume paprastą prietaisų skydelį.

  1. Prisijunkite prie „Grafana“egzemplioriaus. Kadangi atlikote pradinio „dzone“straipsnio veiksmus, turėtumėte turėti galimybę prisijungti su savo administratoriaus vartotoju. Pirmyn ir prisijunkite.
  2. Kairėje srityje užveskite pelės žymeklį virš „prietaisų skydelių“piktogramos - keturių kvadratų. Spustelėkite „Tvarkyti“.
  3. Naujame puslapyje spustelėkite „Naujas prietaisų skydelis“. Be to, spustelėkite „Pridėti naują skydelį“.
  4. Tai atveria „Grafana“redaktorių. Sukursime paprastą rodinį, kuriame bus rodoma viena metrika.

    1. Dešinėje srityje pakeiskite skydelio pavadinimą į kažką prasmingo, pvz., „Virtuvės skaitymai“. Taip pat galite įvesti pasirinktinį aprašą.
    2. Apačioje kairėje „Užklausa“pridėsime vieną laiko eilutę. „Grafana“čia tikrai šviečia, nes mes galime lengvai sukurti SQL sakinius naudodami paspaudimu pagrįstą sąsają. Skiltyje „numatytasis“pasirinkite „InfluxDB“.
    3. Dabar, norėdami perskaityti „A“- iš FR, pasirinkite matavimą „airtestt“. Jei pažvelgsite į pradinį python kodą arduinosensor.py funkcijoje get_values, pamatysite, kad mes apibrėžiame šią airtestt lentelę kode.
    4. Norėdami gauti pavyzdį, eikime į „SELECT“sąlygą ir pasirinkite lauką (mq4). Iš pradžių mūsų prietaisų skydelis suteiks mums galimybę pasirinkti „mean ()“- spustelėkite šį pasirinkimą ir pasirinkite „Pašalinti“. tada spustelėkite pliuso ženklą ir skiltyje „Aggregacijos“pasirinkite „skirtingas ()“. Tai parodys konkrečius laiko taškus. Mes galime pasirinkti kitas priemones, tačiau kol kas mūsų skydelyje bus rodomi skirtingi rodmenys nuo mq4.
    5. Spustelėkite Išsaugoti viršutiniame dešiniajame kampe ir viskas!

Jei susiduriate su problemomis, galite patikrinti savo nustatymus naudodami tuos, kurie yra pridedamoje ekrano kopijoje.

7 žingsnis: Apvyniokite

Apvyniokite
Apvyniokite

Šiame vadove jums pavyko sukurti tvirtą MQTT tinklą, sudarytą iš vieno mazgo ir tarpininko. Jūs taip pat sugebėjote vizualizuoti savo IOT duomenis naudodami „Grafana“. Galiausiai, naudodamiesi SSH ryšiu, šią paprastą sistemos architektūrą sukūrėte naudodami (tikiuosi) naršyklės ir kompiuterio patogumą.

Yra dalykų, kuriuos galbūt norėtume patobulinti.

  • Mūsų diagramoje esantys jutiklių rodmenys iš tikrųjų nėra tikslūs jutiklių rodmenys - jie yra mūsų jutiklio išėjimo įtampa. Juos reikia kalibruoti, daugiau informacijos rasite šiame tinklaraščio įraše.
  • Mūsų aviečių pi konfigūraciją galima padaryti daug lengvesnę, naudojant ESP8266 plokštę, prijungtą prie arduino, ir visiškai pašalinus pi. Peržiūrėkite ESP8266 modulio įvadą.
  • Galbūt norime pridėti įspėjimų apie konkrečius įvykius. Laimei, „Grafana“siūlo būdą tai padaryti.

Paliksiu daugiau skaitymo, kad sužavėtų jūsų vaizduotę IOT pasauliu. Laukiu jūsų kitoje pamokoje!

Kiti skaitymai:

Rekomenduojamas: