bmx280

dinosalvioni/bmx280/bmx280

No description
bmx280
@/bmx280
UPDpulse
ADDRbyte
bmx280
UPD
ADDR
TEMP
PRES
HUM
DONE
DONEpulse
HUMnumber
PRESnumber
TEMPnumber
To use the node in your project you should have the dinosalvioni/bmx280 library installed. Use the “File → Add Library” menu item in XOD IDE if you don’t have it yet. See Using libraries for more info.

C++ implementation

#pragma XOD require "https://github.com/christandlg/BMx280MI"


// Arduino - BMP280 / BME280
// 3.3V ---- VCC
// GND ----- GND
// SDA ----- SDA
// SCL ----- SCL
// some BMP280/BME280 modules break out the CSB and SDO pins as well: 
// 5V ------ CSB (enables the I2C interface)
// GND ----- SDO (I2C Address 0x76)
// 5V ------ SDO (I2C Address 0x77)
// other pins can be left unconnected.




{{#global}}
#include <Arduino.h>
#include <Wire.h>

#include <BMx280MI.h>

//#define I2C_ADDRESS 0x76
{{/global}}













struct State {
};

        

{{ GENERATED_CODE }}

void evaluate(Context ctx) {
auto state = getState(ctx);



    if (isInputDirty<input_UPD>(ctx)) {

	    Wire.begin();
    
        //create a BMx280I2C object using the I2C interface with I2C Address 0x76
        auto I2C_ADDRESS = getValue<input_ADDR>(ctx);
        BMx280I2C bmx280(I2C_ADDRESS);
        
        if (!bmx280.begin())
	    {
		    Serial.println("begin() failed. check your BMx280 Interface and I2C Address.");  
        }


	    if (bmx280.isBME280())
		    Serial.println("sensor is a BME280");
	    else
		    Serial.println("sensor is a BMP280");

	    //reset sensor to default parameters.
	    bmx280.resetToDefaults();

	    //by default sensing is disabled and must be enabled by setting a non-zero
	    //oversampling setting.
	    //set an oversampling setting for pressure and temperature measurements. 
	    bmx280.writeOversamplingPressure(BMx280MI::OSRS_P_x16);
	    bmx280.writeOversamplingTemperature(BMx280MI::OSRS_T_x16);

	    //if sensor is a BME280, set an oversampling setting for humidity measurements.
	    if (bmx280.isBME280())
		    bmx280.writeOversamplingHumidity(BMx280MI::OSRS_H_x16);


        //start a measurement
	    if (!bmx280.measure())
	    {
		    //Serial.println("could not start measurement, is a measurement already running?");
		    return;
	    }

	    //wait for the measurement to finish
	    int i = 0;
        do
	    {
		    delay(100);
            i=i+1;
	    } while (!bmx280.hasValue() or i<10);


        auto temperature = bmx280.getTemperature();
        auto pressure = bmx280.getPressure();
        auto humidity = bmx280.getHumidity();

        emitValue<output_PRES>(ctx, pressure);
        emitValue<output_TEMP>(ctx, temperature);
 

	    if (bmx280.isBME280())
            emitValue<output_HUM>(ctx, humidity);

    
    }emitValue<output_DONE>(ctx, 1);
}