Obsah:

Sledujte kvalitu ovzduší pomocí Grafana a Raspberry Pi: 7 kroků
Sledujte kvalitu ovzduší pomocí Grafana a Raspberry Pi: 7 kroků

Video: Sledujte kvalitu ovzduší pomocí Grafana a Raspberry Pi: 7 kroků

Video: Sledujte kvalitu ovzduší pomocí Grafana a Raspberry Pi: 7 kroků
Video: Dá se topit Fotovoltaikou? | BACINA.TV 2024, Červenec
Anonim
Sledujte kvalitu ovzduší pomocí Grafana a Raspberry Pi
Sledujte kvalitu ovzduší pomocí Grafana a Raspberry Pi

Hledal jsem malý malý projekt IOT a přítel mi doporučil, abych se podíval na tento tutoriál:

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

Vřele doporučuji sledovat tutoriál, kterým se budete řídit při nastavování Raspberry Pi pro monitorování. Tento tutoriál dokončí další kroky v návrhu jednoduchého zařízení IoT, které umožňuje vysokou toleranci chyb, a také to, jak užitečný může být Raspberry Pi při spárování s Arduinem.

Také jdu do účinnosti a poněkud omezení modelů vzduchových senzorů MQ*. Senzory MQ* jsou levné a poměrně efektivní a jejich nastavení je velmi snadné.

Celkově vám to pomůže začít s připojováním Arduina k internetu nejjednodušším možným způsobem a nastaví cestu pro používání lehčích modulů stopy (viz: ESP8266).

Bavte se!

Krok 1: Zařízení + nastavení

Zařízení

  • Raspberry Pi s nainstalovaným Raspbianem
  • Napájení Raspberry Pi
  • Arduino Uno/ekvivalent
  • Mužský až mužský USB typu B na typ A (měl by být dodáván s vaším Arduino)
  • Kterýkoli ze snímačů MQ* (použil jsem MQ-2, 4, 5 a 135)
  • Různé propojovací vodiče
  • mini prkénko

Založit

Tento tutoriál je míněn jako jemné úvod do používání Arduina a Raspberry Pi - pomůže vám vědět, jak používat linuxový terminál. Nepředpokládám však mnoho zkušeností s prací na Arduinu nebo Raspberry Pi - vše, co opravdu potřebujete, je poskytnuté vybavení a zvědavý přístup.

  • Budete muset dokončit kroky v tomto kurzu.
  • Doporučuji použít Secure Shell (SSH) k propojení s Raspberry Pi, protože to vám umožní snadno zadávat příkazy. Připojení přes SSH se liší, ať už používáte Windows, Linux nebo Mac. Linux a Mac se velmi snadno používají, pokud jde o ssh (příkaz k otevření SSH je doslova ssh). Podívejte se na Putty pro Windows. Doporučuji vám vyzkoušet si obrazovku jako způsob, jak udržet relaci během projektu.
  • Také budete muset nainstalovat Python na Raspbian. Když jsem dokončil tyto kroky, vytvořil jsem kopii staré karty SD, kterou jsem měl položenou kolem z předchozího projektu, který již měl nainstalovaný Python. Pokud vaše distribuce NOOBS/Raspbian nemá Python 3.7 nebo vyšší, podívejte se na tyto kroky ke kompilaci Pythonu ze zdroje.
  • Seznamte se s git a nainstalujte jej pro případ, že již není nainstalován ve vaší distribuci Raspbian.

Krok 2: Nastavení obvodu

Nastavení obvodu
Nastavení obvodu

V Arduinu je třeba nastavit jeden obvod.

Poskytl jsem schéma, které můžete použít jako referenci.

Krása všech plynových senzorů MQ-* spočívá v tom, že jakmile je provedeno 5voltové a zemní spojení, vstupní odpor analogových pinů Arduina umožňuje senzoru pracovat správně.

Dávejte pozor, abyste zajistili, že analogové připojení z oddělovací desky v senzoru je připojeno k Arduinu a ne k digitálnímu připojení. Pokud se při testování potýkáte s velmi úzkým rozsahem hodnot, doporučuji nejprve zkontrolovat připojení zde.

Krok 3: Arduino kód a blikání

V následujícím kroku připojíme desku Arduino k Raspberry Pi. Než to uděláme, musíme flashovat Arduino kódem pro čtení senzoru a pro přenos dat ze senzoru na Raspberry Pi. To lze provést jakýmkoli způsobem, který obvykle zasíláte kód do Arduina. Použil jsem nástroj třetí strany kromě Arduino IDE - proto nahoře zahrnuji knihovnu Arduino. U jiných projektů to není nutné.

Na konci této části zkontrolujte kód, který chcete zkopírovat/vložit.

Co dělá kód

Kód je nastaven tak, aby získával data ze čtyř různých senzorů - pokud používáte různé typy senzorů, bude rozumné změnit názvy výstupního signálu odesílaného ze sériového portu.

Ve smyčce kontrolujeme, zda od nás Raspberry Pi požaduje data. Proto používáme velmi jednoduchou konfiguraci Master/Slave, kde Raspberry Pi bude neustále žádat Arduino o data. To je mnohem jednodušší než mít čítač v kódu Arduino, protože je snazší otestovat, jaké hodnoty fungují z Raspberry Pi, místo toho, abyste museli do Arduina blikat nové hodnoty.

Arduino, jakmile obdrželo požadavek na data, bude formátovat výstup jako parametr GET - to souvisí s metodami HTTP a je to jednoduše designová volba. Pokud byste měli navrhnout komunikační schéma z Arduina přes sériový port, můžete snadno jít na cokoli jiného, pokud to navrhnete, data budou rozumně oddělena. Vybral jsem si GET, protože je známý a robustní.

Jednoduché testování…

Jakmile vám Arduino bliká a běží kód, otevřete sériový monitor Arduino IDE. Pokud odešlete jeden znak „H“(zajistěte jeho kapitál!), Získáte užitečné zatížení dat. Gratuluji, funguje to!

Ukázka, asynchronní kolektor dat MQ-*

#zahrnout
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 vytiskne hodnotu pro tento štítek.
* Vytváří pouze vedlejší efekty.
*/
voidvaluePrint (String label, int reading) {
Serial.print (štítek);
Serial.print ("=");
Serial.print (čtení);
}
voidloop () {
// zjistěte, zda existují příchozí sériová data:
pokud (Serial.available ()> 0) {
// přečtěte nejstarší bajt v sériové vyrovnávací paměti:
// "Když zavoláte Serial.read, bajt je odebrán z vyrovnávací paměti pro příjem a vrácen do vašeho kódu"
incomingByte = Serial.read ();
// pokud je to velké H (ASCII 72), přečtěte si hodnoty a pošlete je hostiteli raspberry.
// TODO: zajistěte, aby byla zpráva pokaždé stejně dlouhá
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");
}
}
// přečtěte si seriál jen každou sekundu
zpoždění (1000);
}

zobrazit rawmain.cpp hostovaný s ❤ od GitHub

Krok 4: Raspberry Pi Code

Nyní, když jste nakonfigurovali Raspberry Pi podle https://dzone.com/articles/raspberry-pi-iot-sensor…, můžete nyní spustit kód klienta Raspberry, který bude odesílat data přes MQTT do naší databáze, která také spojuje s Grafanou.

  1. Ujistěte se, že je vaše malina připojena k internetu, a poté proveďte příkaz git clone a zkopírujte celý kód do Raspberry Pi. Váš příkaz bude vypadat trochu takto:

    klon git

  2. V terminálu Raspberry Pi proveďte příkaz změnit adresář (cd) na „raspberry_client“:

    cd raspberry_client.

  3. Budete muset použít virtuální prostředí*. Jednoduchý. Běh

    python3 -m venv env. Tím se vytvoří virtuální prostředí s názvem „env“, které použijeme k instalaci závislostí.

  4. Nyní musíme vstoupit do našeho virtuálního prostředí. Běh:

    zdroj env/bin/aktivovat. Nyní jste připraveni nainstalovat závislosti projektu.

  5. V balíčku, který jste právě naklonovali, je soubor s názvem requirements.txt. Otevřete tento soubor; uvidíte, že požadujeme balíčky paho-mqtt a pyserial, jakož i jejich příslušné verze. Obsah souboru můžete zobrazit spuštěním

    požadavky na kočku.txt. Aby bylo možné tyto balíčky nainstalovat, ru

    pip install -r requirements.txt.

  6. Tím je konfigurace zabalena.

Doslova každý tutoriál, který používá python, zmiňuje Virtual env, a dokonce i pro tento malý projekt zmíním. Virtuální prostředí vám umožňují oddělit verze závislostí a také oddělit pracovní postup pythonu - je to pěkný způsob, jak si uklidit pracovní prostory Pythonu. Pokud používáte virtuální prostředí poprvé, projděte si je zde stručně.

Co dělá kód…

Soubor client.py importuje jednoduchou sadu knihoven včetně našeho vlastního arduinosensoru. V hlavní funkci získáme hodnoty z Arduina, zveřejníme data brokerovi MQTT a poté 10 sekund usneme.

Soubor arduinosensor.py je sada pomocných metod, které obklopují knihovnu paho.mqtt, a také poskytují užitečné komunikační schéma pro komunikaci s užitečným zatížením Arduina (viz: parse_payload). Kód je samozřejmě připojen na konci této části.

Jednoduchý klient, který komunikuje s položkou arduino prostřednictvím sériového monitoru. Očekávejte, že zde najdete kód, až bude veřejný:

fromimportlibimportimport_module
dovoz
čas importu
importarduinosensor
defmain ():
# otevřený definovaný klient
start_time = time.time ()
whileTrue:
reading = arduinosensor.get_values (os.environ.get ('PORT', "/dev/ttyUSB0"))
arduinosensor.pub ("python_client", užitečné zatížení = čtení)
time.sleep (10.0- ((time.time () -start_time) %10.0))
if_name _ == "_ main_":
hlavní()

zobrazit rawclient.py hostovaný s ❤ od GitHub

Krok 5: Dát to všechno dohromady

Máme nastavený kód Raspberry Python a máme nastavený klientský kód Arduino. Přejdeme k propojení obou entit dohromady.

Nejprve připojíme Arduino a nastavíme správnou konfiguraci:

  1. Na terminálu Raspberry Pi spusťte

    python -m serial.tools.list_ports. Zobrazí se seznam všech portů USB, které podporují sériovou komunikaci.

  2. Nyní připojte Arduino a počkejte asi 2 sekundy, než ho Raspberry rozpozná. Zadávání

    python -m serial.tools.list_ports ještě jednou vám znovu ukáže porty. Může se zobrazit další výpis - pokud tomu tak skutečně je, pak tento nový záznam je záznam, ke kterému je připojeno vaše Arduino. Pravděpodobně to bude „/dev/ttyUSB0“.

  3. Zkuste spustit kód pythonu ve virtuálním prostředí spuštěním python3.7 client.py. Počkejte několik sekund (maximálně deset) - pokud narazíte na výjimku, znamená to, že budeme muset změnit hodnotu pro náš port na malinovém pi. Pokud vidíte, že kód vytiskne řádek začínající „Odesláno následující užitečné zatížení:…“Pak bude dobré přejít na poslední krok s Grafanou. Tip: nezapomeňte spustit

    obrazovka -S python před spuštěním klienta python, v opačném případě, když ukončíte připojení k malinovému pi, přijdete o spuštěný program python. Technicky nemusíte jako poslední parametr striktně používat „python“, ale rád podle toho pojmenuji své relace obrazovky.

    1. Abyste mohli změnit hodnotu pro COM port, budete muset před spuštěním kódu nastavit proměnnou prostředí. Budete to muset vyzkoušet pro každou možnou hodnotu výstupu, kterou jste získali při spuštění python -m serial.tools.list_ports. Pokud jsem například získal dvě položky a byly následující:

      • /dev/ttyUSB6
      • /dev/acm0

