Obsah:

Sledujte kvalitu vzduchu pomocou grafanov a malín pi: 7 krokov
Sledujte kvalitu vzduchu pomocou grafanov a malín pi: 7 krokov

Video: Sledujte kvalitu vzduchu pomocou grafanov a malín pi: 7 krokov

Video: Sledujte kvalitu vzduchu pomocou grafanov a malín pi: 7 krokov
Video: Противовирусная настройка иммунитета 2024, Júl
Anonim
Sledujte kvalitu ovzdušia pomocou Grafana a Raspberry Pi
Sledujte kvalitu ovzdušia pomocou Grafana a Raspberry Pi

Hľadal som malý malý projekt IOT a priateľ mi odporučil, aby som sa pozrel na tento návod:

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

Dôrazne odporúčam riadiť sa týmto návodom a nastaviť Raspberry Pi na monitorovanie. Tento tutoriál dokončí ďalšie kroky pri navrhovaní jednoduchého zariadenia IoT, ktoré umožňuje vysokú toleranciu chýb, a tiež to, ako užitočný môže byť Raspberry Pi v spojení s Arduino.

Tiež sa zaoberám účinnosťou a určitým obmedzením modelov vzduchových senzorov MQ*. Senzory MQ* sú lacné a pomerne účinné a ich nastavenie je veľmi jednoduché.

Celkovo vám to pomôže začať s najjednoduchším možným spôsobom pripojenia Arduina k internetu a nastaví vám cestu k použitiu ľahších modulov stopy (pozri: ESP8266).

Bavte sa!

Krok 1: Zariadenie + nastavenie

Zariadenie

  • Raspberry Pi s nainštalovaným Raspbianom
  • Napájanie Raspberry Pi
  • Arduino Uno/ekvivalent
  • Mužský až mužský USB typ B až typ A (mal by byť súčasťou vášho Arduina)
  • Akýkoľvek zo snímačov MQ* (použil som MQ-2, 4, 5 a 135)
  • Rozmanité prepojovacie vodiče
  • mini chlebník

Nastaviť

Tento tutoriál je myslený ako jemné úvod do používania Arduina a Raspberry Pi - pomôže vám vedieť, ako používať terminál linux. Nepredpokladám však veľa skúseností s prácou na Arduine alebo Raspberry Pi - všetko, čo skutočne potrebujete, je poskytnuté vybavenie a zvedavý prístup.

  • Budete musieť vykonať kroky v tomto návode.
  • Na prepojenie s Raspberry Pi odporúčam použiť Secure Shell (SSH), pretože vám to umožňuje jednoduché zadávanie príkazov. Pripojenie cez SSH sa líši, či používate Windows, Linux alebo Mac. Linux a Mac sa v súvislosti s ssh veľmi ľahko používajú (príkaz na otvorenie SSH je doslova ssh). Pozrite sa na Putty pre Windows. Odporúčam vám vyskúšať si obrazovku ako spôsob, ako udržať reláciu počas projektu.
  • Budete tiež musieť nainštalovať Python na Raspbian. Keď som dokončil tieto kroky, urobil som kópiu starej karty SD, ktorú som mal okolo seba ležiacu z predchádzajúceho projektu, v ktorom už bol nainštalovaný Python. Ak vaša distribúcia NOOBS/Raspbian nemá Python 3.7 alebo novší, vyskúšajte tieto kroky na zostavenie Pythonu zo zdroja.
  • Zoznámte sa s gitom a nainštalujte ho v prípade, že ešte nie je nainštalovaný vo vašej distribúcii Raspbian.

Krok 2: Nastavenie obvodu

Nastavenie obvodu
Nastavenie obvodu

V Arduine je potrebné nastaviť jeden obvod.

Poskytol som schému, ktorú môžete použiť ako referenciu.

Krása všetkých plynových senzorov MQ-* je v tom, že po vytvorení 5voltového a uzemňovacieho pripojenia umožňuje vstupný odpor analógových pinov Arduina senzoru pracovať správne.

Dávajte pozor, aby ste zaistili, že analógové pripojenie z oddeľovacej dosky v senzore je pripojené k Arduinu, a nie k digitálnemu pripojeniu. Ak pri testovaní čelíte veľmi úzkemu rozsahu hodnôt, odporúčam vám najskôr skontrolovať svoje pripojenie.

