Himbeer-Pi

Bauen Sie Ihre eigene Raspberry Pi Wetterstation

Bauen Sie Ihre eigene Raspberry Pi Wetterstation
Raspberry Pi Sense Hat ist eine Zusatzplatine, die mit Raspberry Pi-Einplatinencomputern verwendet werden kann. Der Raspberry Pi Sense Hat verfügt über ein 8×8 LED-Display und einen 5-Tasten-Joystick und ist mit folgenden Sensoren ausgestattet:

  1. Gyroskop
  2. Beschleunigungsmesser
  3. Magnetometer
  4. Temperatur
  5. Luftdruck
  6. Feuchtigkeit

In diesem Artikel zeige ich Ihnen, wie Sie eine Python-API-basierte Wetterstations-Webanwendung erstellen, indem Sie die Temperatur, Luftdruck, und Feuchtigkeit Sensoren des Raspberry Pi Sense Hat. Um diesem Artikel zu folgen, benötigen Sie Folgendes:

  1. Ein Raspberry Pi 3 oder Raspberry Pi 4 mit Netzwerkkonnektivität.
  2. Ein Raspberry Pi Sense Hat-Modul.
  3. Ein Micro-USB (Raspberry Pi 3) oder USB Typ-C (Raspberry Pi 4) Netzteil.
  4. Eine 16-GB- oder 32-GB-microSD-Karte mit Raspberry Pi OS.
  5. Ein Laptop oder ein Desktop-Computer für VNC-Remote-Desktop-Zugriff oder SSH-Zugriff auf den Raspberry Pi.

HINWEIS: In diesem Artikel werden wir uns über VNC oder SSH aus der Ferne mit dem Raspberry Pi verbinden, indem wir das Headless-Setup des Raspberry Pi verwenden. Wenn Sie nicht per SSH oder VNC auf Ihren Raspberry Pi zugreifen möchten, müssen Sie einen Monitor, eine Tastatur und eine Maus an Ihren Raspberry Pi anschließen.

Um zu erfahren, wie Sie das Raspberry Pi OS-Image auf eine microSD-Karte flashen, lesen Sie bitte So installieren und verwenden Sie Raspberry Pi Imager. Wenn Sie Hilfe bei der Installation von Raspberry Pi OS auf Ihrem Raspberry Pi benötigen, lesen Sie So installieren Sie Raspberry Pi OS auf Raspberry Pi 4. Wenn Sie Hilfe bei der kopflosen Einrichtung von Raspberry Pi benötigen, lesen Sie So installieren und konfigurieren Sie das Raspberry Pi-Betriebssystem auf dem Raspberry Pi 4 ohne externen Monitor.

Raspberry Pi Sense Hat mit Raspberry Pi verbinden

Das Raspberry Pi Sense Hat-Kit wird mit der Raspberry Pi Sense Hat-Zusatzplatine, einem 40-poligen Stecker-zu-Buchse-Header sowie einigen Schrauben und Abstandshaltern geliefert.

Bevor Sie das Sense-Hat-Board an den Raspberry Pi anschließen können, müssen Sie den 40-Pin-Header mit dem Sense-Hat verbinden. Verbinden Sie die männlichen Stifte des 40-poligen Stift-Buchse-Headers mit dem Sense Hat, wie in den Bildern unten gezeigt.

Raspberry Pi Einplatinencomputer haben 4 Löcher, die verwendet werden können, um Zusatzplatinen oder ein Gehäuse zu befestigen. Um die Zusatzplatine zu befestigen, setzen Sie die Schrauben von der Rückseite des Raspberry Pi ein, wie in den Bildern unten gezeigt.

Verbinden Sie dann einen Abstandshalter mit der Schraube.

Sobald Sie alle vier Schrauben und Abstandshalter hinzugefügt haben, sollte Ihr Raspberry Pi so aussehen, wie im Bild unten gezeigt.

Verbinden Sie den Raspberry Pi Sense Hat mit dem 40-poligen GPIO-Stecker des Raspberry Pi, wie in den Bildern unten gezeigt.