pak příkazy, které bych spustil, by byly:

PORT = "/dev/ttyUSB6" python3.7 client.py, a pokud by to nefungovalo, následně bych zničil

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

Jakmile dokončíte tyto kroky, kód načte data do naší instance databáze influxdb, která nám po připojení k Grafana umožní zobrazit náš řídicí panel.

Krok 6: Konfigurace Grafany a zobrazení na řídicím panelu

Konfigurace Grafana a zobrazení na řídicím panelu
Konfigurace Grafana a zobrazení na řídicím panelu

Dobře, nyní jsme v posledním úseku! Nyní použijeme Grafanu k vytvoření jednoduchého řídicího panelu.

  1. Připojte se ke své instanci Grafana. Protože jste postupovali podle kroků z původního článku dzone, měli byste se přihlásit pomocí svého administrátorského uživatele. Pokračujte a přihlaste se.
  2. V levém podokně najeďte na ikonu „řídicí panely“- čtyři čtverce. Klikněte na „Spravovat“.
  3. Na nové stránce klikněte na „Nový řídicí panel“. Dále klikněte na „Přidat nový panel“.
  4. Tím se otevře editor Grafana. Vytvoříme jednoduché zobrazení ukazující jedinou metriku.

    1. V pravém podokně změňte název panelu na něco smysluplného, například „Čtení z kuchyně“. Můžete také zadat volitelný popis.
    2. Vlevo dole „Dotaz“přidáme jednu časovou řadu. Grafana zde opravdu září, protože můžeme snadno vytvářet příkazy SQL pomocí rozhraní založeného na kliknutí. V části „výchozí“vyberte InfluxDB.
    3. Nyní pro čtení „A“- v klauzuli FROM vyberte měření „airtestt“. Pokud se podíváte na původní kód pythonu ve funkci get_values funkce arduinosensor.py, uvidíte, že tuto tabulku airtestt definujeme v kódu.
    4. Pro ukázku přejděte na klauzuli „SELECT“a vyberte pole (mq4). Původně nám náš řídicí panel poskytne možnost „průměr ()“- klikněte na tuto volbu a vyberte „Odebrat“. poté klikněte na znaménko plus a v části „Agregace“vyberte „different ()“. Zobrazí se konkrétní časové body. Můžeme zvolit jiná opatření, ale prozatím náš panel bude ukazovat odlišné hodnoty z mq4.
    5. Vpravo nahoře klikněte na Uložit a máte hotovo!

V případě potíží můžete svá nastavení ověřit pomocí přiloženého snímku obrazovky.

Krok 7: Zabalte

Zabalit
Zabalit

V tomto kurzu jste mohli nastavit robustní síť MQTT složenou z jednoho uzlu a zprostředkovatele. Také jste byli schopni vizualizovat svá data IOT pomocí Grafana. Konečně jste mohli tuto jednoduchou systémovou architekturu sestavit z (doufejme) pohodlí vašeho prohlížeče a počítače pomocí připojení SSH.

Jsou věci, které bychom mohli chtít zlepšit.

  • Hodnoty senzorů v našem grafu nejsou ve skutečnosti přesné hodnoty senzoru - jsou to výstupní napětí z našeho senzoru. Je třeba je kalibrovat, další podrobnosti najdete v tomto příspěvku na blogu.
  • Naše konfigurace malinového pi může být mnohem lehčí pomocí desky ESP8266 připojené k arduinu a úplného odstranění pi. Podívejte se na úvod do modulu ESP8266.
  • Možná budeme chtít přidat upozornění na konkrétní události. Naštěstí Grafana nabízí způsob, jak toho dosáhnout.

Nechám nějaké další čtení, abych nalákal vaši představivost na svět IOT. Těším se na vás v dalším instruktážním!

Další čtení:

Doporučuje: