firmware-base/vendor/sming/Sming/samples/MeteoControl_mqtt/app/bmp180.cpp
2026-01-28 16:42:43 +01:00

57 lines
1.5 KiB
C++

#include <SmingCore.h>
#include <Libraries/BMP180/BMP180.h>
#include "configuration.h"
// GPIO0 SCL
// GPIO2 SDA
namespace
{
BMP180 barometer;
SimpleTimer publishBMPTimer;
void publishBMP()
{
if(mqtt.getConnectionState() != eTCS_Connected)
startMqttClient(); // Auto reconnect
Serial.print(_F("*********************************************"));
Serial.println(_F("Start reading BMP180 sensor"));
if(!barometer.EnsureConnected()) {
Serial.println(_F("Could not connect to BMP180"));
return;
}
// Retrieve the current pressure in Pascals
long currentPressure = barometer.GetPressure();
// convert pressure to mmHg
float BMPPress = currentPressure / 133.322;
// Print out the Pressure
Serial << _F("Pressure: ") << BMPPress << _F(" mmHg") << endl;
mqtt.publish(BMP_P, String(BMPPress));
// Retrieve the current temperature in degrees celsius
float BMPTemp = barometer.GetTemperature();
// Print out the Temperature
Serial << _F("Temperature: ") << BMPTemp << " °C" << endl;
mqtt.publish(BMP_T, String(BMPTemp));
Serial.println(_F("BMP180 sensor read and transmitted to server\r\n"
"********************************************"));
}
} // namespace
void BMPinit()
{
// When we have connected, we reset the device to ensure a clean start.
barometer.SoftReset();
// Now we initialize the sensor and pull the calibration data
barometer.Initialize();
barometer.PrintCalibrationData();
publishBMPTimer.initializeMs<TIMER * 3000>(publishBMP).start(); // start publish BMP180 sensor data
}