Spisu treści:
- Krok 1: Sprzęt + Konfiguracja
- Krok 2: Konfiguracja obwodu
- Krok 3: Kod Arduino i flashowanie
- Krok 4: Kod Raspberry Pi
- Krok 5: Składanie wszystkiego razem
- Krok 6: Konfiguracja Grafana i przeglądanie pulpitu nawigacyjnego
- Krok 7: Podsumowanie
Wideo: Śledź jakość powietrza za pomocą Grafana i Raspberry Pi: 7 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:28
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
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ą.
-
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
-
W terminalu raspberry Pi wykonaj polecenie zmiany katalogu (cd) na „raspberry_client”:
cd malina_klient.
-
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.
-
Teraz musimy wejść do naszego wirtualnego środowiska. Biegać:
źródło env/bin/aktywuj. Jesteś teraz gotowy do zainstalowania zależności projektu.
-
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.
- 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ę:
-
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ą.
-
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”.
-
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.
-
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
W porządku, jesteśmy teraz w końcowej fazie! Użyjemy teraz Grafany do stworzenia prostego dashboardu.
- 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ę.
- W lewym okienku najedź kursorem na ikonę „dashboards” – cztery kwadraty. Kliknij „Zarządzaj”.
- Na nowej stronie kliknij „Nowy pulpit nawigacyjny”. Następnie kliknij „Dodaj nowy panel”.
-
Spowoduje to otwarcie edytora Grafana. Stworzymy prosty widok przedstawiający pojedyncze dane.
- W prawym okienku zmień tytuł panelu na coś znaczącego, na przykład „Odczyty kuchenne”. Możesz również wprowadzić opcjonalny Opis.
- 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.
- 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.
- 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.
- 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
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:
Śledź epidemię COVID-19 według ESP8266: 11 kroków (ze zdjęciami)
Śledź epidemię COVID-19 według ESP8266: Ten mały gadżet pomoże Ci być na bieżąco z epidemią koronawirusa i sytuacją w Twoim kraju. Jest to projekt oparty na IoT, który wyświetla w czasie rzeczywistym dane dotyczące przypadków, zgonów i osób odzyskanych przez koronawirusa (COVID-19)
Wykrywanie zanieczyszczenia powietrza + filtracja powietrza: 4 kroki
Wykrywanie zanieczyszczenia powietrza + filtracja powietrza: Studenci (Aristobulus Lam, Victor Sim, Nathan Rosenzweig i Declan Loges) z German Swiss International School pracowali z personelem MakerBay nad stworzeniem zintegrowanego systemu pomiaru zanieczyszczenia powietrza i skuteczności filtracji powietrza. Ten
Zmierz jakość powietrza: 17 kroków
Pomiar jakości powietrza: Jakość powietrza i drobne cząstki: Cząstki zawieszone (oznaczone jako „PM” dla „cząstek stałych”) to zazwyczaj drobne cząstki stałe przenoszone przez powietrze (Wikipedia). Drobne cząsteczki wnikają głęboko do płuc. Mogą powodować
Cyfrowe Szachy - Śledź swoją grę w szachy online: 5 kroków
Cyfrowe szachy – śledź swoją grę w szachy online: Od najmłodszych lat grałem dużo w szachy, a ponieważ w sieci jest mnóstwo stron internetowych, na których można grać w szachy z komputerami lub żywymi przeciwnikami, ani razu nie znalazłem strony internetowej który śledzi twoją partię szachów, w którą faktycznie grasz
Kontroler Arduino HRV (domowy wymiennik powietrza) z ekonomizerem powietrza: 7 kroków (ze zdjęciami)
HRV (Home Air Exchanger) Kontroler Arduino z ekonomizerem powietrza: Kontroler HRV Arduino z ekonomizerem powietrza Moja historia z tym projektem polega na tym, że mieszkam w Minnesocie, a moja płytka drukowana jest smażona na moim LifeBreath 155Max HRV. Nie chciałem płacić 200 USD za nowy. Zawsze chciałem coś z grzechem ekonomizera powietrza