Tartalomjegyzék:

A levegő minőségének követése a Grafana és a Raspberry Pi használatával: 7 lépés
A levegő minőségének követése a Grafana és a Raspberry Pi használatával: 7 lépés

Videó: A levegő minőségének követése a Grafana és a Raspberry Pi használatával: 7 lépés

Videó: A levegő minőségének követése a Grafana és a Raspberry Pi használatával: 7 lépés
Videó: A kormány kiemelten fontosnak tartja a levegő minőségének megóvását 2024, November
Anonim
Kövesse nyomon a levegő minőségét a Grafana és a Raspberry Pi segítségével
Kövesse nyomon a levegő minőségét a Grafana és a Raspberry Pi segítségével

Egy kis IOT projektet kerestem, és egy barátom javasolta, hogy nézze meg ezt az oktatóanyagot:

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

Nagyon ajánlom, hogy kövesse az oktatóanyagot, hogy kövesse a Raspberry Pi felügyelethez való beállítását. Ez az oktatóanyag befejezi a további lépéseket egy egyszerű IoT -eszköz tervezésében, amely lehetővé teszi a magas hibatűrést, valamint azt, hogy mennyire hasznos lehet a Raspberry Pi az Arduino -val párosítva.

Kitérek a levegőérzékelők MQ* modelljeinek hatékonyságára és némileg korlátozottságára is. Az MQ* érzékelők olcsók és meglehetősen hatékonyak, és rendkívül könnyen beállíthatók.

Összességében ez segít abban, hogy a lehető legegyszerűbb módon kezdje el csatlakoztatni az Arduino -t az internethez, és megadja az utat a könnyebb lábnyomú modulok használatához (re: ESP8266).

Érezd jól magad!

1. lépés: Felszerelés + beállítás

Felszerelés

  • Raspberry Pi és Raspbian telepítve
  • Raspberry Pi tápegység
  • Arduino Uno/egyenértékű
  • Férfi - férfi USB típusú B - A típusú (az Arduino tartozékának kell lennie)
  • Bármely MQ* érzékelő (az MQ-2, 4, 5 és 135-öt használtam)
  • Vegyes jumper vezetékek
  • mini kenyeretábla

Beállít

Ez az oktatóanyag az Arduino és a Raspberry Pi használatának gyengéd bevezetőjeként szolgál - segít megismerni a linux terminált. Mindazonáltal nem feltételezem, hogy sok tapasztalatom lenne az Arduino vagy a Raspberry Pi fejlesztésében - csak a felszerelésre és a kíváncsi hozzáállásra van szüksége.

  • Be kell fejeznie az oktatóanyag lépéseit.
  • Azt javaslom, hogy használja a Secure Shell (SSH) csatlakozást a Raspberry Pi -vel, mivel ez lehetővé teszi a parancsok egyszerű bevitelét. Az SSH -n keresztüli csatlakozás eltér attól, hogy Windows, Linux vagy Mac rendszert használ. A Linux és a Mac az ssh tekintetében nagyon könnyen használható (az SSH megnyitásának parancsa szó szerint ssh). Nézze meg a Putty for Windows rendszert. Javaslom, hogy nézze meg a képernyőt, hogy megőrizze munkamenetét a projekt során.
  • A Python -ot a Raspbianra is telepítenie kell. Amikor befejeztem ezeket a lépéseket, készítettem egy másolatot egy régi SD -kártyáról, amelyet egy korábbi projektben hevertem, és amelyre már telepítve volt a Python. Ha a NOOBS/Raspbian disztribúciója nem rendelkezik Python 3.7 vagy újabb verzióval, nézze meg ezeket a lépéseket a Python forrásból történő fordításához.
  • Ismerje meg a git programot, és telepítse, ha még nincs telepítve a Raspbian disztribúciójában.

2. lépés: Az áramkör beállítása

Az áramkör beállítása
Az áramkör beállítása

Egy áramkört kell beállítania az Arduino -ban.

Adtam egy vázlatot, amelyet referenciaként használhat.

Az összes MQ-* gázérzékelő szépsége abban rejlik, hogy miután létrejött az 5 voltos és a földi csatlakozás, az Arduino analóg csapjainak bemeneti ellenállása lehetővé teszi az érzékelő megfelelő működését.

Ügyeljen arra, hogy az érzékelő törőlapján található analóg csatlakozás az Arduino -hoz és ne a digitális csatlakozóhoz legyen csatlakoztatva. Ha a tesztelés során nagyon szűk értéktartományba ütközik, azt javaslom, először ellenőrizze itt a kapcsolatot.

3. lépés: Arduino kód és villogás

