Raspberry Pi Mod 3B:    Sensor BME 280
 

 
Sensorplatine Watterott mit dem Sensor BME 280 von Bosch

Der Sensor BME280 mißt den Luftdruck, die Luftfeuchte sowie die Temperatur ..
Temperatur Bereich: -40 bis +85°C
Luftdruck Bereich: 300 - 1100hPa (+9000m bis -500m oberhalb/unterhalb der Meereshöhe)
Luftfeuchte: Antwortzeit: 1s  /  Genauigkeit: +/- 3% relativ  /  Hysterese: +/- 1% relativ
Datenblatt von Bosch.pdf
 
Die gezeigte Platine der Fa. Watterott Electronik kann mit einer Spannung zwischen 3,3V bis 5V betrieben werden. Sie besitzt ein SPI- sowie ein I2C- Interface. Die Beschaltung des I2C-Interface ist im obigen Bild eingezeichnet. Hierbei ist zu bemerken, dass die Signalleitungen SC und SD0 durch interne Pull-Up Widerstände, also ohne externe Beschaltung ein log 1 Signal führen, womit an CS der I2C-Bus eingeschaltet ist, Dessen Adresse würde ohne Beschaltung von SD0(=1) 0x77 lauten. Bei der vorliegenden Beschaltung wurde durch eine Brücke am Jumper J1 und daraus folgend SD0=0 die Adresse auf 0x76 eingestellt.
 
Herkunft des Sensors: www.watterott.com/de/BME280-Breakout
Anmerkung zum Luftdruck (Deutschland):
  Hochdruck (Höchster gemessener Luftdruck: 1057,8 hPa am 23.1.1907 in Berlin)
  Normaldruck Meereshöhe 1013 hPa
  Tiefdruck (Niedrigster gemessener Luftdruck: 948,6 hPa am 26.2.1989 in Osnabrück)


Programm für den Rasbberry Pi 2/3
 
Das Ziel der folgenden Programme ist ein Autostart des Programms bme280.py beim Hochfahren des Raspberry Pi, so dass es unsichtbar im Hintergrund seine Messungen vollzieht, ..um diese dem Apache2 -Server bereitzustellen. Um dennoch Eingriffe in seine Steuerung vornehmen und seine Meßergebnisse auf dem Raspberry Pi ansehen zu können wurde das Programm bme280_start hinzugefügt.

Das Programm: bme280.py
Das in der beigefügten Datei abgelegte python-Programm wurde im Kern auf der Internetseite .. 
www.teknology-inside.de/raspberry-pi-bme280-ueber-i2c-ansteuern
.. gefunden und folgend so erweitert, dass es in einer unendlichen Schleife alle n Sekunden den Sensor abfragt. Seine Meßwerte werden in der Kontrolldatei bme280.txt abgelegt, ebenso wie die ID sowie die Version des angeschlossenen BME280 Sensors und der Laufzustand des Programms. Beträgt dessen Wert 0, startet das Programm bei einem Aufruf. Ist dessen Wert 1, so wird das Programm nicht gestartet. Oder anders, nachdem das Programm einmal gestartet wurde kann es kein 2.mal gestartet werden.
Die Programmdatei bme280.py und seine Kontrolldatei bme280.txt müssen sich im gleichen Verzeichnis (im Beispiel /usr/ befinden.

  .. die Kontrolldatei bme280.txt
Die als Beispiel ebenfalls angefügte Kontrolldatei muß zum Betrieb des Programms bme280.py zumindestens angelegt, und durch sudo chmod 666 /usr/bme280.txt für alle Benutzer zum Lesen und Schreiben verfügbar gemacht worden sein. (Die Datei darf ansonsten leer sein, denn sie wird beim Start des Programms neu aufgebaut)

nach diesen Vorbereitungen kann das Programm bme280.py durch ..
python /usr/bme280.py
.. im LXTerminal gestartet werden. Hier werden auch einige Ausgaben angezeigt.
.. der Programmlauf wird unterbrochen, wenn in der ersten Zeile der Kontrolldatei bme280.txt, anstelle der 1, eine 0 eingefügt wird.
 

Das Steuerprogramm bme280_start.py
 
 

Um die Bedienung des Programms bme280.py zu vereinfachen, sowie seine Meßwerte formatiert sichtbar zu gestalten, wurde das Programm bme280_start.py entwickelt. Es erzeugt auf dem Bildschirm des Raspberry Pi ein Fenster, in welchem das Programm mit [Buttons] angehalten und gestartet werden kann, und seine Meßwerte im gewählten Zeitintervall zu sehen sind.
 
Auch wenn dieses Programm durch [Quit] beendet wird, arbeitet das Programm bme280.py weiter .. wenn es nicht durch [BME anhalten] abgebrochen wurde.
 

Der Autostart von bme280.py nach dem Start des Raspberry Pi
Soll das Programm bme280.py nach dem Einschalten des Paspberry Pi automatisch gestartet werden, so gelingt dies über einen Eintrag in der Datei /etc/rc.local .. kurz vor deren Ende, welches durch die Zeile exit 0 gekennzeichnet ist.
 
 
nano /etc/rc.local
In der Datei rc.local vor „exit 0“ folgende Zeile einfügen.
 
# Nach einer Wartezeit von 60s wird das Programm bme280.py gestartet.
# Dieser Zeitraum sollte sicherstellen, dass der Raspberry einen NTP-Server nach
# der aktuellen Zeit abgefragt hat.

/bin/sleep 60 && python /usr/bme280.py -1 &
exit 0
 
/bin/sleep 60 bewirkt, dass bis zum Start des Programms 60s gewartet wird
python /usr/bme280.py -1 startet dann das Programm bme280 und übergibt ihm den Wert -1. Dadurch wird das Programm zwingend neu gestartet .. wobei in diesem Fall darauf zu achten ist, dass eine vollständige bme280.txt mit 6 Zeilen vorliegt .. die entsprechend der Startzeit modifiziert werden.
 
Das abschließende & -Zeichen bewirkt, dass die rc.local weiter abgearbeitet und nicht darauf gewartet wird, dass das Script ausgeführt wurde. Ein Script mit Endlosschleife würde sonst den Startvorgang des Pi dauerhaft aufhängen.

Kontrollen
ls -l /usr/
Zeigt die Zugriffsrechte im Verzeichnis /usr/
chmod +x /usr/bme280_start.py
führt zu: -rwxr-xr-x
Die Ausführbarkeits-Rechte des Programms bme280_start.py für alle Benutzer setzen.
chmod 666 /usr/bme280.txt
führt zu: -rwxrw-rw
Wie bereits angemerkt, ist darauf zu achten, dass die Benutzer der CTRLdatei 'bme280.txt' Lese und Schreibrechte für sie besitzen. Die Datei kann nun auch von einem .php-Script ausgelesen werden, und durch den Apache-Server im Netzwerk verbreitet werden.
Gleiches gilt für die SAVEdatei '20XX-TMP.txt' wenn sie als leere Datei angelegt und durch zimmertemperatur = 0 freigegeben wurde.
shutdown -r 0
Rechner neu starten
ps -ef | grep python
Kontrolle ob das Programm gestartet ist/wurde..
Der Befehl ps -ef | grep python führt bei Erfolg zu einer Ausgabe wie..
pi   4573 3890  16 20:30 pts1        00:00:05 python /usr/bme280.py