HINWEIS: Seien Sie vorsichtig, wenn Sie den Raspberry Pi Sense Hat vom Raspberry Pi 40-Pin GPIO-Header trennen, um ein Verbiegen der Pins des Raspberry Pi GPIO zu vermeiden.

Mit den vier verbleibenden Schrauben befestigen Sie den Raspberry Pi Sense Hat, wie in den Bildern unten gezeigt.

Einschalten des Raspberry Pi

Nachdem der Raspberry Pi Sense Hat mit dem Raspberry Pi verbunden ist, stecken Sie die microSD-Karte mit Raspberry Pi OS in den microSD-Kartensteckplatz des Raspberry Pi, schließen Sie das Stromkabel an den Raspberry Pi an und schalten Sie ihn ein.

Installieren der Raspberry Pi Sense Hat Python-Bibliothek

Um Raspberry Pi Sense Hat auf dem Raspberry Pi zu verwenden, Sinn-Hut Die Python-Bibliothek muss auf dem Raspberry Pi OS installiert sein. Das Sinn-Hut Bibliothek ist im offiziellen Paket-Repository von Raspberry Pi OS verfügbar.

So installieren Sie den Raspberry Pi Sinn-Hut Python-Bibliothek auf dem Raspberry Pi OS aktualisieren Sie zuerst den APT-Paket-Repository-Cache mit dem folgenden Befehl:

$ sudo apt-Update

Führen Sie dann den folgenden Befehl aus:

$ sudo apt install sense-hat -y

Installieren der Flask Micro Web Framework Python-Bibliothek

Wir werden das Flask Python-Framework verwenden, um unsere Wetteranwendung zu erstellen. Sie können Flask aus dem offiziellen Paket-Repository von Raspberry Pi OS mit dem folgenden Befehl installieren:

$ sudo apt install python3-flask -y

Erstellen eines Projektverzeichnisses

Es ist eine gute Idee, ein Projektverzeichnis zu erstellen, um Ihre Projektdateien zu organisieren. So erstellen Sie ein Projektverzeichnis ~/arbeite, verwenden Sie den folgenden Befehl:

$ mkdir ~/work

Nachdem das Projektverzeichnis erstellt wurde, navigieren Sie wie folgt zum Projektverzeichnis:

$ cd ~/arbeit

Testen des Raspberry Pi Sense Hat

Um zu testen, ob der Raspberry Pi Sense Hat funktioniert, können wir ein einfaches Python-Testskript schreiben. Sie können ein neues Python-Skript namens . erstellen Prüfung.py mit dem nano Texteditor wie folgt:

$ Nanotest.py

Geben Sie den folgenden Code in das ein Prüfung.py Datei. Zeile 1 importiert SinnHat von dem Sinn_hat Modul, Zeile 3 erzeugt a SinnHat Objekt und speichert eine Referenz im in Sinn variabel und die Zeilen 5-6 setzen die Farbe aller 8×8 LEDs auf Rot. Wenn Sie fertig sind, drücken Sie + X gefolgt von Ja und .

Sie können die Prüfung.py Python-Skript mit folgendem Befehl:

$ python3-Test.py

Die 8×8 LED-Matrix sollte in roter Farbe leuchten, wie im Bild unten gezeigt.

Um die LEDs des Sense Hat auszuschalten, führen Sie den klar() Methode ohne Farbwert im Prüfung.py Python-Skript, wie im Screenshot unten gezeigt, und führen Sie das Prüfung.py Nochmal Python-Skript.

Die LEDs der Sense Hat sollten nun ausgeschaltet sein, wie im Bild unten gezeigt.

Wenn der Sense Hat ordnungsgemäß funktioniert, fahren Sie mit dem nächsten Abschnitt fort.

Abrufen von Wetterdaten von Sense Hat

Sie können Sensordaten von der Sense Hat ganz einfach erhalten, indem Sie die Sinn-Hut Python-Bibliothek. Um Sensordaten vom Sense Hat abzurufen, können Sie ein neues Python-Skript erstellen read_sensor_data.py wie folgt:

$ nano read_sensor_data.py

Geben Sie den folgenden Code in die ein read_sensor_data.py Python-Datei.

from sense_hat import SenseHat
ab zeit importieren schlaf
Sinn = SinnHat()
Sinn.klar()
während Wahr:
tempC = Sinn.get_temperatur()
tempF = tempC * (9/5) + 32
Druck = Sinn.get_pressure()
Feuchtigkeit = Sinn.get_humidity()
print("Temperatur: %.2f°C/%.2f°F\n" % (tempC, tempF))
print("Druck: %.2f mb\n" % (Druck))
print("Luftfeuchtigkeit: %.2f%%\n\n" % (Luftfeuchtigkeit))
schlafen(5)

Wenn Sie fertig sind, drücken Sie + X gefolgt von Ja und .

Im obigen Code importieren die Zeilen 1 und 2 alle erforderlichen Bibliotheken, Zeile 4 erstellt a SinnHat Objekt und Zeile 5 schaltet alle LEDs der Sense Hat mit den Tasten . aus klar() Methode. Die while-Schleife in Zeile 7 ist eine Endlosschleife, die den Code in den Zeilen 8-16 für immer ausführt.

In Zeile 8, die get_temperatur() Methode wird verwendet, um die Temperaturdaten (in Grad Celsius) vom Feuchtigkeitssensor der Sense Hat auszulesen. In Zeile 9 werden die Temperaturdaten von Grad Celsius in Grad Fahrenheit umgerechnet. In Zeile 10, die get_pressure() Methode wird verwendet, um die Luftdruckdaten (in Millibar) vom Drucksensor der Sense Hat . auszulesen. In Zeile 11 die get_humidity() Methode wird verwendet, um die Feuchtigkeitsdaten (in %) vom Feuchtigkeitssensor der Sense Hat auszulesen.

Die Zeilen 13-15 werden verwendet, um die Sensordaten an die Konsole zu drucken, und die Zeile 16 wird verwendet, um 5 Sekunden zu warten, bevor die Sensordaten erneut gelesen werden.

Sie können die read_sensor_data.py Python-Skript wie folgt:

$ python3 read_sensor_data.py

Sobald das Skript ausgeführt wurde, werden die Sensordaten an die Konsole gedruckt.

Da wir nun die Sensordaten vom Sense Hat lesen können, drücken Sie + C um das Programm zu stoppen.

Erstellen einer Wetterstation-Web-App

In diesem Abschnitt zeigen wir Ihnen, wie Sie mit dem Python Flask-Webframework eine Wetter-API und eine Wetteranwendung erstellen create. Die Wetteranwendung greift auf die Wetterdaten-API zu und zeigt die Wetterdaten in Echtzeit an. Der gesamte in diesem Abschnitt besprochene Code ist auf GitHub unter shovon8/raspberry-pi-sense-hat-weather-app verfügbar.

Erstellen Sie zuerst a Server.py Python-Skript im Projektverzeichnis wie folgt:

$ Nano-Server.py

Geben Sie den folgenden Code in die ein Server.py Python-Datei.

aus Flaschenimport Flasche
aus Kolbenimport jsonify
aus Kolbenimport render_template
aus Kolbenimport-URL_for
from sense_hat import SenseHat
app = Flasche(__name__)
App.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
Sinn = SinnHat()
Sinn.klar()
mit App.test_request_context():
url_for('static', filename='style.css')
url_for('static', filename='app.js')
@app.route('/api')
def api():
tempC = Sinn.get_temperatur()
tempF = tempC * (9/5) + 32
Druck = Sinn.get_pressure()
DruckPsi = Druck * 0.0145038
DruckP = Druck * 100
Feuchtigkeit = Sinn.get_humidity()
jsonify(
"temperatur": "C": tempC, "F": tempF ,
"Druck": "mb": Druck, "hPa": Druck,
"psi": DruckPsi, "P": DruckP ,
"Luftfeuchtigkeit": Feuchtigkeit
)
@app.Route('/')
def home():
return render_template('./Zuhause.html')

Dann drücken + X gefolgt von Ja und um die zu retten Server.py Python-Skript.

Im obigen Code importieren die Zeilen 1-5 alle erforderlichen Bibliotheken, Zeile 7 erstellt eine Flask-App, Zeile 11 erstellt ein SenseHat-Objekt und Zeile 12 schaltet alle LEDs der Sense-Hat aus. Zeile 8 deaktiviert Web-Caching für die Flask-App. Da diese App leichtgewichtig ist, ist kein Caching erforderlich. Wenn Sie die App ändern möchten, wird das Testen viel einfacher, wenn das Web-Caching deaktiviert ist.

Die Zeilen 18-31 lesen die Sensordaten aus dem Sense Hat und geben die API-Daten im JSON-Format auf eine HTTP GET-Anfrage im . zurück /api Endpunkt des Webservers. Die Zeilen 37-39 geben die Wetter-Web-App-Homepage auf der / Endpunkt des Webservers. Die Homepage wird gerendert aus dem Zuhause.html Datei, die in der Vorlagen/ Verzeichnis des Projektverzeichnisses.

Die Zeilen 14-16 werden verwendet, um den Zugriff auf die Stil.CSS und App.js statische Dateien. Diese Dateien sollten in der statisch/ Verzeichnis des Projektverzeichnisses. Das Stil.CSS Datei wird verwendet, um die Zuhause.html Homepage und die App.js Datei wird verwendet, um die API-Daten von der /api Endpunkt und aktualisieren Sie die Wetterdaten auf dem Zuhause.html Seite alle 5 Sekunden.

Erstellen Sie die statisch/ und Vorlagen/ Verzeichnis im Projektverzeichnis wie folgt:

$ mkdir -v statisch,Vorlagen

Ein ... kreieren Zuhause.html Datei in der Vorlagen/ Verzeichnis wie folgt:

$ Nano-Vorlagen/Startseite.html

Geben Sie den folgenden Code in das ein Zuhause.html Datei.





Raspberry Pi Wetterstation
href=" url_for('static', filename="style.css") "/>



Raspberry Pi Wetterstation



Temperatur












Druck




















Feuchtigkeit











Dann drücken + X gefolgt von Ja und um die zu retten Zuhause.html Datei.

Ein ... kreieren Stil.CSS Datei in der statisch/ Verzeichnis wie folgt:

$ nano statisch/stil.CSS

Geben Sie die folgenden Codes in die ein Stil.CSS Datei.