Az ezt követő lépésben összekapcsoljuk az Arduino táblát a Raspberry Pi -vel. Mielőtt ezt megtennénk, meg kell villannunk az Arduino -t kóddal, hogy leolvassuk az érzékelőt, valamint továbbítsuk az érzékelő adatait a Raspberry Pi -nek. Ezt bármilyen módon megteheti, hogy általában kódot küld az Arduino -nak. Az Arduino IDE -n kívül egy harmadik féltől származó eszközt használtam - ennélfogva az Arduino könyvtárat tartalmazza a tetején. Ez nem szükséges más projekteknél.

Ellenőrizze a másolni/beilleszteni kívánt kódot a szakasz végén.

Mit csinál a kód

A kód úgy van beállítva, hogy négy különböző érzékelőből nyerjen adatokat - ha különböző típusú érzékelőket használ, ésszerű lesz megváltoztatni a soros portról küldött kimeneti jel elnevezését.

A ciklusban ellenőrizzük, hogy a Raspberry Pi kér -e tőlünk adatokat. Ezért egy nagyon egyszerű Master/Slave konfigurációt használunk, ahol a Raspberry Pi folyamatosan kér adatokat az Arduino -tól. Ez sokkal egyszerűbb, mint egy számláló az Arduino kódban, mert könnyebb kipróbálni, hogy mely értékek működnek a Raspberry Pi -ből, ahelyett, hogy új értékeket kellene villannia az Arduino -nak.

Az arduino, miután adatkérést kapott, GET paraméterként formázza a kimenetet - ez a HTTP módszerekhez kapcsolódik, és egyszerűen tervezési választás. Ha kommunikációs sémát tervezne az Arduino -ból a soros porton keresztül, könnyen bármi másra is választhat, amennyiben úgy tervezi, hogy az adatok ésszerűen elkülönüljenek. Azért választottam a GET -et, mert ismerős és robusztus.

Egyszerű tesztelés…

Miután az Arduino villogott és a kód fut, nyissa meg az Arduino IDE soros monitorát. Ha egyetlen "H" karaktert küld (biztosítsa a nagybetűjét!), Megkapja az adatok hasznos terhét. Gratulálok, működik!

Minta, aszinkron MQ-* adatgyűjtő

#befoglalni
int mq2 = A2;
int mq4 = A3;
int mq5 = A4;
int mq135 = A5;
int bejövőByte;
voidsetup () {
pinMode (mq2, BEMENET);
pinMode (mq4, INPUT);
pinMode (mq5, INPUT);
pinMode (mq135, BEMENET);
Sorozat.kezdet (9600);
}
/* valuePrint kinyomtatja a címke értékét.
* Csak mellékhatásokat okoz.
*/
voidvaluePrint (String címke, int olvasás) {
Serial.print (címke);
Soros.nyomtatás ("=");
Soros.nyomtatás (olvasás);
}
voidloop () {
// nézd meg, van -e bejövő soros adat:
ha (Serial.available ()> 0) {
// olvassa el a soros puffer legrégebbi bájtját:
// "A Serial.read hívásakor egy bájt eltávolításra kerül a fogadási pufferből, és visszatér a kódjához"
bejövőByte = Serial.read ();
// ha nagybetűs H (ASCII 72), olvassa el az értékeket, és küldje el a málna gazdagépének.
// TODO: ügyeljen arra, hogy az üzenet mindig azonos hosszúságú legyen
ha (bejövőByte == 72) {
int mq2Reading = analógRead (mq2);
int mq4Reading = analógRead (mq4);
int mq5Reading = analógRead (mq5);
int mq135Reading = analógRead (mq135);
Soros.nyomtatás ("?");
valuePrint ("mq2", mq2Reading);
Serial.print ("&");
valuePrint ("mq4", mq4Reading);
Serial.print ("&");
valuePrint ("mq5", mq5Reading);
Serial.print ("&");
valuePrint ("mq135", mq135Reading);
Serial.print ("\ n");
}
}
// csak másodpercenként olvassa el a sorozatot
késleltetés (1000);
}

Tekintse meg a rawmain.cpp -t, amelyet a GitHub ❤ üzemeltet

4. lépés: Raspberry Pi Code

Most, hogy konfigurálta a Raspberry Pi-t a https://dzone.com/articles/raspberry-pi-iot-sensor… szerint, most futtathatja a Raspberry Client kódot, amely adatokat küld az MQTT-n keresztül az adatbázisunkba. csatlakozik Grafanához.

  1. Győződjön meg arról, hogy a málna csatlakozik az internethez, majd hajtsa végre a git clone parancsot a teljes kód másolásához a Raspberry Pi -re. A parancs egy kicsit így fog kinézni:

    git klón

  2. A raspberry Pi terminálján hajtsa végre a könyvtár módosítását (cd) a "raspberry_client" parancsra:

    cd málna_kliens.

  3. Virtuális környezetet kell használnia*. Egyszerű. Fuss

    python3 -m venv env. Ezzel létrejön egy "env" nevű virtuális környezet, amelyet a függőségek telepítésére használunk.

  4. Most be kell lépnünk a virtuális környezetünkbe. Fuss:

    source env/bin/active. Most már készen áll a projekt függőségeinek telepítésére.

  5. Az imént klónozott csomagban van egy követelmények.txt nevű fájl. Nyissa meg ezt a fájlt; látni fogja, hogy szükségünk van a paho-mqtt és a pyserial csomagokra, valamint azok megfelelő verzióira. Futtatással megtekintheti a fájl tartalmát

    macska követelmények.txt. E csomagok telepítéséhez ru

    pip install -r követelmények.txt.

  6. Ezzel befejeződik a konfiguráció.

Szó szerint minden oktatóanyag, amely python -ot használ, megemlíti a Virtual env -t, és még ehhez a kis projekthez is említést teszek. A virtuális környezetek lehetővé teszik a függőségek verzióinak szétválasztását, valamint a python munkafolyamat szétválasztását - Ez egy szép módja a Python -munkaterületek rendbetételének. Ha most először használ virtuális környezetet, olvassa el röviden itt.

Mit csinál a kód…

A client.py fájl egy egyszerű könyvtárkészletet importál, beleértve a saját arduinosensorunkat. A fő funkcióban megkapjuk az értékeket az Arduino -tól, közzétesszük az adatokat az MQTT brókernek, majd alszunk 10 másodpercig.

Az arduinosensor.py fájl segítő módszerek összessége, amelyek körbeveszik a paho.mqtt könyvtárat, valamint néhány hasznos kommunikációs sémát biztosítanak az Arduino hasznos terhével való kommunikációhoz (lásd: parse_payload). Természetesen a kód a fejezet végén található.

Egyszerű kliens, amely soros monitoron keresztül kommunikál egy arduino elemmel. Várhatóan itt találja meg a kódot, amikor nyilvánosságra kerül:

fromimportlibimportimport_module
importok
importálási idő
importőr érzékelő
defmain ():
# meghatározott ügyfél megnyitása
start_time = time.time ()
míg igaz:
olvasás = arduinosensor.get_values (os.environ.get ('PORT', "/dev/ttyUSB0"))
arduinosensor.pub ("python_client", hasznos terhelés = olvasás)
time.sleep (10.0- ((time.time () -start_time) %10.0))
if_név _ == "_ fő_":
fő()

Tekintse meg a rawclient.py webhelyet, amelyet a GitHub ❤ üzemeltet

5. lépés: Összerakni

Beállítottuk a Raspberry Python kódot, és beállítottuk az Arduino ügyfélkódot. Folytassuk a két entitás összekapcsolásával.

Először csatlakoztassuk az Arduino -t, és állítsuk be a megfelelő konfigurációt:

  1. Futtassa a Raspberry Pi terminálon

    python -m serial.tools.list_ports. Ez felsorolja az összes USB portot, amelyek támogatják a soros kommunikációt.

  2. Most csatlakoztassa az Arduino -t, és várjon körülbelül 2 másodpercet, amíg a Málna felismeri. Beírás

    python -m serial.tools.list_ports ismét megmutatja a portokat. Lehet, hogy megjelenik egy további lista is - ha ez valóban így van, akkor ez az új bejegyzés az a bejegyzés, amelyhez az Arduino csatlakozik. Ez valószínűleg a "/dev/ttyUSB0" lesz.

  3. Próbálja meg futtatni a python kódot a virtuális környezetben a python3.7 client.py futtatásával. Várjon néhány másodpercet (legfeljebb tíz) - ha kivétellel szembesül, ez azt jelenti, hogy módosítanunk kell a málna pi -n lévő portunk értékét. Ha azt látja, hogy a kód egy sort ír ki, amely a következővel kezdődik: "Elküldve a hasznos terhelés után: …", akkor jó lesz folytatni a Grafana utolsó lépését. Tipp: feltétlenül futtassa

    képernyő -S python mielőtt elindítaná a python klienst, különben, amikor befejezi a kapcsolatot a málna pi -vel, elveszíti a futó python programot. Technikailag nem kell szigorúan a "python" -t használni utolsó paraméterként, de szeretem ennek megfelelően elnevezni a képernyőmunkáimat.

    1. A COM port értékének megváltoztatásához a kód futtatása előtt be kell állítania egy környezeti változót. Ezt a python -m serial.tools.list_ports futtatásakor kapott minden lehetséges kimeneti értéknél ki kell próbálnia. Például, ha a bejegyzések összege kettő volt, és a következők voltak:

      • /dev/ttyUSB6
      • /dev/acm0

akkor a futtatandó parancsok a következők lennének:

PORT = "/dev/ttyUSB6" python3.7 client.py, és ha ez nem működne, utólag rontanék

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

Miután elvégezte ezeket a lépéseket, a kód adatokat küld az influenxdb adatbázis -példányunkhoz, amely a Grafanához való csatlakozáskor lehetővé teszi számunkra, hogy megtekinthessük műszerfalunkat.

6. lépés: A Grafana konfigurálása és az irányítópult megtekintése

Grafana konfiguráció és műszerfal megtekintése
Grafana konfiguráció és műszerfal megtekintése

Rendben, most az utolsó szakaszon vagyunk! Most a Grafana segítségével létrehozunk egy egyszerű műszerfalat.

  1. Csatlakozzon a Grafana példányához. Mivel az eredeti dzone cikk lépéseit követte, be kell tudnia jelentkezni rendszergazdai felhasználójával. Menj előre és jelentkezz be.
  2. A bal oldali ablaktáblán mutasson az „irányítópultok” ikonra - a négy négyzetre. Kattintson a "Kezelés" gombra.
  3. Az új oldalon kattintson az "Új irányítópult" gombra. Ezután kattintson az "Új panel hozzáadása" gombra.
  4. Ez megnyitja a Grafana szerkesztőt. Egy egyszerű nézetet hozunk létre, amely egyetlen mutatót jelenít meg.

    1. A jobb oldali ablaktáblán módosítsa a panel címét valami értelmesre, például "Konyhai olvasmányok". Egy opcionális Leírást is megadhat.
    2. A bal alsó sarokban, a "Lekérdezés" alatt egyetlen idősort adunk hozzá. A Grafana itt igazán ragyog, mivel kattintás alapú felületen könnyen létrehozhatunk SQL utasításokat. Az "alapértelmezett" alatt válassza az InfluxDB lehetőséget.
    3. Most, az "A" olvasásához - a FROM záradékban válassza az "airtestt" mérést. Ha megnézi az eredeti python -kódot az arduinosensor.py get_values függvényében, látni fogja, hogy ezt az airtestt táblázatot definiáljuk a kódon belül.
    4. Minta esetén menjünk a "SELECT" záradékhoz, és válasszuk az (mq4) mezőt. Eredetileg a műszerfalunk megadja a "mean ()" lehetőséget - kattintson erre a lehetőségre, és válassza az "Eltávolítás" lehetőséget. majd kattintson a pluszjelre, és az "Összesítések" alatt válassza a "differenciált ()" lehetőséget. Ez megmutatja a pontos időpontokat. Választhatunk más mértékeket is, de egyelőre panelünk az mq4 -től eltérő értékeket mutat.
    5. Kattintson a Mentés gombra a jobb felső sarokban, és kész!

Ha bajba kerül, ellenőrizheti beállításait a mellékelt képernyőképen láthatókkal.

7. lépés: Csomagolás

Csomagolás
Csomagolás

Ebben az oktatóanyagban egy erős MQTT hálózatot állíthatott be, amely egyetlen csomópontból és közvetítőből áll. Az IOT -adatait a Grafana segítségével is megjeleníthette. Végül ezt az egyszerű rendszer -architektúrát (remélhetőleg) böngészője és számítógépe kényelméből állíthatta össze SSH kapcsolat használatával.

Vannak dolgok, amelyeken javítani szeretnénk.

  • A grafikonunkban szereplő érzékelőértékek valójában nem pontos érzékelői leolvasások - ezek az érzékelőnk kimeneti feszültsége. Kalibrálni kell őket, további részletekért olvassa el ezt a blogbejegyzést.
  • A málna pi konfigurációnk sokkal könnyebbé tehető az arduino -hoz csatlakoztatott ESP8266 kártya használatával, és a pi teljes eltávolításával. Nézze meg az ESP8266 modul bevezetőjét.
  • Érdemes riasztásokat hozzáadni bizonyos eseményekhez. Szerencsére a Grafana lehetőséget kínál erre.

Hagyok még néhány olvasnivalót, hogy elcsábítsam fantáziáját az IOT világával. Várom Önöket a következő tanításban!

További olvasmányok:

Ajánlott: