Homie BME280 - The Sensor
The mqtt-bme280-homie sensor project is a small and easy to integrate temperature, air pressure and humidity monitoring solution with an extra SSD1306 OLED display. Sensor data is send via MQTT and displayed on the small screen. Local time is loaded via NTP. The project is built with a cost-effective ESP8266 WiFi chip.
The display shows 4 screens (can be extended) in a carousel mode. temperature, humidity, air pressure and some status like IP address.
- ESP8266 (Wemos D1 mini, Nodemcu)
- BME280 sensor breakout
- SSD1306 OLED display
- USB power supply and cable
I got the BME280 breakout form Adafruit, others will do as well. The SSD1306 OLED displays I ordered at Aliexpress. This enclosure keeps everything together. Wiring is pretty simple since both sensor and display connect via I2C bus with the ESP.
The following software libraries are used. If using PlatformIO all dependencies are resolved automatically.
- Homie V2 (dev) including dependencies
- Adafruit BME280 Driver
- Adafruit Unified Sensor
- SSD1306 driver for ESP8266 platform
- NTPClient to connect to a time server
- Optionally PlatformIO environment for building the code
Source code and configuration details can be found at: https://github.com/mhaack/mqtt-bme280-homie
Reading sensor data
The senoor data is published via MQTT according to the Homie spec. It can be read with any MQTT client:
homie/mqtt-sensor-livingroom/sensor/temperature 24.58 homie/mqtt-sensor-livingroom/sensor/humidity 32.67 homie/mqtt-sensor-livingroom/$stats/signal 94 homie/mqtt-sensor-livingroom/$stats/uptime 17126998
The software can be configured via MQTT (or Homie config file), also while running. You can set
sensorInterval to control the reading intervals and how often data will be published via MQTT. Additionally a
temperatureOffset can be set, especially if installed within some box the BME280 sensor will give some slightly of temperate values because of the heat the ESP chip emits. Rotating the display is also possible by set the
flipScreen parameter to true.