You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
2.9 KiB
127 lines
2.9 KiB
// Sensoren lesen |
|
|
|
#include <Arduino.h> |
|
#include "MessenSensoren.h" |
|
#include <Wire.h> |
|
#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() { |
|
int i; |
|
|
|
Serial.println("PowerOn I2C"); |
|
// I2C Power einschalten LoRa Transponder |
|
pinMode(I2C_POWER, OUTPUT); |
|
digitalWrite(I2C_POWER, HIGH); |
|
delay(20); |
|
|
|
Wire.begin(); |
|
|
|
// Hardware detection, liste was angeschlossen ist |
|
Serial.println("I2C Hardware detection"); |
|
|
|
if (I2C_Test(BME280_ADR) != 0xFF) { |
|
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) { |
|
Serial.println("BMP180 gefunden"); |
|
} |
|
|
|
if (I2C_Test(0x38) != 0xFF) { |
|
Serial.println(F("AHT10 gefunden")); |
|
} |
|
|
|
// such BH1730 |
|
if (I2C_Test(0x29) != 0xFF) { |
|
Serial.println("BH1730 gefunden"); |
|
} |
|
|
|
// such BH1750 |
|
if (I2C_Test(0x23) != 0xFF) { |
|
Serial.println("BH1750 gefunden"); |
|
BH1750_Init(); |
|
} |
|
Serial.println("ende"); |
|
} |
|
|
|
//-------------------------- |
|
void MessenSensoren() { |
|
int i; |
|
float t, p, h; |
|
unsigned int 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.0f; |
|
h = bme280_readHumidity(); |
|
I2C_write8(BME280_REGISTER_CONTROL, 0x3C); // Sleep Mode |
|
|
|
|
|
// 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 |
|
}
|
|
|