Spisu treści:

Lokalna stacja pogodowa: 8 kroków (ze zdjęciami)
Lokalna stacja pogodowa: 8 kroków (ze zdjęciami)

Wideo: Lokalna stacja pogodowa: 8 kroków (ze zdjęciami)

Wideo: Lokalna stacja pogodowa: 8 kroków (ze zdjęciami)
Wideo: 10 Ekstremalnych zjawisk w Polsce 2024, Lipiec
Anonim
Lokalna stacja pogodowa
Lokalna stacja pogodowa

Ponieważ szukałem świetnego projektu do mojego pierwszego roku szkolnego, miałem wiele pomysłów na to, co zrobić, ale żaden z nich nie był dla mnie wyzwaniem.

Później pomyślałem o zrobieniu Stacji Pogodowej, która miałaby w sobie coś specjalnego. Chciałem mieć możliwość przechowywania wszystkich moich danych i późniejszego wykorzystania ich do statystyk. Ten projekt byłby specjalnie stworzony dla osób, które interesują się meteorologią i chcą stworzyć w domu stację pogodową, która nie kosztuje tyle, co dostępne na rynku. Projekt ma również na celu zachowanie możliwości dodawania lub usuwania czujników w dowolnym momencie.

Bardzo się ucieszyłem, gdy zobaczyłem mój wynik końcowy, który okazał się lepszy niż oczekiwałem.

Wykonany jest z Raspberry Pi 4 z systemem Linux.

  • Witryna Apache (html css js)
  • Eventlet (strona serwera zaplecza)
  • MariaDB (serwer bazy danych)

Kieszonkowe dzieci

  • Raspberry Pi 4:

    karta SD (min. 16 GB)

  • Czujniki:

    1. Czujnik prędkości wiatru QS-FS
    2. Czujnik wiatru Wyjście sygnału ogrodowego Stop aluminium Czujnik kierunku wiatru Przyrząd do pomiaru prędkości wiatrowskazu -Przyrząd-pomiarowy-p-1624988.html?rmmds=myorder&cur_warehouse=CN
    3. DHT22 (wilgotność)
    4. BMP280 (ciśnienie powietrza)
    5. DS18B20 (temperatura)
  • Zasilacz

    • Zasilanie 5V (RPi)
    • Zasilanie 9v (na zewnętrznym zasilaczu płytki stykowej)
  • Deska do krojenia chleba (x2)

    T-cobbler plus do RPi 4

  • przewody połączeniowe
  • IC

    • MCP3008
    • PCF8574AN
  • Wyświetlacz LCD 16x2
  • LED (czerwony
  • Obudowa (opcjonalnie)

    • skrzynki na wino
    • słup drewniany (2m)
    • deska drewniana (1m)

Krok 1: Przygotowanie rzeczy

Zawsze bardzo ważne jest zdobycie wszystkich potrzebnych elementów przed rozpoczęciem pracy nad krokiem. Dzięki temu zaoszczędzisz dużo czasu podczas pracy.

Więc najpierw

Czego potrzebujesz:

  • Raspberry Pi 4:

    karta SD (min. 16 GB)

  • Czujniki:

    1. Czujnik prędkości wiatru QS-FS
    2. Czujnik wiatru Wyjście sygnału ogrodowego Czujnik kierunku wiatru ze stopu aluminium Przyrząd do pomiaru prędkości wiatrowskazu
    3. DHT22 (wilgotność)
    4. BMP280 (ciśnienie powietrza)
    5. DS18B20 (temperatura)
  • Zasilacz

    • Zasilanie 5V (RPi)
    • Zasilanie 9v (na zewnętrznym zasilaczu płytki stykowej)
  • Deska do krojenia chleba (x2)
  • T-cobbler plus do RPi 4
  • przewody połączeniowe
  • IC

    • MCP3008
    • PCF8574AN
  • Wyświetlacz LCD 16x2
  • LED (czerwony)
  • Obudowa (opcjonalnie)

    • skrzynki na winodrewniane
    • deska drewniana (1m)
    • słup (2m)

Możesz znaleźć wszystkie linki, w których je kupiłem, w sekcji materiałów eksploatacyjnych pod wprowadzeniem.

Krok 2: Konfiguracja RPi

Konfiguracja RPi
Konfiguracja RPi

Do naszego projektu potrzebujemy RPi z zainstalowanym danym oprogramowaniem.

  • Witryna Apache (html css js)
  • Flask Socket-IO (strona internetowa serwera zaplecza)
  • MariaDB (serwer bazy danych)

Przed instalacją zawsze warto się upewnić, że masz zainstalowane najnowsze oprogramowanie na swoim RPi. Aby to zrobić, po prostu wykonaj następujące polecenie:

aktualizacja sudo apt

Apache:

Najpierw porozmawiajmy o Apache. Apache to serwer WWW używany na całym świecie. Działa bezbłędnie na Twojej stronie. Jedyne, co musisz zrobić, to zainstalować i umieścić swoją witrynę w odpowiednim folderze i tam jest.

sudo apt zainstaluj apache2 -y

Otóż to!

Aby upewnić się, że wszystko jest poprawnie zainstalowane, przejdź do adresu IP raspberry pi w przeglądarce i sprawdź, czy masz domyślną stronę internetową. Jeśli masz jakiekolwiek problemy z tym krokiem, możesz sprawdzić stronę RPi tutaj.

Eventlet:

Teraz zainstalujmy Eventlet. Uruchomi nasz serwer zaplecza i nawiąże połączenie z naszych czujników do naszej strony internetowej. Do tego potrzebujemy kilku pakietów.

Gniazdo kolby IO:

pip3 zainstaluj kolbę-socketio

Eventlet:

pip3 install eventlet

Gewent:

pip3 instalacja gevent

Mariadb:

Mariadb to baza danych oparta na MySQL, która tworzy relacyjne bazy danych. Jest często używany w RPi i dlatego w Internecie można znaleźć wiele pomocy. Więcej informacji znajdziesz pod tym linkiem.

apt install mariadb-server

Krok 3: Podłączanie czujników i dodawanie kodu

Podłączanie czujników i dodawanie kodu
Podłączanie czujników i dodawanie kodu
Podłączanie czujników i dodawanie kodu
Podłączanie czujników i dodawanie kodu
Podłączanie czujników i dodawanie kodu
Podłączanie czujników i dodawanie kodu

Do podłączenia czujników do naszego RPi możemy użyć T-Cobblera plus. Jest to poręczne małe narzędzie, które umożliwia użycie wszystkich pinów na RPi na płytce stykowej.

W moim projekcie mam 5 czujników:

  1. Czujnik prędkości wiatru QS-FS
  2. Czujnik wiatru Wyjście sygnału ogrodowego Czujnik kierunku wiatru ze stopu aluminium Przyrząd do pomiaru prędkości wiatrowskazu
  3. DHT22 (wilgotność)
  4. BMP280 (ciśnienie powietrza)
  5. DS18B20 (temperatura)

Czujnik prędkości wiatru:

Po pierwsze wszystko, co zacząłem od czujnika prędkości wiatru, ponieważ byłem najbardziej podekscytowany tym czujnikiem. Jest to czujnik z sygnałem analogowym na wyjściu 0-5V i potrzebuje do pracy napięcia minimum 7V. Wybieram zasilacz 9 woltów, aby go zasilić.

Do odczytu tego czujnika użyłem MCP3008, który jest układem scalonym do odczytu sygnałów analogowych. IC może pracować na 3,3 V lub 5 V, ale wybrałem 3,3 V, aby był kompatybilny z RPi. Oznaczało to, że musiałem zmienić napięcie wyjściowe z 5V na 3,3V. Zrobiłem to dodając dzielnik napięcia utworzony przez 2 rezystory (2k i 1k ohm).

Czujnik kierunku wiatru:

Kierunek wiatru jest tak samo ważny jak prędkość wiatru, więc połączę to dalej.

Ten czujnik ma taką samą specyfikację jak czujnik prędkości wiatru. Będzie również działał na 9V i ma napięcie wyjściowe 5 woltów. Również ten czujnik połączymy z MCP3008 za pomocą dzielnika napięcia.

DHT22 (wilgotność):

DHT22 odczytuje wilgotność. Podaje wartość w procentach, a jej wartość można odczytać za pomocą protokołu I2C na RPi. Dlatego musisz włączyć porty I2C w Raspi-config. Więcej informacji tutaj.

BMP280 (ciśnienie powietrza):

BMP280 służy do odczytu ciśnienia powietrza. Jego wartość jest odczytywana przez magistralę SPI na RPi. Ten protokół również musi być włączony w Raspi-config. Do mojego kodu użyłem biblioteki Adafruit.

DS18B20 (temperatura):

Ostatni czujnik mierzy temperaturę. ten czujnik jest z Dallas i jeśli miałeś małe doświadczenie z Dallas, prawdopodobnie powinieneś już wiedzieć, że używają one magistrali 1Wire. Nie zdziw się, jeśli powiem, że ten protokół również musi być włączony w Raspi-config.

Jak podłączyłem czujniki:

Jako pdf wrzuciłem schemat elektryczny i płytki stykowej, aby było trochę łatwiej.

Po pomyślnym podłączeniu czujników i dodaniu kodu wymaganego do odczytania wszystkich czujników możesz przejść do następnego kroku. Jeśli chcesz zostawić czujnik lub chcesz dodać więcej, możesz to zrobić.

Krok 4: Projektowanie interfejsu internetowego

Projektowanie interfejsu internetowego
Projektowanie interfejsu internetowego
Projektowanie interfejsu internetowego
Projektowanie interfejsu internetowego
Projektowanie interfejsu internetowego
Projektowanie interfejsu internetowego

Teraz podłączyliśmy czujniki, potrzebujemy projektu naszej strony internetowej.

Chcemy, aby strona internetowa tworzyła łatwy wygląd, wyświetlając wszystkie dane z czujników w czasie rzeczywistym.

Chcemy również móc zobaczyć historię tych zmierzonych wartości w przedziale czasowym.

Więc najpierw zacząłem rozglądać się po sieci w poszukiwaniu inspiracji. Przede wszystkim tam, gdzie tylko strony z informacją o pszenice bez tak naprawdę projektu, którego szukałem. Stacje pogodowe, które były już na rynku, najprawdopodobniej miały wyświetlacz. I z tego pokazu wyszła moja inspiracja. Większość wyświetlaczy ma wygląd siatki. To dało mi pomysł na stworzenie strony głównej, na której byłyby wyświetlane wszystkie czujniki.

Ale powiedziałem też, że chciałem zrobić stronę, na której można zobaczyć historię każdego czujnika jego wartości.

Z tego powodu stworzyłem również drugą stronę w moim projekcie zawierającą to. Na tej stronie mogłem zobaczyć dodatkowe informacje o moim czujniku, które nie byłyby wyświetlane na mojej stronie głównej i oczywiście w części historycznej.

Po kilku godzinach opracowałem cały projekt!

Projekt został wykonany w programie Adobe XD.

Krok 5: Tworzenie bazy danych

Tworzenie bazy danych
Tworzenie bazy danych

Aby odpocząć od części projektowej, zacząłem od pracy w mojej bazie danych.

Ta baza danych zawierałaby wszystkie czujniki (5), wszystkie siłowniki (2) oraz wartości, które miały te czujniki.

Baza danych jest dość prosta i ma kilka relacji.

Na zdjęciu model bazy danych.

Krok 6: Kodowanie strony internetowej: Frontend (html Css)

Powrót do strony internetowej!

Teraz mam projekt, który mogę zacząć kodować jako html css, aby naprawdę z niego korzystać.

Na stronie głównej:

Zacząłem od rozważenia każdego czujnika jako elementu na mojej stronie internetowej. Abym mógł później pozwolić tej części wygenerować przez mój kod JavaScript.

Do elementów wstawiłem również losowe klasy JS-holder. Umożliwiłoby to zmianę zawartości tego elementu

Zajęło mi to dużo czasu, ponieważ nie jestem zbyt dobry w tym konkretnym języku.

Po zrobieniu strony domowej nadszedł czas, aby zacząć od strony historii.

Na stronie historii:

Ta strona była nieco łatwiejsza do odtworzenia. Na tej stronie były również uchwyty js, aby uzyskać informacje o czujniku, slot wartości w czasie rzeczywistym i wyświetlić tabelę ze wszystkimi zmierzonymi wartościami.

Aby utworzyć opcję tabulatora na mojej stronie, aby wybrać między tabelą a wykresem, musiałem dodać trochę JavaScript, aby elementy się nie wyświetlały lub nie wyświetlały.

Teraz mamy wspaniałą stronę internetową, ale nie możemy na niej nic pokazać? Naprawmy to.

Możesz znaleźć mój kod w moim repozytorium github:

Krok 7: Kodowanie strony internetowej: Backend (eventlet) + Coding Frontend (javascript)

Zaplecze:

Chociaż serwer zaplecza jest już zainstalowany, nadal musimy to zaimplementować w naszym projekcie. Najpierw musimy dodać kilka importów, aby wszystko działało poprawnie.

z flask import Flask, request, jsonify z flask_socketio import SocketIO z flask_cors import CORS

Aby serwer się uruchomił, musimy dodać:

socketio.run(aplikacja, debug=Fałsz, host='0.0.0.0')

Teraz serwer jest online, ale nie będzie mógł komunikować się z frontendem.

Niczego nie otrzymuje ani nie zwraca. Zmieńmy to.

Aby zapytać o wszystkie czujniki w bazie danych dodamy trasę:

@app.route(endpoint + '/sensors', method=['GET']) def get_sensors(): if request.method == 'GET': s = DataRepository.get_sensors() return jsonify(sensors=s), 200

Ten kod używa klasy o nazwie DataRepository i mówi do bazy danych. Tutaj zwraca nam czujniki, o które prosiliśmy.

Potrzebujemy również trasy do zapytania o 1 konkretny czujnik i drugiego o wartości danego czujnika.

To wszystko są trasy, ale po to, aby umożliwić dostęp do danych w czasie rzeczywistym. W każdym interwale musimy wysyłać dane, które właśnie odczytały czujniki. W tym celu korzystamy z połączenia Socket-IO. Jest to połączenie nawiązywane od momentu załadowania strony internetowej za pomocą JS i utrzymuje to połączenie otwarte. Jest to połączenie pełnodupleksowe, co oznacza, że jest to połączenie działające jednocześnie w obie strony (wysyłanie i odbieranie). Aby z tego skorzystać, musimy dodać następujący kod.

@socketio.on('connect') def initial_connection(): print('Połączenie nowego klienta') socketio.send("Ubent geconnecteerd") # # Wyślij do klienta!

Ten fragment kodu jest uruchamiany, gdy łączy się klient.

Aby otrzymać dowolną wiadomość z frontendu, możesz użyć tego kodu.

@socketio.on('wiadomość') def message_recieved(): pass

Możesz także wysyłać wiadomości. Odbywa się to w następujący sposób.

socketio.emit('Aktualizuj_RTD', dict_results, transmisja=prawda)

Pierwszym podanym argumentem może być cokolwiek chcesz, ale będzie odpowiadał temu, co umieściłeś w swoim JS i możesz również wysyłać z nim obiekty. Jest to opcjonalne.

JavaScript:

Ważne jest, aby dodać trochę JS, aby serwer był połączony z serwerem zaplecza, aby móc wyświetlać bieżące dane i pobierać informacje z bazy danych.

Wywołamy funkcje socketIO, które stworzyliśmy, aby odbierać i wysyłać dane.

Kiedy otrzymamy dane jako Json Object, zdemontujemy je, aby uzyskać żądane informacje, a następnie umieścimy je w uchwytach JS, które umieściliśmy na naszej stronie internetowej.

Możesz znaleźć mój kod w moim repozytorium github:

Krok 8: Wykonanie obudowy

Wykonanie obudowy
Wykonanie obudowy
Wykonanie obudowy
Wykonanie obudowy
Wykonanie obudowy
Wykonanie obudowy
Wykonanie obudowy
Wykonanie obudowy

Obudowa zajęła dużo pracy i można ją wykonać w dowolny sposób. Tak to zrobiłem.

Wziąłem kilka skrzynek na wino.

Jeden z nich wykorzystałem jako pudełko do przechowywania mojego RPi i większości moich czujników.

Czujnik prędkości wiatru i czujnik kierunku wiatru oczywiście nie zostały umieszczone wewnątrz, ale na poprzeczce umieszczonej na słupie. Na tym słupie zawiesiłem tę skrzynkę na wino, do której też zrobiłem drzwi.

Możesz zobaczyć, jak zakończyłem mój projekt, patrząc na zdjęcia.

To oczywiście przykład, jak możesz to zrobić. Możesz z tym zrobić, co chcesz.

Zalecana: