Spisu treści:

Śledź jakość powietrza za pomocą Grafana i Raspberry Pi: 7 kroków
Śledź jakość powietrza za pomocą Grafana i Raspberry Pi: 7 kroków

Wideo: Śledź jakość powietrza za pomocą Grafana i Raspberry Pi: 7 kroków

Wideo: Śledź jakość powietrza za pomocą Grafana i Raspberry Pi: 7 kroków
Wideo: Zadbaj o jakość powietrza w swoim domu! 2024, Lipiec
Anonim
Śledź jakość powietrza za pomocą Grafana i Raspberry Pi
Śledź jakość powietrza za pomocą Grafana i Raspberry Pi

Szukałem małego małego projektu IOT i znajomy polecił mi zapoznać się z tym samouczkiem:

dzone.com/artykuly/malina-pi-iot-czujnik…

Gorąco polecam postępować zgodnie z samouczkiem, aby kontynuować konfigurowanie Raspberry Pi do monitorowania. Ten samouczek zakończy dalsze kroki w projektowaniu prostego urządzenia IoT, które pozwala na wysoką tolerancję błędów, a także jak przydatne może być Raspberry Pi w połączeniu z Arduino.

Zajmuję się również skutecznością i pewnym ograniczeniem modeli MQ* czujników powietrza. Czujniki MQ* są tanie i dość skuteczne oraz bardzo łatwe w konfiguracji.

Ogólnie rzecz biorąc, pomoże to w najprostszy możliwy sposób rozpocząć podłączanie Arduino do Internetu i utoruje drogę do korzystania z lżejszych modułów (dot. ESP8266).

Baw się dobrze!

Krok 1: Sprzęt + Konfiguracja

Ekwipunek

  • Raspberry Pi z zainstalowanym Raspbian
  • Zasilacz Raspberry Pi
  • Arduino Uno/odpowiednik
  • Męski na męski USB typ B na typ A (powinien być dostarczony z Arduino)
  • Dowolny z czujników MQ* (użyłem MQ-2, 4, 5 i 135)
  • Różne przewody połączeniowe
  • mini płytka do krojenia chleba

Ustawiać

Ten samouczek ma na celu delikatne wprowadzenie do korzystania z Arduino i Raspberry Pi - pomoże ci dowiedzieć się, jak korzystać z terminala linux. Nie zakładam jednak dużego doświadczenia w pracy z Arduino czy Raspberry Pi - tak naprawdę wystarczy sprzęt i ciekawskie nastawienie.

  • Musisz wykonać kroki opisane w tym samouczku.
  • Zalecam używanie Secure Shell (SSH) do łączenia się z Raspberry Pi, ponieważ umożliwia to łatwe wprowadzanie poleceń. Połączenie przez SSH różni się, niezależnie od tego, czy korzystasz z systemu Windows, Linux czy Mac. Linux i Mac są dość łatwe w użyciu w odniesieniu do ssh (polecenie otwarcia SSH to dosłownie ssh). Sprawdź Putty dla Windows. Polecam sprawdzić screena jako sposób na utrzymanie sesji podczas projektu.
  • Będziesz także musiał zainstalować Pythona na Raspbian. Kiedy wykonałem te kroki, zrobiłem kopię starej karty SD, którą leżałem z poprzedniego projektu, na którym był już zainstalowany Python. Jeśli twoja dystrybucja NOOBS/Raspbian nie zawiera Pythona 3.7 lub nowszego, zapoznaj się z tymi krokami, aby skompilować Pythona ze źródeł.
  • Zapoznaj się z git i zainstaluj go, jeśli nie jest jeszcze zainstalowany w twojej dystrybucji Raspbian.

Krok 2: Konfiguracja obwodu

Konfiguracja obwodu
Konfiguracja obwodu

Jest jeden obwód, który musisz skonfigurować w Arduino.

Dostarczyłem schemat, który możesz wykorzystać jako odniesienie.

Piękno wszystkich czujników gazu MQ-* polega na tym, że po wykonaniu połączenia 5 V i uziemienia rezystancja wejściowa pinów analogowych Arduino umożliwia prawidłowe działanie czujnika.

Uważaj, aby upewnić się, że połączenie analogowe z płytki zaciskowej w czujniku jest połączone z Arduino, a nie z połączeniem cyfrowym. Jeśli podczas testowania masz do czynienia z bardzo wąskim zakresem wartości, polecam najpierw sprawdzić swoje połączenie tutaj.

Krok 3: Kod Arduino i flashowanie

W kolejnym kroku podłączymy płytkę Arduino do Raspberry Pi. Zanim to zrobimy, musimy sflashować Arduino z kodem, aby odczytać czujnik, a także przesłać dane z czujnika do Raspberry Pi. Można to zrobić w dowolny sposób, w jaki zwykle wysyłasz kod do Arduino. Oprócz Arduino IDE użyłem narzędzia innej firmy - stąd na górze umieszczam bibliotekę Arduino. Nie jest to konieczne w przypadku innych projektów.

Sprawdź kod do skopiowania/wklejenia na końcu tej sekcji.

Co robi kod

Kod jest skonfigurowany tak, aby uzyskać dane z czterech różnych czujników - jeśli używasz różnych typów czujników, rozsądna będzie zmiana nazewnictwa sygnału wyjściowego wysyłanego z portu szeregowego.

W pętli sprawdzamy, czy Raspberry Pi żąda od nas danych. Dlatego używamy bardzo prostej konfiguracji Master/Slave, w której Raspberry Pi będzie stale wysyłać żądania danych do Arduino. Jest to znacznie prostsze niż posiadanie licznika w kodzie Arduino, ponieważ łatwiej jest przetestować, jakie wartości działają z Raspberry Pi, zamiast konieczności flashowania nowych wartości do Arduino.

Arduino, po otrzymaniu żądania danych, sformatuje dane wyjściowe jako parametr GET - jest to związane z metodami HTTP i jest po prostu wyborem projektu. Jeśli miałbyś zaprojektować schemat komunikacji z Arduino przez port szeregowy, możesz łatwo wybrać cokolwiek innego, o ile zaprojektujesz go tak, aby dane były rozsądnie oddzielone. Wybrałem GET, ponieważ jest znajomy i solidny.

Proste testowanie…

Po flashowaniu Arduino i uruchomieniu kodu otwórz monitor szeregowy Arduino IDE. Jeśli wyślesz pojedynczy znak „H” (zapewnij jego kapitał!), otrzymasz ładunek danych. Gratulacje, to działa!

Przykładowy, asynchroniczny kolektor danych MQ-*

#włączać
int mq2 = A2;
int mq4 = A3;
int mq5 = A4;
int mq135 = A5;
int przychodzącyByte;
voidsetup() {
pinMode(mq2, WEJŚCIE);
pinMode(mq4, WEJŚCIE);
pinMode(mq5, WEJŚCIE);
pinMode (mq135, WEJŚCIE);
Serial.początek(9600);
}
/* valuePrint drukuje wartość tej etykiety.
* Tworzy tylko efekty uboczne.
*/
voidvaluePrint(String label, odczyt int) {
Serial.print(etykieta);
Serial.print("=");
Serial.print(odczyt);
}
voidloop() {
// zobacz, czy są przychodzące dane szeregowe:
jeśli (Serial.available() >0) {
// odczytaj najstarszy bajt w buforze szeregowym:
// "Kiedy wywołasz Serial.read bajt jest usuwany z bufora odbioru i zwracany do twojego kodu"
przychodząceByte = Serial.odczyt();
// jeśli jest to duże H (ASCII 72), odczytaj wartości i wyślij je do hosta Raspberry.
// DO ZROBIENIA: upewnij się, że wiadomość jest zawsze tej samej długości, za każdym razem
if (incomingByte == 72) {
int mq2Reading = analogRead(mq2);
int mq4Reading = analogRead(mq4);
int mq5Odczyt = odczyt analogowy(mq5);
int mq135Odczyt = odczyt analogowy(mq135);
Serial.print("?");
valuePrint("mq2", mq2Reading);
Serial.print("&");
valuePrint("mq4", mq4Reading);
Serial.print("&");
valuePrint("mq5", mq5Czytanie);
Serial.print("&");
valuePrint("mq135", mq135Reading);
Serial.print("\n");
}
}
// czytaj serial tylko co sekundę
opóźnienie (1000);
}

zobacz rawmain.cpp hostowany z ❤ przez GitHub

Krok 4: Kod Raspberry Pi

