From a6084d8e445e6c7eca70e0213d8843917602b043 Mon Sep 17 00:00:00 2001 From: Ralf Behrens Date: Mon, 10 Jan 2022 16:26:16 +0100 Subject: [PATCH] add Sensoren auslesen --- include/MessenSensoren.h | 4 ++ src/MessenSensoren.cpp | 95 ++++++++++++++++++++++++++++++++++++++-- 2 files changed, 96 insertions(+), 3 deletions(-) diff --git a/include/MessenSensoren.h b/include/MessenSensoren.h index 5b4a4bc..b428a12 100644 --- a/include/MessenSensoren.h +++ b/include/MessenSensoren.h @@ -8,6 +8,10 @@ void MessenSensoren(void); +// nicht schoen aber funktioniert +#include "hseSensorProtocol.h" +extern HseSP hse; + diff --git a/src/MessenSensoren.cpp b/src/MessenSensoren.cpp index 125de75..a8eb60d 100644 --- a/src/MessenSensoren.cpp +++ b/src/MessenSensoren.cpp @@ -6,25 +6,38 @@ #include "myi2c.h" #include "bme280.h" #include "bh1750.h" +#include "hseSensorProtocol.h" #define I2C_POWER 5 // bei Feather M0 +// hse-Protokoll Datensatz +HseSP hse(2, 60); + + void init_Messen(void) { +int i; +Serial.println("PowerOn I2C"); // I2C Power einschalten LoRa Transponder pinMode(I2C_POWER,OUTPUT); digitalWrite(I2C_POWER, HIGH); -delay(10/8); +delay(20); Wire.begin(); // Hardware detection, liste was angeschlossen ist +Serial.println("I2C Hardware detection"); if ( I2C_Test(BME280_ADR) != 0xFF ) { - Serial.println("BME280 gefunden"); + Set_I2C_Adresse(BME280_ADR); + i = I2C_read8(BME280_REGISTER_CHIPID); + Serial1.print(F("BMx280 Chip ID = 0x")); + Serial1.print(i,HEX); + if ( i== 0x58) Serial1.println(F(" = BMP280")); + if ( i== 0x60) Serial1.println(F(" = BME280")); } if ( I2C_Test(0x77) != 0xFF ) @@ -49,11 +62,87 @@ if ( I2C_Test(0x23) != 0xFF ) Serial.println("BH1750 gefunden"); BH1750_Init(); } - +Serial.println("ende"); } //-------------------------- void MessenSensoren(void) { +int i,status, error; +float t,p,h; +long lVisLux; + + +Set_I2C_Adresse(BME280_ADR); +i = I2C_read8(BME280_REGISTER_CHIPID); + +bme280_readCoefficients(); + +if ( i== 0x58) + { + I2C_write8(BME280_REGISTER_CONTROL, 0x3F); + delay(50); // gib ihm Zeit zum messen + } + +if ( i== 0x60) + { + //Set before CONTROL_meas (DS 5.4.3) + I2C_write8(BME280_REGISTER_CONTROLHUMID, 0x05); //16x oversampling + I2C_write8(BME280_REGISTER_CONTROL, 0xB7); // 16x ovesampling, normal mode + delay(100); // gib ihm Zeit zum messen + } +// 35ms reicht beim BMP280 +// 75ms warten bis BME280 den Druck gemessen hat + +//---------------- + t = bme280_readTemperature(); + p = bme280_readPressure()/100.0; + h = bme280_readHumidity(); + I2C_write8(BME280_REGISTER_CONTROL, 0x3C); // Sleep Mode +*/ + +// such BH1730 +if ( I2C_Test(0x29) != 0xFF ) + { + BH1730_Init(); + lVisLux = BH1730_ReadLux(); + // BH1730_ReadIR(); will keiner mehr wissen + } + +// such BH1750 +if ( I2C_Test(0x23) != 0xFF ) + { + // BH1750 = HY30 Licht Sensor + BH1750_Init(); + lVisLux = BH1750_ReadLux(); + } + + if ( lVisLux > 65535) lVisLux = 654321; + + +Serial.print(F("Temp = ")); +Serial.println(t); +Serial.print(F("Druck = ")); +Serial.println(p); +Serial.print(F("Feuchte = ")); +Serial.println(h); + +Serial.print(F("Vis = ")); +Serial.println(lVisLux); + + + hse.reset(); +//Ein Klimasensor hinzufügen + HseSP::ClimateSensor_t cs; + cs.Temperature = t; //°C + cs.Humidity = h; //% + cs.Pressure = p; //hPa + cs.Illuminance = lVisLux; //lux + hse.addClimateSensor(&cs); + +// hse.addVoltage(fUb/1000.0); // in Volt +// hse.addCounter(uiOnStd); // Zeit On + + }