Wetterstation mit ESP8266 und BME280

Veröffentlicht von

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 BME280 entschieden.  Der ist gut über Ebay zu bestellen und kann mit I2C ausgelesen werden.

Vorbereitung
Hardware
  1. ESP8266 Board mit USB Programmer oder integrierter Schnittstelle (Wit Cloud Development Board, nodemcu, …).
  2. BME280 Breakout Board
  3. 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 :

Dann muss man die mosquitto config anpassen:

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

in

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

Zusätzlich legt man mit

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

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, wie in diesem Beitrag erwähnt, 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.

Und mit

 

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

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:

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:

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.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.