Zbuduj własną stację pogodową Raspberry Pi

Zbuduj własną stację pogodową Raspberry Pi
Raspberry Pi Sense Hat to dodatkowa płyta, której można używać z komputerami Raspberry Pi. Czapka Raspberry Pi Sense ma wyświetlacz LED 8 × 8 i joystick 5-przyciskowy, i jest wyposażony w następujące czujniki:
  1. Żyroskop
  2. Akcelerometr
  3. Magnetometr
  4. Temperatura
  5. Ciśnienie barometryczne
  6. Wilgotność

W tym artykule pokażę, jak stworzyć aplikację internetową opartą na API Python API za pomocą temperatura, ciśnienie barometryczne, I wilgotność czujniki kapelusza malinowego Pi. Aby śledzić ten artykuł, będziesz potrzebować następujących:

  1. A Raspberry Pi 3 lub Raspberry Pi 4 z łącznością sieciową.
  2. Moduł kapeluszu Raspberry Pi Sense.
  3. Adapter zasilający Micro-USB (Raspberry PI 3) lub USB type-C (Raspberry Pi 4).
  4. Karta microSD 16 GB lub 32 GB z Raspberry Pi OS.
  5. Laptop lub komputer stacjonarny do zdalnego dostępu do pulpitu VNC lub dostępu do Raspberry Pi.

NOTATKA: W tym artykule połączymy się z Raspberry Pi zdalnie za pośrednictwem VNC lub SSH za pomocą bezgłowej konfiguracji Raspberry Pi. Jeśli nie chcesz zdalnie uzyskiwać dostępu do Raspberry Pi za pośrednictwem SSH lub VNC, musisz podłączyć monitor, klawiaturę i mysz do Raspberry Pi.

Aby dowiedzieć się, jak flashować obraz Raspberry Pi OS na karcie microSD, odwołaj się do instalacji i użycia Raspberry Pi Imager. Jeśli potrzebujesz pomocy w zainstalowaniu Raspberry Pi OS na Raspberry Pi, przeczytaj, jak zainstalować Raspberry Pi OS na Raspberry Pi 4. Jeśli potrzebujesz pomocy z bezgłową konfiguracją Raspberry Pi, sprawdź, jak zainstalować i skonfigurować Raspberry Pi OS na Raspberry Pi 4 bez monitora zewnętrznego.

Łączenie czapki Raspberry Pi Sense z Raspberry Pi

Kit Raspberry Pi Sense Hat Kit jest wyposażony w tablicę Raspberry Pi Sense Hat, 40-pinowy nagłówek mężczyzn do kobiet oraz niektóre śruby i przekładki.

Zanim będziesz mógł przymocować deskę do czapki do Raspberry Pi, musisz podłączyć 40-pinowy nagłówek z kapeluszem zmysłowym. Połącz męskie szpilki 40-pinowego nagłówka męskiego-płciowego z kapeluszem sensownym, jak pokazano na poniższych obrazach.

Komputery jednokierunkowe Raspberry Pi mają 4 otwory, które można użyć do podłączania płyt dodatkowych lub obudowy. Aby przymocować płytę dodatkową, wstaw śruby z tyłu Raspberry Pi, jak pokazano na poniższych obrazach.

Następnie podłącz przekładkę do śruby.

Po dodaniu wszystkich czterech śrub i przekładek, twój Raspberry Pi powinien wyglądać jak pokazane na poniższym obrazku.

Podłącz czapkę Raspberry Pi Sense z 40-stykowym męskim nagłówkiem GPIO Raspberry Pi, jak pokazano na poniższych zdjęciach.

NOTATKA: Zachowaj ostrożność, odłączając czapkę Raspberry Pi Sense od 40-pinowego nagłówka GPIO Raspberry PI, aby uniknąć zginania szpilek Raspberry Pi GPIO.

Z czterem pozostałymi śrubami, zapiąż czapkę Raspberry Pi Sense, jak pokazano na poniższych obrazach.

Zasilanie na malinach pi

Teraz, gdy czapka Raspberry Pi Sense jest podłączona do Raspberry Pi, włóż kartę MicroSD z Raspberry Pi OS do gniazda karty MicroSd w Raspberry Pi, podłącz kabel zasilania do Raspberry Pi i włącz ją.

Instalowanie biblioteki Raspberry Pi Sense Hat Python

Aby użyć czapki Raspberry Pi Sense na Raspberry Pi, Sense-hat Biblioteka Pythona musi być zainstalowana na systemie Raspberry Pi. Sense-hat Biblioteka jest dostępna w oficjalnym repozytorium pakietów Raspberry Pi OS.

