Skip to content
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. Troubleshooting
  3. Multiple BME280 sensor for Domoticz
  • Getting Started
  • Controller
  • Build
  • Hardware
  • Download/API
  • Forum
  • Store

Multiple BME280 sensor for Domoticz

Scheduled Pinned Locked Moved Troubleshooting
3 Posts 2 Posters 43 Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • P Offline
    P Offline
    palmerfarmer
    wrote on last edited by
    #1

    Hi,
    I'm trying to build a node that uses x2 BME280 sensors for a whole house fan controller, one inside temp/hum and one outside. The BME280 has a selectable I2C address by grounding the SDO pin on the sensor. I have successfully tested this using the BlueDot_BME280.h library and sketches.
    Problem I am having is turning this sketch into a working Mysensors node I can use in domoticz. I think I'm almost there but cannot see why i am getting an 'invalid use of non-static member function' message.
    here is my hacked code...

    I thought i would try and get it working with one BME280 first..

    
    /***************************************************************************
      Example for BME280 Weather Station using two Sensors with I2C Protocol
      written by Thiago Barros for BlueDot UG (haftungsbeschränkt)
      BSD License
    
      This sketch was written for the Bosch Sensor BME280.
      The BME280 is a MEMS device for measuring temperature, humidity and atmospheric pressure.
      For more technical information on the BME280, please go to ------> http://www.bluedot.space
    
     ***************************************************************************/
    #define MY_DEBUG
    #define MY_RADIO_NRF24
    //#define MY_RF24_CE_PIN 49 //only required for Mega
    //#define MY_RF24_CS_PIN 53 //only required for Mega
    #define MY_RF24_PA_LEVEL (RF24_PA_MIN)
    #define MY_NODE_ID 57
    
    #include <SPI.h>
    #include <Wire.h>
    #include "BlueDot_BME280.h"
    #include <MySensors.h>
    
    
    
    #define BARO_CHILD 0 //these will appear in domoticz child list for this node
    #define TEMP_CHILD 1
    #define HUM_CHILD 2
    
    long interval = 60000;           // interval at which to send (milliseconds)
    long previousMillis = interval;        // will store last time data was sent
    
    BlueDot_BME280 bme1;                                     //Object for Sensor 1
    BlueDot_BME280 bme2;                                     //Object for Sensor 2
    
    int bme1Detected = 0;
    ///int bme2Detected = 0;
    
    float dP_dt;
    boolean metric;
    MyMessage tempMsg(TEMP_CHILD, V_TEMP);
    MyMessage humMsg(HUM_CHILD, V_HUM);
    MyMessage pressureMsg(BARO_CHILD, V_PRESSURE);
    
    void setup() {
    
    metric = getControllerConfig().isMetric;  // was getConfig().isMetric; before MySensors v2.1.1
      Wire.begin(); // Wire.begin(sda, scl)
      // use the 1.1 V internal reference
    #if defined(__AVR_ATmega2560__)
      analogReference(INTERNAL1V1);
    #else
      analogReference(INTERNAL);
    #endif
    
      Serial.begin(115200);
     
    
      bme1.parameter.communication = 0;                    //Setting communication for Sensor 1 (bme1)
     // bme2.parameter.communication = 0;                    //Setting communication for Sensor 2 (bme2)
      bme1.parameter.I2CAddress = 0x77;                    //I2C Address for Sensor 1 (bme1)
     // bme2.parameter.I2CAddress = 0x76;                    //I2C Address for Sensor 2 (bme2)
      bme1.parameter.sensorMode = 0b11;                    //In normal mode the sensor measures continually (default value)
    //  bme2.parameter.sensorMode = 0b11;
      bme1.parameter.IIRfilter = 0b000;                   //factor 0 (filter off)
     // bme2.parameter.IIRfilter = 0b000;                   //factor 16 (default value)
      bme1.parameter.humidOversampling = 0b101;            //factor 16
     // bme2.parameter.humidOversampling = 0b101;            //factor 16
      bme1.parameter.tempOversampling = 0b101;              //factor 16
     // bme2.parameter.tempOversampling = 0b101;              //factor 16
      bme1.parameter.pressOversampling = 0b101;             //factor 16
    //  bme2.parameter.pressOversampling = 0b101;             //factor 16
      bme1.parameter.tempOutsideCelsius = 10;               //default value of 15°C
     // bme2.parameter.tempOutsideCelsius = 10;               //default value of 15°C
    
      if (bme1.init() != 0x60)
      {
        Serial.println(F("First BME280 Sensor not found!"));
        Serial.println(F("Please check your connections."));
        bme1Detected = 0;
      }
      else
      {
        Serial.println(F("First BME280 Sensor detected!"));
        bme1Detected = 1;
      }
     
      
      Serial.println();
      Serial.println();
    
    }
    
    
    void presentation() {
      sendSketchInfo("BME x2 I2C master ", "V2.a");
    
      // Register sensors to gw (they will be created as child devices)
      present(BARO_CHILD, S_BARO);
      present(TEMP_CHILD, S_TEMP);
      present(HUM_CHILD, S_HUM);
    
    }
    
    void loop() {
    
    
      Serial.print(F("Duration in Seconds:\t\t\t\t"));
      Serial.println(float(millis()) / 1000);
    
      if (bme1Detected)
      {
        Serial.print(F("Temperature in Celsius from Sensor 1:\t\t"));
        Serial.println(bme1.readTempC());
        Serial.print(F("Humidity in % from Sensor 1:\t\t\t"));
        Serial.println(bme1.readHumidity());
        Serial.print(F("Pressure in hPa from Sensor 1:\t\t\t"));
        Serial.println(bme1.readPressure());
      }
      else
      {
        Serial.print(F("Temperature in Celsius from Sensor 1:\t\t"));
        Serial.println(F("Null"));
        Serial.print(F("Humidity in % from Sensor 1:\t\t\t"));
        Serial.println(F("Null"));
        Serial.print(F("Pressure in hPa from Sensor 1:\t\t\t"));
        Serial.println(F("Null"));
      {
    
    
        send(humMsg.set(bme1.readHumidity, 1));
    wait(50);
    
      //  send(humMsg.set(humidity, 1));
    //wait(50);
    
      delay(5000);
    }
    }}
    
    alexsh1A 1 Reply Last reply
    0
    • P palmerfarmer

      Hi,
      I'm trying to build a node that uses x2 BME280 sensors for a whole house fan controller, one inside temp/hum and one outside. The BME280 has a selectable I2C address by grounding the SDO pin on the sensor. I have successfully tested this using the BlueDot_BME280.h library and sketches.
      Problem I am having is turning this sketch into a working Mysensors node I can use in domoticz. I think I'm almost there but cannot see why i am getting an 'invalid use of non-static member function' message.
      here is my hacked code...

      I thought i would try and get it working with one BME280 first..

      
      /***************************************************************************
        Example for BME280 Weather Station using two Sensors with I2C Protocol
        written by Thiago Barros for BlueDot UG (haftungsbeschränkt)
        BSD License
      
        This sketch was written for the Bosch Sensor BME280.
        The BME280 is a MEMS device for measuring temperature, humidity and atmospheric pressure.
        For more technical information on the BME280, please go to ------> http://www.bluedot.space
      
       ***************************************************************************/
      #define MY_DEBUG
      #define MY_RADIO_NRF24
      //#define MY_RF24_CE_PIN 49 //only required for Mega
      //#define MY_RF24_CS_PIN 53 //only required for Mega
      #define MY_RF24_PA_LEVEL (RF24_PA_MIN)
      #define MY_NODE_ID 57
      
      #include <SPI.h>
      #include <Wire.h>
      #include "BlueDot_BME280.h"
      #include <MySensors.h>
      
      
      
      #define BARO_CHILD 0 //these will appear in domoticz child list for this node
      #define TEMP_CHILD 1
      #define HUM_CHILD 2
      
      long interval = 60000;           // interval at which to send (milliseconds)
      long previousMillis = interval;        // will store last time data was sent
      
      BlueDot_BME280 bme1;                                     //Object for Sensor 1
      BlueDot_BME280 bme2;                                     //Object for Sensor 2
      
      int bme1Detected = 0;
      ///int bme2Detected = 0;
      
      float dP_dt;
      boolean metric;
      MyMessage tempMsg(TEMP_CHILD, V_TEMP);
      MyMessage humMsg(HUM_CHILD, V_HUM);
      MyMessage pressureMsg(BARO_CHILD, V_PRESSURE);
      
      void setup() {
      
      metric = getControllerConfig().isMetric;  // was getConfig().isMetric; before MySensors v2.1.1
        Wire.begin(); // Wire.begin(sda, scl)
        // use the 1.1 V internal reference
      #if defined(__AVR_ATmega2560__)
        analogReference(INTERNAL1V1);
      #else
        analogReference(INTERNAL);
      #endif
      
        Serial.begin(115200);
       
      
        bme1.parameter.communication = 0;                    //Setting communication for Sensor 1 (bme1)
       // bme2.parameter.communication = 0;                    //Setting communication for Sensor 2 (bme2)
        bme1.parameter.I2CAddress = 0x77;                    //I2C Address for Sensor 1 (bme1)
       // bme2.parameter.I2CAddress = 0x76;                    //I2C Address for Sensor 2 (bme2)
        bme1.parameter.sensorMode = 0b11;                    //In normal mode the sensor measures continually (default value)
      //  bme2.parameter.sensorMode = 0b11;
        bme1.parameter.IIRfilter = 0b000;                   //factor 0 (filter off)
       // bme2.parameter.IIRfilter = 0b000;                   //factor 16 (default value)
        bme1.parameter.humidOversampling = 0b101;            //factor 16
       // bme2.parameter.humidOversampling = 0b101;            //factor 16
        bme1.parameter.tempOversampling = 0b101;              //factor 16
       // bme2.parameter.tempOversampling = 0b101;              //factor 16
        bme1.parameter.pressOversampling = 0b101;             //factor 16
      //  bme2.parameter.pressOversampling = 0b101;             //factor 16
        bme1.parameter.tempOutsideCelsius = 10;               //default value of 15°C
       // bme2.parameter.tempOutsideCelsius = 10;               //default value of 15°C
      
        if (bme1.init() != 0x60)
        {
          Serial.println(F("First BME280 Sensor not found!"));
          Serial.println(F("Please check your connections."));
          bme1Detected = 0;
        }
        else
        {
          Serial.println(F("First BME280 Sensor detected!"));
          bme1Detected = 1;
        }
       
        
        Serial.println();
        Serial.println();
      
      }
      
      
      void presentation() {
        sendSketchInfo("BME x2 I2C master ", "V2.a");
      
        // Register sensors to gw (they will be created as child devices)
        present(BARO_CHILD, S_BARO);
        present(TEMP_CHILD, S_TEMP);
        present(HUM_CHILD, S_HUM);
      
      }
      
      void loop() {
      
      
        Serial.print(F("Duration in Seconds:\t\t\t\t"));
        Serial.println(float(millis()) / 1000);
      
        if (bme1Detected)
        {
          Serial.print(F("Temperature in Celsius from Sensor 1:\t\t"));
          Serial.println(bme1.readTempC());
          Serial.print(F("Humidity in % from Sensor 1:\t\t\t"));
          Serial.println(bme1.readHumidity());
          Serial.print(F("Pressure in hPa from Sensor 1:\t\t\t"));
          Serial.println(bme1.readPressure());
        }
        else
        {
          Serial.print(F("Temperature in Celsius from Sensor 1:\t\t"));
          Serial.println(F("Null"));
          Serial.print(F("Humidity in % from Sensor 1:\t\t\t"));
          Serial.println(F("Null"));
          Serial.print(F("Pressure in hPa from Sensor 1:\t\t\t"));
          Serial.println(F("Null"));
        {
      
      
          send(humMsg.set(bme1.readHumidity, 1));
      wait(50);
      
        //  send(humMsg.set(humidity, 1));
      //wait(50);
      
        delay(5000);
      }
      }}
      
      alexsh1A Offline
      alexsh1A Offline
      alexsh1
      wrote on last edited by
      #2

      @palmerfarmer said in Multiple BME280 sensor for Domoticz:

      Hi,
      I'm trying to build a node that uses x2 BME280 sensors for a whole house fan controller, one inside temp/hum and one outside. The BME280 has a selectable I2C address by grounding the SDO pin on the sensor. I have successfully tested this using the BlueDot_BME280.h library and sketches.
      Problem I am having is turning this sketch into a working Mysensors node I can use in domoticz. I think I'm almost there but cannot see why i am getting an 'invalid use of non-static member function' message.
      here is my hacked code...

      I thought i would try and get it working with one BME280 first..

      Check if you use } or { correctly.
      I can see one mistake:

      else
      {
      Serial.print(F("Temperature in Celsius from Sensor 1:\t\t"));
      Serial.println(F("Null"));
      Serial.print(F("Humidity in % from Sensor 1:\t\t\t"));
      Serial.println(F("Null"));
      Serial.print(F("Pressure in hPa from Sensor 1:\t\t\t"));
      Serial.println(F("Null"));
      { (This should be } )

      1 Reply Last reply
      1
      • P Offline
        P Offline
        palmerfarmer
        wrote on last edited by
        #3

        Thanks for the reply and spotting one of my many errors (now corrected amongst others!).
        Managed to get one of them showing up in Domoticz, lets see if i can get them both in there without the temp hum being crossed over between physical sensors. There seems to be a few posts about this problem.

        1 Reply Last reply
        1
        Reply
        • Reply as topic
        Log in to reply
        • Oldest to Newest
        • Newest to Oldest
        • Most Votes


        15

        Online

        11.7k

        Users

        11.2k

        Topics

        113.0k

        Posts


        Copyright 2019 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
        • Login

        • Don't have an account? Register

        • Login or register to search.
        • First post
          Last post
        0
        • OpenHardware.io
        • Categories
        • Recent
        • Tags
        • Popular