Temperatur- und Feuchtigkeitssensor Tutorial für den BMP180 Sensor
In diesem Abschnitt zeigen wir dir Schritt für Schritt, wie du mit ESP32 oder ESP8266 einen Temperatursensor aufbaust und die Temperatur anschließend über Alexa, Google Home oder SmartThings anzeigst.
Voraussetzungen :
- ESP32 oder ESP8266 x 1.
- BMP180 x 1.
- Jumperkabel.
Kurze Einführung in den BMP180 Temperatursensor
Der BMP180 ist ein digitaler Luftdruck- und Temperatursensor von Bosch. Der BMP180 kann den Luftdruck in einem Bereich von 300 bis 1100 hPa (9000 m bis -500 m über dem Meeresspiegel) mit einer Genauigkeit von ±0,12 hPa messen. Außerdem kann er die Temperatur in einem Bereich von -40 bis +85 °C mit einer Genauigkeit von ±2 °C messen. Der BMP180 kommuniziert über die I2C-Schnittstelle mit anderen Geräten. Er ist ein stromsparender Sensor, der im Standby-Modus nur 3 μA verbraucht.
Verdrahtung von BMP180 mit ESP8266
| ESP8266 | BMP180 Pin |
| 3.3V | Vin |
| GND | GND |
| SCL | 5 (D1) |
| SDA | 4 (D2) |
Bitte beachte, dass du beim ESP8266 die I2C-Pins verwenden musst.

Verdrahtung von BMP180 mit ESP32
| ESP32 | BMP180 Pin |
|---|---|
| 3.3V | Vin |
| GND | GND |
| SCL | 22 |
| SDA | 21 |
Bitte beachte, dass du beim ESP32 die I2C-Pins verwenden musst.


Prüfen wir zuerst, ob die Temperaturmessung richtig verdrahtet ist und funktioniert.
Schritt 1 : Unterstützende Bibliotheken installieren
- Installiere die BMP_085 Bibliothek
- Installiere die Adafruit_Sensor Bibliothek
- Installiere die Sinric Pro Bibliothek

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP085.h>
Adafruit_BMP085 bmp; // Default I2C
void setup() {
Serial.begin(9600);
bool status = bmp.begin();
if (!status) {
Serial.println("Could not find BMP180 sensor!");
while (1);
}
}
void loop() {
Serial.print("Temperature = ");
Serial.print(bmp.readTemperature());
Serial.println(" *C");
// Convert temperature to Fahrenheit
/*Serial.print("Temperature = ");
Serial.print(1.8 * bmp.readTemperature() + 32);
Serial.println(" *F");*/
Serial.print("Pressure = ");
Serial.print(bmp.readPressure() / 100.0F);
Serial.println(" hPa");
Serial.print("Altitude (Approx) = ");
Serial.print(bmp.readAltitude());
Serial.println(" m");
Serial.print("Pressure = ");
Serial.print(bmp.readSealevelPressure());
Serial.println(" Pa");
Serial.println();
delay(1000);
}
// Ref: https://github.com/adafruit/Adafruit-BMP085-Library/blob/master/examples/BMP085test/BMP085test.ino
Diesen Code auf GitHub Gist ansehen
Schritt 1 : Neues Gerät in Sinric Pro anlegen
- Melde dich bei deinem Sinric Pro Konto an, öffne links das Menü Devices und klicke auf die Schaltfläche Add Device (oben links).
- Gib als Gerätenamen Temperature Sensor und als Beschreibung My Temperature Sensor ein und wähle den Gerätetyp Temperature Sensor.

- Klicke im Tab Notifications auf Next

Hier kannst du einen Schwellenwert festlegen, um über die Sinric Pro App eine Push-Benachrichtigung zu erhalten, wenn die Temperatur unter oder über einen bestimmten Wert fällt bzw. steigt. Nutze die Retrigger Time, um die Verzögerung zwischen Benachrichtigungen festzulegen.
-
Klicke auf den Tab Others und dann auf Save
-
Die nächste Seite zeigt die Zugangsdaten, die das eben angelegte Gerät für die Verbindung braucht.

- Kopiere Device Id, App Key und App Secret. Halte diese Werte geheim. TEILE SIE NICHT IN ÖFFENTLICHEN FOREN!
Schritt 2 : Mit Sinric Pro verbinden
Du kannst den Code generieren lassen über die Zero Code Funktion oder ihn selbst schreiben. Wenn du keine Programmiererfahrung hast, empfehlen wir, die Zero Code Funktion im Portal zu nutzen, um den Code zu generieren, herunterzuladen und zu flashen.
2.1 Vollständiger Code
#ifdef ENABLE_DEBUG
#define DEBUG_ESP_PORT Serial
#define NODEBUG_WEBSOCKETS
#define NDEBUG
#endif
#include <Arduino.h>
#if defined(ESP8266)
#include <ESP8266WiFi.h>
#elif defined(ESP32)
#include <WiFi.h>
#endif
#include <Adafruit_BMP085.h>
#include "SinricPro.h"
#include "SinricProTemperaturesensor.h"
#define WIFI_SSID "" // Your WiFI SSID name
#define WIFI_PASS "" // Your WiFi Password.
#define APP_KEY "" // Should look like "de0bxxxx-1x3x-4x3x-ax2x-5dabxxxxxxxx" (Get it from Portal -> Secrets)
#define APP_SECRET "" // Should look like "5f36xxxx-x3x7-4x3x-xexe-e86724a9xxxx-4c4axxxx-3x3x-x5xe-x9x3-333d65xxxxxx" (Get it from Portal -> Secrets)
#define TEMP_SENSOR_ID "" // Should look like "5dc1564130xxxxxxxxxxxxxx" (Get it from Portal -> Devices)
#define BAUD_RATE 115200 // Change baudrate to your need (used for serial monitor)
#define EVENT_WAIT_TIME 60000 // send event every 60 seconds
float temperature; // actual temperature
float humidity; // actual humidity
float lastTemperature; // last known temperature (for compare)
Adafruit_BMP085 bmp;
void handleTemperaturesensor() {
if (SinricPro.isConnected() == false) {
Serial.printf("Not connected to Sinric Pro...!\r\n");
return;
}
static unsigned long last_millis;
unsigned long current_millis = millis();
if (last_millis && current_millis - last_millis < EVENT_WAIT_TIME) return;
last_millis = current_millis;
float temperature = bmp.readTemperature();
Serial.printf("Temperature: %2.1f Celsius\r\n", temperature);
if (isnan(temperature)) { // reading failed...
Serial.printf("BME180 reading failed!\r\n"); // print error message
return; // try again next time
}
if (temperature == lastTemperature) {
Serial.printf("Temperature did not changed. do nothing...!\r\n");
return;
}
SinricProTemperaturesensor &mySensor = SinricPro[TEMP_SENSOR_ID]; // get temperaturesensor device
bool success = mySensor.sendTemperatureEvent(temperature, -1); // send event
if (success) {
Serial.printf("Sent!\r\n");
} else {
Serial.printf("Something went wrong...could not send Event to server!\r\n"); // Enable ENABLE_DEBUG to see why
}
lastTemperature = temperature; // save actual temperature for next compare
}
// setup function for WiFi connection
void setupWiFi() {
Serial.printf("\r\n[Wifi]: Connecting");
#if defined(ESP8266)
WiFi.setSleepMode(WIFI_NONE_SLEEP);
WiFi.setAutoReconnect(true);
#elif defined(ESP32)
WiFi.setSleep(false);
WiFi.setAutoReconnect(true);
#endif
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
Serial.printf(".");
delay(250);
}
IPAddress localIP = WiFi.localIP();
Serial.printf("connected!\r\n[WiFi]: IP-Address is %d.%d.%d.%d\r\n", localIP[0], localIP[1], localIP[2], localIP[3]);
}
bool onPowerState(const String &deviceId, bool &state) {
return true; // request handled properly
}
// setup function for SinricPro
void setupSinricPro() {
// add device to SinricPro
SinricProTemperaturesensor &mySensor = SinricPro[TEMP_SENSOR_ID];
mySensor.onPowerState(onPowerState);
// setup SinricPro
SinricPro.onConnected([](){ Serial.printf("Connected to SinricPro\r\n"); });
SinricPro.onDisconnected([](){ Serial.printf("Disconnected from SinricPro\r\n"); });
//SinricPro.restoreDeviceStates(true); // Uncomment to restore the last known state from the server.
SinricPro.begin(APP_KEY, APP_SECRET);
}
void setupBMP180() {
bool status = bmp.begin();
if (!status) {
Serial.println("Could not find BMP180 sensor!");
while (1);
}
}
// main setup function
void setup() {
Serial.begin(BAUD_RATE); Serial.printf("\r\n\r\n");
setupBMP180();
setupWiFi();
setupSinricPro();
}
void loop() {
SinricPro.handle();
handleTemperaturesensor();
}
Diesen Code auf GitHub Gist ansehen
Jetzt solltest du die Temperatur über die Sinric Pro App sehen können

Bitte beachte, dass die Google Home App den Temperatursensor aufgrund von Einschränkungen von Google Home als Thermostat anzeigt.
Fehlerbehebung
-
Dieses Tutorial gilt für den BMP180. Stelle sicher, dass es sich nicht um ein BME280 Modul handelt.
-
Fehler: Could not find BMP180 sensor!. Wahrscheinlich ist die Verdrahtung nicht korrekt. Du kannst den I2C Scanner Sketch ausführen, um zu prüfen, ob der Sensor richtig verdrahtet ist.
-
Weitere Details findest du auf unserer allgemeinen Seite zur Fehlerbehebung.
Verwandte Tutorials
- ESP32 oder ESP8266 mit Alexa und Google Home steuern
- BME280 Temperatur- und Feuchtigkeitssensor
- DHT11, DHT22, AM2302 Temperatur- und Feuchtigkeitssensor
- DS18B20 Temperatursensor
- LM35, LM335 und LM34 Temperatursensor
Dieses Dokument ist Open Source. Einen Tippfehler entdeckt? Bitte erstelle ein Issue