Wetterstation mit ESP8266 und BME280

Rainer Rainer Follow Jan 29, 2017 · 4 mins read
Wetterstation mit ESP8266 und BME280
Share this

Mein erstes Projekt mit dem ESP8266 ist eine Wetterstation. Im Detail lese ich dazu einen sogenannten „environmental sensor“ aus und publishe die Daten per MQTT. Ich verwende als ESP8266 Board das „Wit Cloud Development Board“. Das gab es vor kurzem recht günstig bei Gearbest zu kaufen, ist kompakt und es besteht aus einem Programmer Board und einem ESP8266 Board. Hier findet ihr ein kleines Review darüber. Beim Sensor habe ich mich für einen Bosch BME280 entschieden. Der ist gut über Ebay zu bestellen und kann mit I2C ausgelesen werden.

Vorbereitung

Hardware

ESP8266 Board mit USB Programmer oder integrierter Schnittstelle (Wit Cloud Development Board, nodemcu, …). BME280 Breakout Board Steckplatine mit Verbindern oder Verbindungskabel um das BME280 Breakout Board mit dem ESP8266 Modul zu verbinden. Die Versorgungsspannung (VDD/VCC) und GND müssen entsprechend zwischen dem ESP8266 Boards und dem BME280 Board verbunden werden. SCL muss mit GPIO0, SDA mit GPIO2 verbunden werden.

Software

Um MQTT nutzen benötigt man einen MQTT Broker. Meine bevorzugte Variante dafür ist mosquitto auf einem Linux Server zu installieren. Das kann man zu Hause z.B. auf einem Raspi oder PINE64 machen oder auf einem VPS wenn verfügbar.
Dazu z.B. unter Ubuntu das Paket mosquitto installieren :

sudo apt install mosquitto

Dann muss man die mosquitto config anpassen:

sudo nano /etc/mosquitto/mosquitto.conf

Da ich derzeit auf dem ESP8266 keine SSL Zertifikate verwende muss man die Zeile

listener 1883 127.0.0.1

in

listener 1883

ändern, damit Verbindungen von „außen“ zugelassen werden.

Zusätzlich legt man mit

mosquitto_passwd -c /etc/mosquitto/passwd things

einen neuen Nutzer an. Ich habe ihn things genannt. Kann man aber natürlich frei wählen. Falls man weitere Nutzer anlegen möchte muss man die Option -c weglassen, da die ein neues password file anlegt und das alte wenn vorhanden überschreibt. Jetzt noch den mosquitto Server mit

sudo service mosquitto restart

neu starten.
Falls man die Möglichkeit nicht hat einen eigenen mosquitto Server einzurichten, dann gibt es auch Anbieter bei denen man einen MQTT Broker bekommen kann – einfach mal googeln.

Um den ESP8266 zu programmieren verwende ich, das Sming Framework. Dort habe ich im Eclipse um ein neues Projekt anzulegen einfach das MqttClient_Hello kopiert und MqttClient_BME280 genannt.

Treiber für BME280

Ich habe unter github den Treiber für den BME280 abgelegt:
https://github.com/Cali1205/BME280

Dieser muss in die Sming Library kopiert werden.

C:\tools\sming\Sming\Libraries

Und mit

cd C:\tools\sming\Sming
make all

muss der Treiber noch „erstellt“ werden.

Das Programm

Die Programmdatei application.cpp habe ich auch auf github abgelegt:
https://github.com/Cali1205/esp8266_bme280

Der Programmablauf wie flogt:

In der init() Funktion, die beim Start aufgerufen wird, wird die Verbindung zum WLAN hergestellt. Ist dies erfolgreich wird die Funktion connectOK aufgerufen (Falls nicht die Funktion connectFail). Dort wird dann die Verbindung mir dem MQTT Broker hergestellt, bzw. sich bei dem Broker angemeldet. Ist dies geschehen wird mit

procTimer.initializeMs(20 * 1000, publishMessage).start();

alle 20 Sekunden eine Schleife ausgeführt, die die Funktion publishMessage() ausführt.
Diese Funktion ruft dann die Auslesefunktion für den BME280 (BME280_readout()) auf und führt das publish an den MQTT Broker aus:

bool a = mqtt.publish("weather_1/temperature", currentTemperature_str);
bool b = mqtt.publish("weather_1/pressure", currentPressure_str);
bool c = mqtt.publish("weather_1/humidity", currentHumidity_str);

Hier ist dann auch definiert unter welchem Topic die Daten gepublished werden.
Wenn alles geklappt hat sollte man in der Log-Datei von dem mosquitto Server (/var/log/mosquitto/mosquitto.log) sehen dass die Daten dort ankommen.

Abrufen der Daten in openHAB

Um die Daten mit openHAB abzurufen benötigt man das mqtt Binding. In openHAB 1 muss in der Datei openhab.cfg im Abschnitt MQTT Transport die Server Adresse und die Zugangsdaten zum MQTT Broker eingetragen werden. In openHAB 2 findet die Konfiguration in der Datei ../openhab/conf/services/mqtt.cfg statt. (https://github.com/openhab/openhab1-addons/wiki/MQTT-Binding)

Die Items können dann z.B. wie folgt definiert werden:

Number Humidity_Cellar "Luftfeuchtigkeit [%.2f %%]" (Outdoor,gC) {mqtt="<[mosquitto:weather_1/humidity:state:default]"}
Number Temperature_Cellar "Temperatur [%.2f °C] " (Outdoor,gC) {mqtt="<[mosquitto:weather_1/temperature:state:default]"}
Number Pressure_Cellar "Luftdruck [%.2f Pa]" (Outdoor,gC) {mqtt="<[mosquitto:weather_1/pressure:state:default]"}

Falls man die Daten nicht mit openHAB abrufen möchte kann man dies auch z.B. unter Android mit der App MyMQTT machen.

Wenn euch die Anleitung weiter geholfen hat oder ihr Anregungen zu der Beschreibung habt würde mich mich über einen Kommentar freuen.

Rainer
Written by Rainer Follow