Krok 3: Arduino kód a blikanie

V kroku nasledujúcom po tomto pripojíme dosku Arduino k Raspberry Pi. Predtým než to urobíme, musíme flashovať Arduino kódom na čítanie senzora a prenos údajov senzora na Raspberry Pi. To sa dá urobiť akýmkoľvek spôsobom, akým bežne tlačíte kód do Arduina. Použil som nástroj tretej strany okrem Arduino IDE - preto hore uvádzam knižnicu Arduino. Pri iných projektoch to nie je potrebné.

Na konci tejto časti skontrolujte kód, ktorý chcete skopírovať/vložiť.

Čo robí kód

Kód je nastavený tak, aby získaval údaje zo štyroch rôznych senzorov - ak používate rôzne typy senzorov, bude rozumné zmeniť názvy výstupného signálu odosielaného zo sériového portu.

V slučke kontrolujeme, či od nás Raspberry Pi požaduje údaje. Preto používame veľmi jednoduchú konfiguráciu Master/Slave, kde Raspberry Pi bude neustále požadovať údaje pre Arduino. Je to oveľa jednoduchšie ako mať počítadlo v kóde Arduino, pretože je jednoduchšie otestovať, aké hodnoty fungujú z Raspberry Pi, namiesto toho, aby ste museli do Arduina blikať nové hodnoty.

Po prijatí požiadavky na údaje arduino naformátuje výstup ako parameter GET - to súvisí s metódami HTTP a je to jednoducho dizajnová voľba. Ak by ste mali navrhnúť komunikačnú schému z Arduina cez sériový port, pokojne by ste mohli ísť na čokoľvek iné, pokiaľ to navrhnete tak, aby boli údaje primerane oddelené. Vybral som si GET, pretože je známy a robustný.

Jednoduché testovanie…

Akonáhle vám Arduino zabliká a spustí sa kód, otvorte sériový monitor Arduino IDE. Ak pošlete jeden znak „H“(dbajte na jeho kapitálku!), Dostanete užitočné množstvo dát. Gratulujem, funguje to!

Ukážkový asynchrónny kolektor dát MQ-*

#zahrnúť
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 vytlačí hodnotu pre tento štítok.
* Vytvára iba vedľajšie účinky.
*/
voidvaluePrint (String label, int reading) {
Serial.print (štítok);
Serial.print ("=");
Serial.print (čítanie);
}
voidloop () {
// skontrolujte, či existujú prichádzajúce sériové údaje:
ak (Serial.available ()> 0) {
// prečítanie najstaršieho bajtu v sériovej vyrovnávacej pamäti:
// "Keď zavoláte Serial.read, bajt sa odstráni z vyrovnávacej pamäte príjmu a vráti sa do vášho kódu"
incomingByte = Serial.read ();
// ak je to veľké H (ASCII 72), prečítajte si hodnoty a pošlite ich hostiteľovi maliny.
// TODO: Zaistite, aby mala správa vždy rovnakú dĺžku
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");
}
}
// prečítajte si sériu iba každú sekundu
oneskorenie (1000);
}

zobraziť rawmain.cpp hostený s ❤ od GitHub

Krok 4: Kód Raspberry Pi

Teraz, keď ste nakonfigurovali Raspberry Pi podľa https://dzone.com/articles/raspberry-pi-iot-sensor…, môžete teraz spustiť kód klienta Raspberry, ktorý bude odosielať údaje prostredníctvom MQTT do našej databázy, ktorá tiež sa pripája k Grafane.

  1. Zaistite, aby bola vaša malina pripojená k internetu, a potom pomocou príkazu git clone skopírujte celý kód do Raspberry Pi. Váš príkaz bude vyzerať trochu takto:

    klon git

  2. Na termináli raspberry Pi vykonajte príkaz na zmenu adresára (cd) na „raspberry_client“:

    cd raspberry_client.

  3. Budete musieť používať virtuálne prostredie*. Jednoduché. Utekaj

    python3 -m venv env. Tým vytvoríme virtuálne prostredie s názvom „env“, ktoré použijeme na inštaláciu závislostí.

  4. Teraz musíme vstúpiť do nášho virtuálneho prostredia. Beh:

    zdroj env/bin/aktivovať. Teraz ste pripravení nainštalovať závislosti projektu.

  5. V práve klonovanom balíku je súbor s názvom requirements.txt. Otvorte tento súbor; uvidíte, že požadujeme balíky paho-mqtt a pyserial, ako aj ich príslušné verzie. Obsah súboru si môžete pozrieť spustením

    požiadavky na mačku.txt. Aby bolo možné nainštalovať tieto balíky, ru

    pip install -r requirements.txt.

  6. Tým je konfigurácia ukončená.

Doslova v každom návode, ktorý používa python, je zmienka o Virtual env, a dokonca aj pre tento malý projekt uvediem zmienku. Virtuálne prostredia vám umožňujú oddeliť verzie závislostí a tiež oddeliť váš pracovný postup v pythone - je to príjemný spôsob, ako si urobiť poriadok v pracovných priestoroch v jazyku Python. Ak virtuálne prostredia používate prvýkrát, prečítajte si ich stručne tu.

Čo robí kód…

Súbor client.py importuje jednoduchú sadu knižníc vrátane nášho vlastného arduinosensora. V hlavnej funkcii dostaneme hodnoty z Arduina, zverejníme údaje brokerovi MQTT a potom spíme 10 sekúnd.

Súbor arduinosensor.py je sada pomocných metód, ktoré obopínajú knižnicu paho.mqtt a poskytujú aj užitočnú komunikačnú schému na komunikáciu s užitočným zaťažením Arduina (pozri: parse_payload). Kód je samozrejme priložený na konci tejto časti.

Jednoduchý klient, ktorý komunikuje s položkou arduino prostredníctvom sériového monitora. Očakávajte, že tu nájdete kód, keď bude zverejnený:

fromimportlibimportimport_module
dovoz
čas importu
importardinosenzor
defmain ():
# otvorený definovaný klient
start_time = time.time ()
whileTrue:
reading = arduinosensor.get_values (os.environ.get ('PORT', "/dev/ttyUSB0"))
arduinosensor.pub ("python_client", užitočné zaťaženie = čítanie)
time.sleep (10,0- ((time.time () -start_time) %10,0))
if_name _ == "_ main_":
Hlavná()

zobraziť rawclient.py hostený s ❤ od GitHub

Krok 5: Dajte to všetko dohromady

Máme nastavený kód Raspberry Python a máme nastavený klientsky kód Arduino. Prejdeme k spojeniu oboch entít dohromady.

Najprv pripojíme Arduino a nastavíme správnu konfiguráciu:

  1. Na termináli Raspberry Pi spustite

    python -m serial.tools.list_ports. Zobrazí sa zoznam všetkých portov USB, ktoré podporujú sériovú komunikáciu.

  2. Teraz zapojte Arduino a počkajte asi 2 sekundy, kým ho Raspberry nerozpozná. Zadávanie

    python -m serial.tools.list_ports ešte raz vám znova ukáže porty. Môžete vidieť ďalší zoznam - ak je to tak, potom je tento nový záznam záznamom, ku ktorému je pripojené vaše Arduino. Pravdepodobne to bude „/dev/ttyUSB0“.

  3. Skúste spustiť kód python vo svojom virtuálnom prostredí spustením súboru python3.7 client.py. Počkajte niekoľko sekúnd (najviac desať) - ak narazíte na výnimku, znamená to, že budeme musieť zmeniť hodnotu pre náš port na malinovom pi. Ak vidíte, že kód vytlačí riadok začínajúci sa „Odoslané nasledujúce užitočné zaťaženie: …“Potom bude dobré prejsť na posledný krok s Grafanou. Tip: Uistite sa, že beháte

    obrazovka -S python pred spustením klienta python, v opačnom prípade po ukončení pripojenia k malinovému pi prídete o spustený program python. Technicky nemusíte ako posledný parameter striktne používať „python“, ale rád podľa toho pomenujem svoje relácie obrazovky.

    1. Aby ste zmenili hodnotu pre COM port, budete musieť pred spustením kódu nastaviť premennú prostredia. Budete to musieť vyskúšať pre každú možnú hodnotu výstupu, ktorú ste získali pri spustení python -m serial.tools.list_ports. Ak by som napríklad získal dve položky a boli tieto:

      • /dev/ttyUSB6
      • /dev/acm0

potom by boli spustené príkazy:

PORT = "/dev/ttyUSB6" python3.7 client.py, a ak by to nefungovalo, následne by som pokazil

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

Akonáhle dokončíte tieto kroky, kód zapíše údaje do našej inštancie databázy influxdb, ktorá nám po pripojení k spoločnosti Grafana umožní zobraziť náš informačný panel.

Krok 6: Konfigurácia Grafany a zobrazenie panela

Konfigurácia Grafana a zobrazenie panela
Konfigurácia Grafana a zobrazenie panela

Dobre, teraz sme v poslednom úseku! Grafanu teraz použijeme na vytvorenie jednoduchého dashboardu.

  1. Pripojte sa k svojej inštancii Grafana. Keďže ste postupovali podľa krokov z pôvodného článku o dzone, mali by ste sa môcť prihlásiť pomocou svojho správcovského používateľa. Pokračujte a prihláste sa.
  2. Na ľavom paneli umiestnite kurzor myši na ikonu „dashboardy“- štyri štvorce. Kliknite na „Spravovať“.
  3. Na novej stránke kliknite na „Nový informačný panel“. Ďalej kliknite na „Pridať nový panel“.
  4. Tým sa otvorí editor Grafana. Vytvoríme jednoduché zobrazenie s jedinou metrikou.

    1. Na pravej table zmeňte názov panela na niečo zmysluplné, napríklad „Kuchynské čítanie“. Môžete tiež zadať voliteľný popis.
    2. Vľavo dole v časti Dotaz pridáme jeden časový rad. Grafana tu skutočne svieti, pretože môžeme ľahko vytvárať príkazy SQL pomocou rozhrania založeného na kliknutiach. V časti „Predvolené“vyberte položku InfluxDB.
    3. Teraz pre čítanie „A“- v klauzule FROM zvoľte meranie „airtestt“. Ak sa pozriete na pôvodný kód pythonu vo funkcii get_values arduinosensor.py, uvidíte, že túto tabuľku airtestt definujeme v kóde.
    4. Pre ukážku prejdeme na klauzulu „SELECT“a zvolíme pole (mq4). Pôvodne nám náš informačný panel dáva na výber „priemer ()“- kliknite na túto voľbu a zvoľte „Odstrániť“. potom kliknite na znamienko plus a v časti „Agregácie“vyberte „different ()“. Zobrazia sa konkrétne časové body. Môžeme zvoliť iné miery, ale zatiaľ náš panel bude zobrazovať odlišné hodnoty z mq4.
    5. Vpravo hore kliknite na položku Uložiť a máte hotovo!

V prípade, že sa dostanete do problémov, môžete si svoje nastavenia overiť pomocou nastavení na priloženom obrázku.

Krok 7: Zbaliť

Zabaliť
Zabaliť

V tomto tutoriáli ste dokázali vytvoriť robustnú sieť MQTT zloženú z jedného uzla a sprostredkovateľa. Tiež ste boli schopní vizualizovať svoje údaje o IOT pomocou Grafana. Nakoniec ste mohli zostaviť túto jednoduchú architektúru systému (dúfajme) z pohodlia vášho prehliadača a počítača pomocou pripojenia SSH.

Niektoré veci by sme chceli zlepšiť.

  • Hodnoty senzorov v našom grafe nie sú v skutočnosti presné hodnoty senzora - sú to výstupné napätie z nášho senzora. Je potrebné ich kalibrovať. Podrobnejšie informácie nájdete v tomto blogovom príspevku.
  • Našu malinovú konfiguráciu pi je možné odľahčiť pomocou dosky ESP8266 pripojenej k arduinu a úplného odstránenia pi. Pozrite sa na úvod do modulu ESP8266.
  • Možno budeme chcieť pridať upozornenia na konkrétne udalosti. Našťastie Grafana ponúka spôsob, ako to urobiť.

Nechám ďalšie čítanie, aby ste nalákali vašu predstavivosť na svet IOT. Teším sa na vás pri ďalšom pokyne!

Ďalšie čítania:

Odporúča: