RaspberryPi als Wetterstation

Erstellt am 24.03.2019 für Raspberry Pi 3 Model B. Wetterstation mit Raspberry Pi

Ziel

Wir werden eine Wetterstation bauen, basierend auf dem Bosch-Sensor BME680, welcher Lufttemperatur, Luftdruck und relative Luftfeuchte misst. Die Darstellung der Werte erfolgt übers Handy durch ansurfen einer Web-Page auf dem RaspberryPi.

Hierfür sind folgende Schritte notwendig:

  1. Installation Linux Betriegssystem und den notwendigen Programmen (Python, Spyder,...)
  2. Konfiguration Remote-Zugriff für Dateien (SFTB) und Fernwartung (RealVNC)
  3. Hardware-Konfiguration um die Schnittstelle zum BME-Sensor (I2C) und für Modubus (Seriell-UART) freizuschalten
  4. Web-Zugriff über Django-Framework

1. Installation

Mit SDformatter (geht auch für Windows10) die SD-Karte formatieren.

Installation dauert über 1 Stunde! Von www.raspberrypi.org aktuelles NOOBS „Network install only“ (nicht offline) downloaden. Voraussetzung ist Netzwerk-Zugriff. Anschliessend auf SD-Karte entpacken.

Dann SD-Karte in RaspberryPi einsetzen und starten. Zuerst Sprache Deutsch und Tastatur CH eingeben, dann WLAN verbinden. Raspbian with PIXEL (Desktop Version) ankreuzen, und „Installieren“ klicken. Fplge den Installationsanweisungen.

Wir arbeiten mit Python 3.x. Um Bibliotheken hierfür zu installieren muss darauf geachtet werden das die "3"-Version verwendet wird. Z.B. pip3 anstatt pip oder spyder3 anstatt spyder. Ohne "3" wird die Version für Python 2.x verwendet. Der Raspberry benötigt für das System beide Versionen! Standardmässig wird Python2.x verwendet. Erkennbar durch "python --version", oder man startet auf der Console "python" und führt die Division 3/2 durch. Python2.x liefert 1. Wird auf der Konsole "python3" gestartet ergibt 3/2 = 1.5.

Folgende Einstellungen bei Raspberry-Pi-Konfiguration vornehmen, über Einstellungen>Raspberry-Pi-Konfiguration>Schnittstellen mit folgenden Anpassungen:

  • Auflösung festlegen (sodass diese auch über Remote bestimmt ist)
  • aktivieren SSH (für Datei-Zugriff mit SFTP)
  • aktivieren VNC (für Remote-Desktop-Zugriff)
  • aktivieren I2C (für GPIO-Schnittstelle zum BME680 Sensor)
  • aktivieren Serial Port (für Modbus-Kommunikation mit RS485)
  • DEaktivieren Serial Console

Anschliessend werden einige Programme installiert (dauert > 30 Minuten). Hierfür verwenden wir den Linux-Package-Installer "apt-get" für die Entwicklungsumgebung Spyder:

sudo apt-get install spyder3 -y

Für die Python-Bibliotheken verwenden wir den Python-Package-Installer "pip3" (Python3):

sudo pip3 install django bokeh bme680

Django für die Web-Visualiserung, bokeh für Diagramme, sowie BME680 für den Bosch-Sensor.

Für einen Eindruck, was mit dem Bosch-Sensor möglich ist, siehe https://learn.pimoroni.com/tutorial/sandyj/getting-started-with-bme680-breakout.

2. Remotezugriff

Remotezugriff erfolgt über RealVNC-Viewer. Dieser muss auf dem PC installiert werden (download vom Internet). Für den Zugriff ist IP-Adresse, User-Name und Passwort notwendig.

IP-Adresse des RaspberryPi ermittelt man mit Konsole-Eingabe:I

ifconfig

Prüfe zuerst auf dem PC-Terminal ob eine Verpindung zum RaspberryPi vorhanden ist mit

ping [ip-Adresse]

Username: pi, Password: ??oben gewähltes passwort??

File Transfer SFTP

Um bestehende py-Skripts vom PC auf den RaspberryPi zu übertragen benötigen wir ein SFTP-Programm. Programme hierfür sind z.B. WinSCP, FileZilla, usw...

Für einen Zuriff auf den RaspberryPi sind Zugriffsdaten notwendig: Port: 22 (wichtig, weil SFTP), Username: pi, Password: ??oben gewähltes passwort?? und der Name des Host/Server, dies ist die IP-Adresse.

3. Hardware-Konfiguration

Die serielle Schnittstelle UART für Modbus ist auf den GPIO 14, 15 (Pin 8, Pin 10 des Headers). Die I2C-Kommunikation für den Bosch-Sensor ist auf den GPIO 2, 3 (Pin 3, Pin 5 des Headers).

Pin-Belegung des Headers vom RaspberryPi

Serielle Schnittstelle für GPIO mit Subplatine

MODBUS-RTU basiert auf RS485 und kann mit dem Raspberry Pi über eine USB-RS485 Schnittstelle angeprochen werden. Wir verwenden die Subplatine "WeatherShild" (hergestellt an der NTB), welche die Anbindung über die GPIOs des RPI macht. Diese ist aber standardmässig für Bluetooth (bt) vorgesehen, deshalb deaktivieren wir zuerst bt, sodass die uart für die GPIO 14, 15 frei ist.

Hierfür ist eine Anpassungen mit einem Text-Editor, in einer Konfigurations-Datei notwendig, zuerst aber "wie öffne ich ein Editor?" Terminal öffnen uns folgende Eingabe sudo geany

In der Datei /boot/config.txt am Ende der Datei folgenden Befehl ergänzen: dtoverlay=pi3-disable-bt

Anschliessend speichern und Neustarten:

sudo reboot

Nun müsste das Bluetooth-Symbol rechts oben deaktiv sein. Die Schnittstelle ist über Python erreichbar mit *** "dev/ttyAMA0" """.

4. Django

Ausgangspunkt ist das Kurs-Template von https://github.com/markstaler/4i. Hier befindet sich auch eine Dokumentation als PowerPointPräsentation. Wir erstellen die Home-Page auf dem PC, erst wenn diese vollständig abgeschlossen ist, wird sie auf den RaspberryPi kopiert.

WICHTIG beim RaspberryPi: Änderungen werden bei Django laufend übernommen. Wird aber das gesamte Projekt neu aufgesetzt (neuer Download von Git), so muss die Console geschlossen werden und neu gestartet werden, sodass nicht das alte Projekt übernommen wird (auch wenn das alte Projektverzeichnis gelöscht wurde), d.h. bei Neustart von Django immer auch die Console Neustarten.