Obsah:
- Krok 1: Zařízení + nastavení
- Krok 2: Nastavení obvodu
- Krok 3: Arduino kód a blikání
- Krok 4: Raspberry Pi Code
- Krok 5: Dát to všechno dohromady
- Krok 6: Konfigurace Grafany a zobrazení na řídicím panelu
- Krok 7: Zabalte
Video: Sledujte kvalitu ovzduší pomocí Grafana a Raspberry Pi: 7 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:20
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
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.
-
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
-
V terminálu Raspberry Pi proveďte příkaz změnit adresář (cd) na „raspberry_client“:
cd raspberry_client.
-
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í.
-
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.
-
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.
- 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:
-
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.
-
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“.
-
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.
-
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
Dobře, nyní jsme v posledním úseku! Nyní použijeme Grafanu k vytvoření jednoduchého řídicího panelu.
- 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.
- V levém podokně najeďte na ikonu „řídicí panely“- čtyři čtverce. Klikněte na „Spravovat“.
- Na nové stránce klikněte na „Nový řídicí panel“. Dále klikněte na „Přidat nový panel“.
-
Tím se otevře editor Grafana. Vytvoříme jednoduché zobrazení ukazující jedinou metriku.
- 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.
- 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.
- 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.
- 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.
- 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
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:
PyonAir - open source monitor znečištění ovzduší: 10 kroků (s obrázky)
PyonAir - otevřený monitor znečištění ovzduší: PyonAir je levný systém pro monitorování místních úrovní znečištění ovzduší - konkrétně částic. Systém je založen na desce Pycom LoPy4 a hardwaru kompatibilním s Grove a může přenášet data přes LoRa i WiFi. Ujal jsem se tohoto p
Mapovač znečištění ovzduší CEL (upravený): 7 kroků
Mapovač znečištění ovzduší CEL (Modifikovaný): Znečištění ovzduší je v dnešní společnosti globálním problémem, je příčinou mnoha nemocí a způsobuje nepohodlí. To je důvod, proč jsme se pokusili vybudovat systém, který by mohl sledovat vaši polohu GPS a znečištění ovzduší na tomto přesném místě, aby pak
EqualAir: Nositelný displej NeoPixel spuštěný senzorem znečištění ovzduší: 7 kroků (s obrázky)
EqualAir: Nositelný displej NeoPixel spouštěný senzorem znečištění ovzduší: Cílem projektu je vytvořit nositelné tričko, které bude zobrazovat sugestivní grafiku, pokud je znečištění ovzduší nad stanovenou prahovou hodnotou. Grafika je inspirována klasickou hrou „lamače cihel“v tom, že auto je jako pádlo, které
Monitorování kvality ovzduší pomocí fotonu částic: 11 kroků (s obrázky)
Monitorování kvality ovzduší pomocí částicového fotonu: V tomto projektu je senzor částic PPD42NJ používán k měření kvality vzduchu (PM 2,5) přítomné ve vzduchu pomocí částicového fotonu. Nejenže zobrazuje data na konzole Particle a dweet.io, ale také mění kvalitu vzduchu pomocí RGB LED změnou
Hodiny Raspberry Pi Oled Sledujte, jak to uslyšíte a pocítíte: 5 kroků (s obrázky)
Hodiny Raspberry Pi Oled Sledujte to slyšet a cítit: Jedná se o chytré hodiny, které ukazují čas na displeji OLED a také můžete slyšet čas v jiném časovém intervalu, který je plný pro nevidomé a také mění barvu LED s časem jako světlo za soumraku večer přechází z oranžové na žlutou a jako t