@import-URL('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
*
Polsterung: 0;
Rand: 0;
Schriftfamilie: 'Roboto', serifenlos;

Körper
Hintergrund: #737373;

h1
Bildschirmsperre;
Farbe: #79DC7B;
Textausrichtung: Mitte;
Schriftstärke: 400;
Hintergrund: #000;
Polsterung: 0.5em 0;

h2
Bildschirmsperre;
Hintergrund: #000;
Farbe: #fff;
Textausrichtung: Mitte;
Schriftstärke: 400;
Schriftgröße: 1em;

.Dateninhalt
Rand: 10px;
Rand: 2px einfarbig schwarz;
Randradius: 5px;
Hintergrundfarbe: #79DC7B;

.Datenzeile
Anzeige: flexibel;
Flex-Richtung: Reihe;

.Datenzelle
Breite: 100 %;
Höhe: 80px;
Anzeige: flexibel;
Ausrichten-Elemente: Mitte;
rechtfertigen-Inhalt: Mitte;
Schriftdicke: fett;
Schriftgröße: 1.5em;
Farbe: #006902;

.Datenzelle:hover
Hintergrund: #FFE891;
Farbe: #AA8600;
Cursor: Zeiger;

Dann drücken + X gefolgt von Ja und um die zu retten Stil.CSS Datei.

Erstelle ein App.js Datei in der statisch/ Verzeichnis wie folgt:

$ nano statisch/app.js

Geben Sie den folgenden Code in die ein App.js Datei.

Fenster.addEventListener('load', main);
Funktion main()
Funktion getAPIData()
var http = new XMLHttpRequest();
http.onreadystatechange = Funktion ()
wenn (dieses.readyState === 4 && this.Status === 200)
aktualisieren (JSON.analysieren (diese.Antworttext));


http.open("GET", "/api", true);
http.senden();

Funktionsupdate (apiData)
var tempC = Dokument.getElementById("tempC");
var tempF = Dokument.getElementById("tempF");
var DruckMb = Dokument.getElementById("DruckMb");
var DruckPsi = Dokument.getElementById("DruckPsi");
var DruckHpa = Dokument.getElementById("DruckHpa");
var DruckP = Dokument.getElementById("DruckP");
var Luftfeuchtigkeit = Dokument.getElementById("Luftfeuchtigkeit");
tempC.innerHTML = parseFloat(apiData.Temperatur.C).toFest(2) + "°C";
tempF.innerHTML = parseFloat(apiData.Temperatur.F).toFixed(2) + "°F";
DruckMb.innerHTML = parseFloat(apiData.Druck.mb).toFixed(2) + "mb";
DruckPsi.innerHTML = parseFloat(apiData.Druck.psi).toFixed(2) + "psi";
DruckHpa.innerHTML = parseFloat(apiData.Druck.hPa).toFixed(2) + " hPa";
DruckP.innerHTML = parseFloat(apiData.Druck.P).toFixed(2) + "P";
Feuchtigkeit.innerHTML = parseFloat(apiData.Feuchtigkeit).toFixed(2) + " %";

Funktion app()
Fenster.setInterval(Funktion()
getAPIData();
, 5000);

app();

Dann drücken + X gefolgt von Ja und um die zu retten App.js Datei.

Hier führt Linie 1 die Main() Funktion, wenn die Webseite fertig geladen ist. In dem Main() Funktion, die getAPIData() Funktion ruft die Wetter-API-Daten mit AJAX ab und ruft die aktualisieren() Funktion (in Zeile 10) nach erfolgreichem Datenabruf. Das aktualisieren() Funktion aktualisiert das Webseitenelement mithilfe der API-Daten.

In Zeile 20, die Dokument.getElementById() -Methode wird verwendet, um die Referenz des Webseitenelements mit der ID zu erhalten tempC. Zeile 28 wird verwendet, um den Inhalt des Webseitenelements mit der ID zu ersetzen tempC mit der Temperatur (in Celsius) aus der API. Ebenso werden die Inhalte aller Webelemente (Zeilen 21-26) durch ihre jeweiligen API-Daten ersetzt.

In dem app() Funktion, die getAPIData() wird alle 5 Sekunden (5000 Millisekunden) aufgerufen, um die Wetterdaten in der Wetter-App aktuell zu halten. In Zeile 46 schließlich die app() Funktion wird ausgeführt.

Geben Sie zum Testen der Web-App den folgenden Befehl ein:

$ FLASK_APP=Server.py Kolbenlauf --host=0.0.0.0

Die Wetter-App sollte auf Port 5000 laufen (standardmäßig).

Führen Sie den folgenden Befehl aus, um zu testen, ob die Wetter-API funktioniert:

$ curl -s http://localhost:5000/api | json_pp

Wie Sie sehen, werden die Wetter-API-Daten an die Konsole gedruckt. Daher funktioniert die API.

Um die Wetter-App zu testen, besuchen Sie http://localhost:5000 in einem Chromium-Webbrowser. Die Wetter-App sollte im Webbrowser geladen sein, aber zunächst sollten keine Wetterdaten angezeigt werden.

Nach einigen Sekunden sollte die Wetter-App das Abrufen der Wetterdaten von der API beenden und anzeigen.

Sie können jederzeit drücken + C um den Webserver zu stoppen.

Systemd-Dienst für die Wetter-Web-App erstellen

In diesem Abschnitt zeigen wir Ihnen, wie Sie eine systemd-Dienstdatei für die Wetter-App erstellen, damit diese beim Booten automatisch gestartet wird.

Erstellen Sie zuerst a Wetterstation.Bedienung Datei in Ihrem Projektverzeichnis wie folgt:

$ Nano-Wetterstation.Bedienung

Geben Sie die folgenden Codezeilen in das Wetterstation.Bedienung Datei.

[Einheit]
Description=Raspberry Pi Weather Station Web App mit Raspberry Pi Sense Hat
Nach=Netzwerk.Ziel
[Bedienung]
WorkingDirectory=/home/pi/work
Umgebung=FLASK_APP=Server.py
Umgebung=FLASK_ENV=Produktion
ExecStart=/usr/bin/flask run --host=0.0.0.0
StandardOutput=vererben
StandardError=vererben
Neustart = immer
Benutzer=pi
[Installieren]
WantedBy=Mehrbenutzer.Ziel

Dann drücken + X gefolgt von Ja und um die zu retten Wetterstation.Bedienung Datei.

Kopiere das Wetterstation.Bedienung Datei an die /etc/systemd/system/ Verzeichnis mit folgendem Befehl:

$ sudo cp -v Wetterstation.service /etc/systemd/system/

Laden Sie die systemd-Daemons neu, damit die Änderungen wie folgt wirksam werden:

$ sudo systemctl daemon-reload

Das Wetterstation Der systemd-Dienst sollte im Moment inaktiv sein, wie im Screenshot unten gezeigt.

$ sudo systemctl status Wetterstation.Bedienung

Starte das Wetterstation Dienst mit folgendem Befehl:

$ sudo systemctl Wetterstation starten.Bedienung

Wie Sie sehen können, ist die Wetterstation Dienst läuft jetzt.

$ sudo systemctl status Wetterstation.Bedienung

Jetzt, da die Wetterstation Dienst funktioniert, können Sie ihn mit dem folgenden Befehl zum Systemstart von Raspberry Pi OS hinzufügen:

$ sudo systemctl Wetterstation aktivieren.Bedienung

Starten Sie Ihren Raspberry Pi mit dem folgenden Befehl neu:

$ sudo Neustart

Sobald Ihr Raspberry Pi bootet, ist die Wetterstation Dienst sollte ausgeführt werden, wie im Screenshot unten gezeigt.

$ sudo systemctl status Wetterstation.Bedienung

Zugriff auf die Wetter-App von anderen Geräten aus

Um von anderen Geräten in Ihrem Heimnetzwerk auf die Wetter-App zugreifen zu können, müssen Sie die IP-Adresse Ihres Raspberry Pi kennen. Die IP-Adresse Ihres Raspberry Pi 4 finden Sie in der Web-Management-Oberfläche Ihres Heimrouters. In unserem Fall lautet die IP-Adresse 192.168.0.103, aber diese Adresse wird für Sie anders sein, also stellen Sie sicher, dass Sie diese Adresse in allen folgenden Schritten durch Ihre ersetzen.

Wenn Sie Zugriff auf die Raspberry Pi-Konsole haben, können Sie den folgenden Befehl ausführen, um auch die IP-Adresse zu finden.

$ Hostname -I

Sobald Sie die IP-Adresse Ihres Raspberry Pi kennen, können Sie von jedem Gerät in Ihrem Heimnetzwerk darauf zugreifen. Wie im Screenshot unten gezeigt, haben wir von einem Android-Smartphone auf die Wetter-App zugegriffen.

Fazit

In diesem Artikel haben wir Ihnen gezeigt, wie Sie mit dem Raspberry Pi Sense Hat eine Raspberry Pi Wetterstation bauen. Wir haben die benutzt Sinn-Hut Python-Bibliothek zum Extrahieren von Wetterdaten aus dem Raspberry Pi Sense Hat. Dann haben wir das Flask Python Micro-Web-Framework verwendet, um eine Wetter-API und eine Webanwendung zu erstellen. Die Web-App ruft die Wetterdaten alle 5 Sekunden von der Wetter-API ab, um die Web-App mit den neuesten Wetterdaten auf dem neuesten Stand zu halten.

Schlacht um Wesnoth 1.13.6 Entwicklung veröffentlicht
Schlacht um Wesnoth 1.13.6, das letzten Monat veröffentlicht wurde, ist die sechste Entwicklungsversion im 1.13.x-Serie und bietet eine Reihe von Verb...
So installieren Sie League of Legends auf Ubuntu 14.04
Wenn Sie ein Fan von League of Legends sind, dann ist dies eine Gelegenheit für Sie, League of Legends zu testen. Beachten Sie, dass LOL von PlayOnLin...
Installieren Sie das neueste OpenRA-Strategiespiel auf Ubuntu Linux
OpenRA ist eine Libre/Free Real Time Strategy Game Engine, die die frühen Westwood-Spiele wie den Klassiker Command & Conquer: Red Alert Red nachbilde...