Aby zainstalować Raspberry Pi Sense-hat Biblioteka Python w systemie OS Raspberry Pi, najpierw zaktualizuj pamięć podręczną repozytorium pakietów Apt za pomocą następującego polecenia:

Aktualizacja $ sudo apt

Następnie uruchom następujące polecenie:

$ sudo apt instal instaluj sens -hat -y

Instalowanie biblioteki Flask Micro Web Framework Python

Użyjemy frameworku Flask Python, aby stworzyć naszą aplikację pogodową. Możesz zainstalować kolbę z oficjalnego repozytorium pakietu Raspberry Pi OS za pomocą następującego polecenia:

$ sudo apt instal Python3 -flash -y

Tworzenie katalogu projektów

Dobrym pomysłem jest utworzenie katalogu projektu w celu zorganizowania plików projektu. Aby utworzyć katalog projektu ~/praca, Użyj następującego polecenia:

$ mkdir ~/work

Po utworzeniu katalogu projektu przejdź do katalogu projektu w następujący sposób:

$ CD ~/Work

Testowanie czapki Raspberry Pi Sense

Aby sprawdzić, czy Raspberry Pi Sense działa, możemy napisać prosty skrypt testowy Python. Możesz stworzyć nowy skrypt Python o nazwie test.py z Nano Edytor tekstu w następujący sposób:

Test $ nano.py

Wprowadź następujący kod w test.py plik. Import linii 1 Sensehat z sens_hat moduł, wiersz 3 tworzy Sensehat obiekt i przechowuje odniesienie w sens zmienne, a linie 5-6 ustawiają kolor wszystkich diod LED 8 × 8 na czerwony. Po zakończeniu naciśnij + X śledzony przez Y I .

Możesz uruchomić test.py Skrypt Pythona z następującym poleceniem:

$ Python3 Test.py

Matryca LED 8 × 8 powinna świecić w kolorze czerwonym, jak pokazano na poniższym obrazku.

Aby wyłączyć diody LED kapelusza, uruchom jasne() metoda bez żadnej wartości koloru w test.py Skrypt Pythona, jak pokazano na zrzucie ekranu poniżej, i uruchom test.py Skrypt Pythona ponownie.

Diody LED kapelusza sensownego powinny być teraz wyłączone, jak pokazano na poniższym obrazku.

Jeśli kapelusz zmysłowy działa poprawnie, przejdź do następnej sekcji.

Uzyskanie danych pogodowych z Sense Hat

Możesz uzyskać dane czujnika z czapki sensownej, używając Sense-hat Biblioteka Python. Aby pobrać dane czujnika z kapelusza sensownego, możesz utworzyć nowy skrypt Python read_sensor_data.py następująco:

$ nano read_sensor_data.py

Wprowadź następujący kod w read_sensor_data.py Plik Python.

z sense_hat import sensehat
Od czasu importuj sen
sens = senshat ()
sens.jasne()
Choć prawda:
TEMPC = zmysł.get_temperature ()
TEMPF = TEMPC * (9/5) + 32
presja = zmysł.get_pressure ()
wilgotność = zmysł.get_humididge ()
Drukuj („Temperatura: %.2F ° C/%.2f ° F \ n " % (tempc, tempf))
Drukuj („Presja: %.2F MB \ N " % (ciśnienie))
Drukuj („wilgotność: %.2f %% \ n \ n "%(wilgotność))
sen (5)

Po zakończeniu naciśnij + X śledzony przez Y I .

W powyższym kodzie wiersze 1 i 2 importują wszystkie wymagane biblioteki, wiersz 4 tworzy Sensehat obiekt, a linia 5 wyłącza wszystkie diody LED kapelusza sensownego za pomocą jasne() metoda. While Loop w wierszu 7 to nieskończona pętla, która na zawsze uruchomi kod w wierszach 8-16.

W linii 8, get_temperature () Metoda jest stosowana do odczytu danych temperatury (w stopniach Celsjusza) z czujnika wilgotności kapelusza sensownego. W linii 9 dane temperatury są konwertowane z stopni Celsjusza do stopni Fahrenheita. W linii 10, get_pressure () Metoda jest stosowana do odczytu danych ciśnienia powietrza (w milibarach) z czujnika ciśnienia kapelusza zmysłowego. W linii 11, get_humididge () Metoda jest stosowana do odczytu danych wilgotności (w %) z czujnika wilgotności kapelusza.

Linie 13-15 służą do wydrukowania danych czujnika do konsoli, a linia 16 służy do czekającego 5 sekund przed ponownym przeczytaniem danych czujnika.

Możesz uruchomić read_sensor_data.py Skrypt Pythona w następujący sposób:

$ Python3 Read_Sensor_Data.py

Po uruchomieniu skryptu dane czujnika zostaną wydrukowane na konsolę.

Teraz, gdy możemy odczytać dane czujnika z kapelusza zmysłowego, naciśnij + C Aby zatrzymać program.

Tworzenie aplikacji internetowej stacji pogodowej

W tej sekcji pokażemy, jak korzystać z frameworka Web Flask Python, aby stworzyć interfejs API pogody i aplikację pogodową. Aplikacja pogodowa będzie dostępna do interfejsu API danych pogodowych i pokazuje dane pogodowe w czasie rzeczywistym. Cały kod omawiany w tej sekcji jest dostępny na GitHub w SHOVON8/RASPBERRY-PI-SENSE-HAT-HAT-WEATHE-APPA.

Najpierw stwórz serwer.py Skrypt Pythona w katalogu projektu w następujący sposób:

$ Nano Server.py

Wprowadź następujący kod w serwer.py Plik Python.

z kolby importowej kolby
z Fled Import Jsonify
z kolby importowej render_template
z kolb Import URL_FOR
z sense_hat import sensehat
App = Flask (__ name__)
App.config ['send_file_max_age_default'] = 0
sens = senshat ()
sens.jasne()
z aplikacją.test_request_context ():
url_for („statyczny”, nazwa pliku = styl.CSS ')
url_for („statyczny”, nazwa pliku = 'aplikacja.JS ')
@App.trasa ('/api')
def api ():
TEMPC = zmysł.get_temperature ()
TEMPF = TEMPC * (9/5) + 32
presja = zmysł.get_pressure ()
pressssi = ciśnienie * 0.0145038
ciśnienie = ciśnienie * 100
wilgotność = zmysł.get_humididge ()
zwróć jsonify (
„Temperatura”: „c”: tempc, „f”: tempf,
„Ciśnienie”: „MB”: ciśnienie, „HPA”: ciśnienie,
„PSI”: pression, „p”: preshp,
„wilgotność”: wilgotność
)
@App.trasa('/')
def home ():
return render_template ('./dom.html ')

Następnie naciśnij + X śledzony przez Y I Aby uratować serwer.py Skrypt Pythona.

W powyższym kodzie wiersze 1-5 importują wszystkie wymagane biblioteki, wiersz 7 tworzy aplikację Flask, wiersz 11 tworzy obiekt sensehat, a wiersz 12 wyłącza wszystkie diody LED kapelusza zmysłowego. Linia 8 wyłącza buforowanie internetowe dla aplikacji Flask. Ponieważ ta aplikacja jest lekka, nie ma potrzeby buforowania. Jeśli chcesz zmodyfikować aplikację, wyłączenie buforowania internetowego ułatwi testowanie.

Linie 18-31 Przeczytaj dane czujnika z kapelusza sensownego i zwróć dane API w formacie JSON w HTTP GET WISHT w /API punkt końcowy serwera internetowego. Linie 37-39 Zwróć stronę główną aplikacji Weather Web App na / punkt końcowy serwera internetowego. Strona główna jest renderowana z dom.html plik, który powinien być w szablony/ katalog katalogu projektu.

Linie 14-16 są używane, aby umożliwić dostęp do styl.CSS I App.JS pliki statyczne. Te pliki powinny być w statyczny/ katalog katalogu projektu. styl.CSS Plik służy do stylizowania dom.html Strona główna i App.JS Plik służy do żądania danych API z /API punkt końcowy i zaktualizuj dane pogodowe na dom.html strona co 5 sekund.

Utwórz statyczny/ I szablony/ Katalog w katalogu projektu w następujący sposób:

$ mkdir -v statyczne, szablony

Stwórz dom.html plik w szablony/ katalog w następujący sposób:

szablony $ nano/dom.html

Wprowadź następujący kod w dom.html plik.





Stacja pogodowa Raspberry Pi
href = "url_for ('static', filename =" styl.css ")"/>



Stacja pogodowa Raspberry Pi



Temperatura












Ciśnienie




















Wilgotność











Następnie naciśnij + X śledzony przez Y I Aby uratować dom.html plik.

Stwórz styl.CSS plik w statyczny/ katalog w następujący sposób:

$ nano statyczny/styl.CSS

Wprowadź następujące kody w styl.CSS plik.

@Import URL („https: // czcionki.Googleapis.COM/CSS2?Family = Roboto & Display = swap ');
*
Wyściółka: 0;
Margines: 0;
Font-Family: „Roboto”, bez Serif;

ciało
Tło: #737373;

H1
Blok wyświetlacza;
Kolor: #79DC7B;
Text-Align: Center;
Font-Waight: 400;
Tło: #000;
Wyściółka: 0.5em 0;

H2
Blok wyświetlacza;
Tło: #000;
kolor: #fff;
Text-Align: Center;
Font-Waight: 400;
Rozmiar czcionki: 1em;

.data-content
Margines: 10px;
Border: 2px Solid Black;
RADIUS BERDER: 5px;
kolor tła: #79DC7B;

.Data Row
Wyświetlacz: Flex;
Flex-direction: Row;

.komórek danych
szerokość: 100%;
Wysokość: 80px;
Wyświetlacz: Flex;
Wyrównanie: Center;
Justify-Content: Center;
Font-Weight: Bold;
Rozmiar czcionki: 1.5em;
Kolor: #006902;

.Komórka danych: Hover
Tło: #ffe891;
Kolor: #AA8600;
Kursor: wskaźnik;

Następnie naciśnij + X śledzony przez Y I Aby uratować styl.CSS plik.

Stworzyć App.JS plik w statyczny/ katalog w następujący sposób:

$ nano static/app.JS

Wprowadź następujący kod w App.JS plik.

okno.addEventListener („ładuj”, main);
funkcja main ()
funkcja getapidata ()
var http = new xmlhttprequest ();
http.onReadyStateChange = function ()
Jeśli to.ReadyState === 4 && to.status === 200)
Aktualizacja (JSON.Parse (to.Respontext));


http.Open („get”, „/api”, true);
http.wysłać();

aktualizacja funkcji (apidata)
var tempc = dokument.getElementById („TEMPC”);
var tempf = dokument.getElementById („TEMPF”);
var pressureremb = dokument.getElementById („presjonat”);
var pressionssi = dokument.getElementById („pressionssi”);
var preshhhpa = dokument.getElementById („preshhhpa”);
var preshp = dokument.getElementById („preshp”);
var wilgotność = dokument.getElementById („wilgotność”);
TEMPC.innerhtml = parsefloat (apidata.temperatura.C).tofixed (2) + „° C”;
TEMPF.innerhtml = parsefloat (apidata.temperatura.F).tofixed (2) + „° F”;
preseremb.innerhtml = parsefloat (apidata.ciśnienie.MB).tofixed (2) + „MB”;
pression.innerhtml = parsefloat (apidata.ciśnienie.psi).tofixed (2) + „psi”;
ciśnienie.innerhtml = parsefloat (apidata.ciśnienie.HPA).tofixed (2) + „hpa”;
presja.innerhtml = parsefloat (apidata.ciśnienie.P).tofixed (2) + „p”;
wilgotność.innerhtml = parsefloat (apidata.wilgotność).tofixed (2) + „ %”;

funkcja app ()
okno.setInterval (function ()
getapidata ();
, 5000);

app ();

Następnie naciśnij + X śledzony przez Y I Aby uratować App.JS plik.

Tutaj linia 1 działa główny() Funkcja, gdy strona internetowa kończy ładowanie. w główny() funkcja, getapidata () funkcja pobiera dane interfejsu API pogody za pomocą AJAX i wywołuje aktualizacja() funkcja (w wierszu 10) Po pomyślnym pobraniu danych. aktualizacja() Funkcja aktualizuje element strony internetowej za pomocą danych API.

W linii 20, dokument.getElementById () Metoda służy do uzyskania odniesienia elementu strony internetowej z identyfikatorem TEMPC. Wiersz 28 służy do zastąpienia zawartości elementu strony internetowej, który ma identyfikator TEMPC z temperaturą (w Celsjuszu) z API. W ten sam sposób zawartość wszystkich elementów internetowych (wiersze 21-26) jest zastąpiona odpowiednimi danymi API.

w App () funkcja, getapidata () nazywane jest co 5 sekund (5000 milisekund), aby uzyskać aktualne dane pogodowe w aplikacji pogodowej. Wreszcie, w linii 46, App () funkcja jest wykonywana.

Aby przetestować aplikację internetową, wprowadź następujące polecenie:

$ Flask_app = serwer.Py Flask Run - -Host = 0.0.0.0

Aplikacja pogodowa powinna działać na porcie 5000 (domyślnie).

Aby sprawdzić, czy API pogody działa, uruchom następujące polecenie:

$ curl -s http: // localhost: 5000/API | JSON_PP

Jak widać, dane API pogody są drukowane na konsolę. Dlatego API działa.

Aby przetestować aplikację pogodową, odwiedź http: // localhost: 5000 z przeglądarki internetowej chromu. Aplikacja pogodowa powinna zostać załadowana do przeglądarki internetowej, ale początkowo nie należy wyświetlać żadnych danych pogodowych.

Po kilku sekundach aplikacja pogodowa powinna zakończyć pobieranie danych pogodowych z interfejsu API i wyświetlić je.

W dowolnym momencie możesz nacisnąć + C Aby zatrzymać serwer WWW.

Tworzenie usługi SystemD dla aplikacji Weather Web

W tej sekcji pokażemy, jak utworzyć plik serwisowy SystemD dla aplikacji pogodowej, aby automatycznie zaczął się po uruchomieniu.

Najpierw stwórz stacja pogodowa.praca Plik w katalogu projektu w następujący sposób:

$ nano stacja pogodowa.praca

Wprowadź następujące wiersze kodu w stacja pogodowa.praca plik.

[Jednostka]
Opis = Aplikacja internetowa Raspberry Pi Station za pomocą Raspberry Pi Sense Hat
Po = sieć.cel
[Praca]
WorkingDirectory =/Home/Pi/Work
Środowisko = flask_app = serwer.py
Środowisko = flask_env = produkcja
ExecStart =/usr/bin/folask Run - -Host = 0.0.0.0
Standardoutput = dziedzictwo
Standarderror = dziedzictwo
Restart = zawsze
Użytkownik = PI
[Zainstalować]
Wantby = Multi-User.cel

Następnie naciśnij + X śledzony przez Y I Aby uratować stacja pogodowa.praca plik.

Skopiuj stacja pogodowa.praca plik do /etc/systemd/system/ Katalog z następującym poleceniem:

$ sudo cp -V stacja pogodowa.serwis/etc/systemd/system/

Załaduj ponownie demony systemowe, aby zmiany w następują w następujący sposób:

$ sudo systemctl demon-powód

stacja pogodowa Usługa systemu powinna być obecnie nieaktywna, jak pokazano na zrzucie ekranu poniżej.

$ sudo systemCTL Status stacja pogodowa.praca

Zacząć stacja pogodowa Usługa z następującym poleceniem:

$ sudo systemctl start stacja pogodowa.praca

Jak widać, stacja pogodowa Usługa działa teraz.

$ sudo systemCTL Status stacja pogodowa.praca

Teraz, że stacja pogodowa Usługa działa, możesz dodać ją do uruchamiania systemu Raspberry Pi OS z następującym poleceniem:

$ sudo systemctl włącza stację pogodową.praca

Uruchom ponownie Raspberry Pi z następującym poleceniem:

$ sudo restart

Gdy twoje raspberry pi buty, stacja pogodowa Usługa powinna być uruchomiona, jak pokazano na zrzucie ekranu poniżej.

$ sudo systemCTL Status stacja pogodowa.praca

Dostęp do aplikacji pogodowej z innych urządzeń

Aby uzyskać dostęp do aplikacji pogodowej z innych urządzeń w sieci domowej, musisz znać adres IP swojego Raspberry Pi. Adres IP swojego Raspberry Pi 4 z interfejsu zarządzania internetem routera domowego. W naszym przypadku adres IP to 192.168.0.103, ale ten adres będzie dla Ciebie inny.

Jeśli masz dostęp do konsoli Raspberry Pi, możesz uruchomić następujące polecenie, aby znaleźć również adres IP.

$ hostName -i

Gdy znasz adres IP swojego Raspberry Pi, możesz uzyskać do niego dostęp z dowolnego urządzenia w sieci domowej. Jak pokazano na zrzucie ekranu poniżej, uzyskaliśmy dostęp do aplikacji pogodowej ze smartfona z Androidem.

Wniosek

W tym artykule pokazaliśmy, jak używać czapki Raspberry Pi Sense, aby zbudować stację pogodową Raspberry Pi. Użyliśmy Sense-hat Biblioteka Pythona w celu wyodrębnienia danych pogodowych z kapelusza Raspberry Pi Sense. Następnie użyliśmy frameworka Web Python Python Python, aby stworzyć interfejs API pogody i aplikację internetową. Aplikacja internetowa otrzymuje dane pogodowe z interfejsu API pogody co 5 sekund, aby aktualizować aplikację internetową z najnowszymi danymi pogodowymi.