diff --git a/pi_mqtt_gpio/modules/bme280.py b/pi_mqtt_gpio/modules/bme280.py
new file mode 100644
index 0000000000000000000000000000000000000000..f9fb234fd35bce48e452e20172375e72301210fa
--- /dev/null
+++ b/pi_mqtt_gpio/modules/bme280.py
@@ -0,0 +1,48 @@
+from pi_mqtt_gpio.modules import GenericSensor
+
+
+REQUIREMENTS = ("smbus", "RPi.bme280")
+CONFIG_SCHEMA = {
+    "i2c_bus_num": dict(type="integer", required=True, empty=False),
+    "chip_addr": dict(type="integer", required=True, empty=False),
+}
+SENSOR_SCHEMA = {
+    "type": dict(
+        type="string",
+        required=False,
+        empty=False,
+        default="temperature",
+        allowed=["temperature", "humidity", "pressure"],
+    )
+}
+
+
+class Sensor(GenericSensor):
+    """
+    Implementation of Sensor class for the BME280 sensor.
+    """
+
+    def __init__(self, config):
+        import smbus
+        import bme280
+
+        self.bus = smbus.SMBus(config["i2c_bus_num"])
+        self.address = config["chip_addr"]
+        self.calib = bme280.load_calibration_params(self.bus, self.address)
+
+    def setup_sensor(self, config):
+        return True  # nothing to do here
+
+    def get_value(self, config):
+        """get the temperature, humidity or pressure value from the sensor"""
+        import bme280
+
+        data = bme280.sample(self.bus, self.address, self.calib)
+
+        if config["type"] == "temperature":
+            return data.temperature
+        if config["type"] == "humidity":
+            return data.humidity
+        if config["type"] == "pressure":
+            return data.pressure
+        return None