111 lines
3.2 KiB
Arduino
111 lines
3.2 KiB
Arduino
|
/*
|
|||
|
Environment_Calculations.ino
|
|||
|
|
|||
|
This code shows how to record data from the BME280 environmental sensor
|
|||
|
and perform various calculations.
|
|||
|
|
|||
|
GNU General Public License
|
|||
|
|
|||
|
Written: Dec 30 2015.
|
|||
|
Last Updated: Oct 07 2017.
|
|||
|
|
|||
|
Connecting the BME280 Sensor:
|
|||
|
Sensor -> Board
|
|||
|
-----------------------------
|
|||
|
Vin (Voltage In) -> 3.3V
|
|||
|
Gnd (Ground) -> Gnd
|
|||
|
SDA (Serial Data) -> A4 on Uno/Pro-Mini, 20 on Mega2560/Due, 2 Leonardo/Pro-Micro
|
|||
|
SCK (Serial Clock) -> A5 on Uno/Pro-Mini, 21 on Mega2560/Due, 3 Leonardo/Pro-Micro
|
|||
|
|
|||
|
*/
|
|||
|
|
|||
|
#include <EnvironmentCalculations.h>
|
|||
|
#include <BME280I2C.h>
|
|||
|
#include <Wire.h>
|
|||
|
|
|||
|
#define SERIAL_BAUD 115200
|
|||
|
|
|||
|
BME280I2C bme; // Default : forced mode, standby time = 1000 ms
|
|||
|
// Oversampling = pressure ×1, temperature ×1, humidity ×1, filter off,
|
|||
|
|
|||
|
//////////////////////////////////////////////////////////////////
|
|||
|
void setup()
|
|||
|
{
|
|||
|
Serial.begin(SERIAL_BAUD);
|
|||
|
|
|||
|
while(!Serial) {} // Wait
|
|||
|
|
|||
|
Wire.begin();
|
|||
|
|
|||
|
while(!bme.begin())
|
|||
|
{
|
|||
|
Serial.println("Could not find BME280 sensor!");
|
|||
|
delay(1000);
|
|||
|
}
|
|||
|
|
|||
|
// bme.chipID(); // Deprecated. See chipModel().
|
|||
|
switch(bme.chipModel())
|
|||
|
{
|
|||
|
case BME280::ChipModel_BME280:
|
|||
|
Serial.println("Found BME280 sensor! Success.");
|
|||
|
break;
|
|||
|
case BME280::ChipModel_BMP280:
|
|||
|
Serial.println("Found BMP280 sensor! No Humidity available.");
|
|||
|
break;
|
|||
|
default:
|
|||
|
Serial.println("Found UNKNOWN sensor! Error!");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//////////////////////////////////////////////////////////////////
|
|||
|
void loop()
|
|||
|
{
|
|||
|
printBME280Data(&Serial);
|
|||
|
delay(500);
|
|||
|
}
|
|||
|
|
|||
|
//////////////////////////////////////////////////////////////////
|
|||
|
void printBME280Data
|
|||
|
(
|
|||
|
Stream* client
|
|||
|
)
|
|||
|
{
|
|||
|
float temp(NAN), hum(NAN), pres(NAN);
|
|||
|
|
|||
|
BME280::TempUnit tempUnit(BME280::TempUnit_Celsius);
|
|||
|
BME280::PresUnit presUnit(BME280::PresUnit_Pa);
|
|||
|
|
|||
|
bme.read(pres, temp, hum, tempUnit, presUnit);
|
|||
|
|
|||
|
client->print("Temp: ");
|
|||
|
client->print(temp);
|
|||
|
client->print("°"+ String(tempUnit == BME280::TempUnit_Celsius ? "C" :"F"));
|
|||
|
client->print("\t\tHumidity: ");
|
|||
|
client->print(hum);
|
|||
|
client->print("% RH");
|
|||
|
client->print("\t\tPressure: ");
|
|||
|
client->print(pres);
|
|||
|
client->print(" Pa");
|
|||
|
|
|||
|
EnvironmentCalculations::AltitudeUnit envAltUnit = EnvironmentCalculations::AltitudeUnit_Meters;
|
|||
|
EnvironmentCalculations::TempUnit envTempUnit = EnvironmentCalculations::TempUnit_Celsius;
|
|||
|
|
|||
|
float altitude = EnvironmentCalculations::Altitude(pres, envAltUnit);
|
|||
|
float dewPoint = EnvironmentCalculations::DewPoint(temp, hum, envTempUnit);
|
|||
|
float seaLevel = EnvironmentCalculations::EquivalentSeaLevelPressure(altitude, temp, pres);
|
|||
|
// seaLevel = EnvironmentCalculations::SealevelAlitude(altitude, temp, pres); // Deprecated. See EquivalentSeaLevelPressure().
|
|||
|
|
|||
|
client->print("\t\tAltitude: ");
|
|||
|
client->print(altitude);
|
|||
|
client->print((envAltUnit == EnvironmentCalculations::AltitudeUnit_Meters ? "m" : "ft"));
|
|||
|
client->print("\t\tDew point: ");
|
|||
|
client->print(dewPoint);
|
|||
|
client->print("°"+ String(envTempUnit == EnvironmentCalculations::TempUnit_Celsius ? "C" :"F"));
|
|||
|
client->print("\t\tEquivalent Sea Level Pressure: ");
|
|||
|
client->print(seaLevel);
|
|||
|
client->println(" Pa");
|
|||
|
|
|||
|
delay(1000);
|
|||
|
}
|
|||
|
|