Teraz, gdy skonfigurowałeś Raspberry Pi zgodnie z https://dzone.com/articles/raspberry-pi-iot-sensor…, możesz teraz uruchomić kod Raspberry Client, który wyśle dane przez MQTT do naszej bazy danych, która również łączy się z Grafaną.

  1. Upewnij się, że malina jest podłączona do Internetu, a następnie wykonaj polecenie git clone, aby skopiować cały kod do Raspberry Pi. Twoje polecenie będzie wyglądać trochę tak:

    klon git

  2. W terminalu raspberry Pi wykonaj polecenie zmiany katalogu (cd) na „raspberry_client”:

    cd malina_klient.

  3. Będziesz musiał użyć środowiska wirtualnego*. Prosty. Biegać

    python3 -m venv env. Stworzy to wirtualne środowisko o nazwie „env”, którego użyjemy do zainstalowania zależności.

  4. Teraz musimy wejść do naszego wirtualnego środowiska. Biegać:

    źródło env/bin/aktywuj. Jesteś teraz gotowy do zainstalowania zależności projektu.

  5. W pakiecie, który właśnie sklonowałeś, znajduje się plik o nazwie Requirements.txt. Otwórz ten plik; zobaczysz, że potrzebujemy pakietów paho-mqtt i pyserial, a także ich odpowiednich wersji. Możesz wyświetlić zawartość pliku, uruchamiając

    kot wymagania.txt. Aby zainstalować te pakiety, ru

    pip install -r wymagania.txt.

  6. To kończy konfigurację.

Dosłownie każdy samouczek, który używa Pythona, wspomina o wirtualnym środowisku, a nawet w przypadku tego małego projektu zrobię wzmiankę. Środowiska wirtualne umożliwiają oddzielenie wersji zależności, a także oddzielenie przepływu pracy w Pythonie - to dobry sposób na uporządkowanie obszarów roboczych Pythona. Jeśli po raz pierwszy korzystasz ze środowisk wirtualnych, zapoznaj się z nimi pokrótce tutaj.

Co robi kod…

Plik client.py zaimportuje prosty zestaw bibliotek, w tym nasz własny arduinosensor. W funkcji głównej otrzymamy wartości z Arduino, opublikujemy dane do brokera MQTT, a następnie uśpimy 10 sekund.

Plik arduinosensor.py to zestaw metod pomocniczych, które otaczają bibliotekę paho.mqtt, a także dostarczają przydatny schemat komunikacji do komunikacji z ładunkiem Arduino (patrz: parse_payload). Oczywiście kod znajduje się na końcu tej sekcji.

Prosty klient, który komunikuje się z elementem arduino za pomocą monitora szeregowego. Spodziewaj się znaleźć kod tutaj, gdy zostanie opublikowany:

fromimportlibimportimport_module
ważne
czas importu
importarduinosensor
defmain():
# otwórz zdefiniowanego klienta
start_time=czas.czas()
podczas gdy prawda:
czytanie=arduinosensor.get_values(os.environ.get('PORT', "/dev/ttyUSB0"))
arduinosensor.pub("python_client", payload=odczyt)
time.sleep(10.0- ((time.time() -start_time) %10.0))
if_name_=="_main_":
Główny()

zobacz rawclient.py hostowany z ❤ przez GitHub

Krok 5: Składanie wszystkiego razem

Mamy skonfigurowany kod Raspberry Pythona i mamy skonfigurowany kod klienta Arduino. Przejdźmy do połączenia obu podmiotów razem.

Najpierw podłączmy Arduino i ustawmy poprawną konfigurację:

  1. Na terminalu Raspberry Pi uruchom

    python -m serial.tools.list_ports. Spowoduje to wyświetlenie listy wszystkich portów USB, które obsługują komunikację szeregową.

  2. Teraz podłącz swoje Arduino i poczekaj około 2 sekund, aż Raspberry go rozpozna. Wpisywanie

    python -m serial.tools.list_ports jeszcze raz pokaże ci porty. Możesz zobaczyć dodatkową listę – jeśli rzeczywiście tak jest, to ten nowy wpis jest wpisem, do którego podłączony jest twój Arduino. Prawdopodobnie będzie to „/dev/ttyUSB0”.

  3. Spróbuj uruchomić kod Pythona w środowisku wirtualnym, uruchamiając python3.7 client.py. Poczekaj kilka sekund (najwyżej dziesięć) - jeśli napotkasz wyjątek, oznacza to, że będziemy musieli zmienić wartość naszego portu komunikacyjnego na raspberry pi. Jeśli zobaczysz, że kod wyświetla wiersz rozpoczynający się od „Sent following payload:…” Wtedy dobrze będzie przejść do ostatniego kroku z Grafaną. Wskazówka: koniecznie biegnij

    ekran -S pyton przed uruchomieniem klienta Pythona, w przeciwnym razie, po zakończeniu połączenia z raspberry pi, utracisz uruchomiony program Pythona. Technicznie rzecz biorąc, nie musisz ściśle używać "pythona" jako ostatniego parametru, ale lubię odpowiednio nazywać moje sesje screena.

    1. Aby zmienić wartość portu COM, przed uruchomieniem kodu musisz ustawić zmienną środowiskową. Będziesz musiał spróbować tego dla każdej możliwej wartości wyjściowej, którą uzyskałeś podczas uruchamiania python -m serial.tools.list_ports. Na przykład, jeśli liczba wpisów, które uzyskałem, wynosiła dwa i były następujące:

      • /dev/ttyUSB6
      • /dev/acm0

wtedy polecenia, które uruchomiłbym, byłyby:

PORT="/dev/ttyUSB6" python3.7 client.py, a gdyby to nie zadziałało, później ru

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

Po wykonaniu tych kroków kod przekaże dane do naszej instancji bazy danych influxdb, która po połączeniu z Grafaną umożliwi nam przeglądanie naszego pulpitu nawigacyjnego.

Krok 6: Konfiguracja Grafana i przeglądanie pulpitu nawigacyjnego

Konfiguracja Grafana i przeglądanie pulpitu nawigacyjnego
Konfiguracja Grafana i przeglądanie pulpitu nawigacyjnego

W porządku, jesteśmy teraz w końcowej fazie! Użyjemy teraz Grafany do stworzenia prostego dashboardu.

  1. Połącz się z instancją Grafana. Ponieważ wykonałeś kroki z oryginalnego artykułu o strefie, powinieneś być w stanie zalogować się za pomocą administratora. Śmiało i zaloguj się.
  2. W lewym okienku najedź kursorem na ikonę „dashboards” – cztery kwadraty. Kliknij „Zarządzaj”.
  3. Na nowej stronie kliknij „Nowy pulpit nawigacyjny”. Następnie kliknij „Dodaj nowy panel”.
  4. Spowoduje to otwarcie edytora Grafana. Stworzymy prosty widok przedstawiający pojedyncze dane.

    1. W prawym okienku zmień tytuł panelu na coś znaczącego, na przykład „Odczyty kuchenne”. Możesz również wprowadzić opcjonalny Opis.
    2. W lewym dolnym rogu „Zapytanie” dodamy pojedynczy szereg czasowy. Grafana naprawdę błyszczy tutaj, ponieważ możemy łatwo tworzyć instrukcje SQL za pomocą interfejsu opartego na kliknięciach. W sekcji „domyślne” wybierz InfluxDB.
    3. Teraz do odczytu „A” - w klauzuli FROM wybierz pomiar „airtestt”. Jeśli spojrzysz na oryginalny kod Pythona w funkcji get_values arduinosensor.py, zobaczysz, że definiujemy tę tabelę airtestt w kodzie.
    4. Dla przykładu przejdźmy do klauzuli "SELECT" i wybierz field(mq4). Pierwotnie nasz pulpit nawigacyjny da nam wybór „średnia ()” - kliknij ten wybór i wybierz „Usuń”. następnie kliknij znak plus i w sekcji „Agregacje” wybierz „distinct()”. To pokaże określone punkty czasowe. Możemy wybrać inne miary, ale na razie nasz panel pokaże różne odczyty z mq4.
    5. Kliknij Zapisz w prawym górnym rogu i gotowe!

W przypadku problemów możesz zweryfikować swoje ustawienia z tymi na załączonym zrzucie ekranu.

Krok 7: Podsumowanie

Zakończyć
Zakończyć

W tym samouczku udało Ci się skonfigurować solidną sieć MQTT złożoną z jednego węzła i brokera. Byłeś także w stanie zwizualizować swoje dane IOT za pomocą Grafana. Wreszcie, udało Ci się skomponować tę prostą architekturę systemu z (miejmy nadzieję) komfortu przeglądarki i komputera za pomocą połączenia SSH.

Jest kilka rzeczy, które możemy chcieć poprawić.

  • Odczyty czujnika na naszym wykresie nie są w rzeczywistości dokładnymi odczytami czujnika - są to napięcie wyjściowe z naszego czujnika. Muszą być skalibrowane, więcej szczegółów znajdziesz w tym wpisie na blogu.
  • Nasza konfiguracja raspberry pi może być znacznie lżejsza, używając płytki ESP8266 podłączonej do arduino i całkowicie usuwając pi. Sprawdź wprowadzenie do modułu ESP8266.
  • Możemy chcieć dodać alerty dotyczące określonych wydarzeń. Na szczęście Grafana oferuje na to sposób.

Zostawię trochę dalszej lektury, aby zachęcić Twoją wyobraźnię do świata IOT. Nie mogę się doczekać zobaczenia w następnej instrukcji!

Dalsze lektury:

Zalecana: