[I want a node] BME280 sensor node

Всем здравствуйте!
Мне хотелось подключить датчик BME280 но для него нет ноды. Я не очень могу в C++ Но датчик подключить надо. ПРошу пожалуйста ноду. Буду благодарен!

1 Like

This sensor uses I2C communication, so xod/i2c/* nodes can probably be used to communicate with it. Some info on wiring and what to read/write is available in spec sheet: https://www.bosch-sensortec.com/media/boschsensortec/downloads/environmental_sensors_2/humidity_sensors_1/bme280/bst-bme280-ds002.pdf.

Есть библиотека для BMX280.
Нода сама определяет тип датчика - BMP280 или BME280.
https://xod.io/libs/dinosalvioni/hwlibrary/

Код только подправь в ручную…

Можно скинуть мне что подправить. А то я маленько рукожоп.

Тебе придётся разобраться самому. Есть нюансы, относительно распиновки, подключения модуля, адреса и т.п. Разверни код ноды, почитай. Там всё описано.

Попробовал. Не понял ничего. Помогите. Я не знаю где поправить

Подключите датчик, согласно указанной в коде распиновке.
Если не заработает - проверьте адрес датчика I2C сканером.

не работает. что делать

А что конкретно не работает?
Я вижу, что у вас даже компиляция не проходит.
Не говоря уж о работоспособности кода или модуля.

#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 <BMx280I2C.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);

}

I have the same problem. This node for BME280 has an error in this block

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

#include <BMx280I2C.h>

#define I2C_ADDRESS 0x76
{{/global}}

Adding the line has helped me.

#include <BMx280MI.h>

Now block looks like this

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

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

If you go to my reply on this topic it may help. ### Topic: GY-BMP280 Temperature humidity and pressure senzor

https://forum.xod.io/t/gy-bmp280-temperature-humidity-and-pressure-senzor/3220?u=skippy2k

из коробки не завелось.

нет, это дает ошибку компиляции. я могу только заставить его работать, отредактировав c ++ в BMx280i2c.h

1 Like

BMx280I2C.h так правильнее ( регистр имеет значения)
вот у меня так:

{{#global}}
#include <Arduino.h>
#include <Wire.h>
#include <BMx280I2C.h>
//#define I2C_ADDRESS 0x76
{{/global}}

и все работает
адрес датчика указал в патче проектаbme280

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.