Hallo Michael,
ja, das Problem habe ich noch. Ich warte gerade noch auf die Lieferung der neuen Sensoren vom Chinamann
Mal sehen wie es dann mit nem neuen BMP180 läuft (alternativ dann auch zum Testen mit dem BMP280).
Ich werde auf jeden Fall berichten was dabei herauskommt.
Welche Kombination von Sensoren hast du denn in Betrieb? Könntest du mir vielleicht mal deinen Sketch zukommen lassen?
Wäre toll wenn ich das zum laufen bekomme. Aktuell hängen die Sensoren direkt mit 3m Kabel am Raspberry, das gefällt mir nicht und mit der Positionierung ist das auch so eine Sache ...
Oliver
EDIT:
Hier mal mein Sketch (nur BMP180), da stürzt der Z-Uno hin und wieder bei "bmp.readPressure();" ab
Code: Select all
#include <Wire.h>
#include <ZUNO_BMP180.h>
#include <math.h>
long pressureSend;
word temperatureSend;
int alt = 344;
ZUNO_BMP180 bmp;
// set up channel
ZUNO_SETUP_CHANNELS(
ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_BAROMETRIC_PRESSURE,
SENSOR_MULTILEVEL_SCALE_KILOPASCAL,
SENSOR_MULTILEVEL_SIZE_FOUR_BYTES,
SENSOR_MULTILEVEL_PRECISION_TWO_DECIMALS,
getterPressure),
ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_TEMPERATURE,
SENSOR_MULTILEVEL_SCALE_CELSIUS,
SENSOR_MULTILEVEL_SIZE_TWO_BYTES,
SENSOR_MULTILEVEL_PRECISION_ONE_DECIMAL,
getterTemp)
);
ZUNO_SETUP_SLEEPING_MODE(ZUNO_SLEEPING_MODE_SLEEPING); // SLEEPING MODE
void setup() {
bmp.begin();
}
void loop() {
delay(1000);
// Auslesen BMP180 I2C
float temperature = bmp.readTemperature();
temperatureSend = word(temperature*10);
zunoSendReport(2);
// Calculate Pressure at Sea level with given altitude
float pressure = bmp.readPressure();
float pressureSea = (pressure / pow(1.0 - alt/44330.0, 5.255)/100);
pressureSend = long(pressureSea*100);
zunoSendReport(1);
zunoSendDeviceToSleep();
}
long getterPressure() {
return pressureSend;
}
word getterTemp() {
return temperatureSend;
}
Und hier der Sketch mit allen Sensoren:
Code: Select all
#include <Wire.h>
#include <ZUNO_BMP180.h>
#include <ZUNO_AM2320.h>
int BH1750address = 0x23; //setting i2c address
byte buff[2];
long lightLux;
long pressureSend;
word temperatureSend;
word temperatureAM2320Send;
word humidityAM2320Send;
int alt = 344;
ZUNO_BMP180 bmp;
AM2320 am2320;
#define BMP180_DEBUG 1
// set up channel
ZUNO_SETUP_CHANNELS(
ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_LUMINANCE,
SENSOR_MULTILEVEL_SCALE_LUX,
SENSOR_MULTILEVEL_SIZE_FOUR_BYTES,
SENSOR_MULTILEVEL_PRECISION_ZERO_DECIMALS,
getterLight),
ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_BAROMETRIC_PRESSURE,
SENSOR_MULTILEVEL_SCALE_KILOPASCAL,
SENSOR_MULTILEVEL_SIZE_FOUR_BYTES,
SENSOR_MULTILEVEL_PRECISION_TWO_DECIMALS,
getterPressure),
ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_TEMPERATURE,
SENSOR_MULTILEVEL_SCALE_CELSIUS,
SENSOR_MULTILEVEL_SIZE_TWO_BYTES,
SENSOR_MULTILEVEL_PRECISION_ONE_DECIMAL,
getterTemp),
ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_TEMPERATURE,
SENSOR_MULTILEVEL_SCALE_CELSIUS,
SENSOR_MULTILEVEL_SIZE_TWO_BYTES,
SENSOR_MULTILEVEL_PRECISION_ONE_DECIMAL,
getterTempAM2320),
ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_RELATIVE_HUMIDITY,
SENSOR_MULTILEVEL_SCALE_PERCENTAGE_VALUE,
SENSOR_MULTILEVEL_SIZE_TWO_BYTES,
SENSOR_MULTILEVEL_PRECISION_ONE_DECIMAL,
getterHumAM2320)
);
//ZUNO_SETUP_SLEEPING_MODE(ZUNO_SLEEPING_MODE_SLEEPING); // SLEEPING MODE
//ZUNO_SETUP_SLEEPING_MODE(ZUNO_SLEEPING_MODE_FREQUENTLY_AWAKE);
void setup() {
Serial.begin(9600);
Wire.begin();
am2320.begin();
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP180 sensor, check wiring!");
}
}
void loop() {
delay(1000);
// Auslesen BMP180 I2C
// Get Temperature
Serial.print("Temperature = ");
Serial.print(bmp.readTemperature());
Serial.print(" *C / ");
// Get Pressure
Serial.print("Pressure = ");
Serial.print(bmp.readPressure());
Serial.print(" Pa / ");
Serial.print("RealPressure = "); Serial.print((bmp.readPressure() / pow(1.0 - alt/44330.0, 5.255))/100); Serial.print(" hPa / ");
//Serial.println("Start Messument BM1750");
// Auslesen BH1750 I2C
uint16_t val=0;
BH1750_Init(BH1750address);
delay(200);
if(2==BH1750_Read(BH1750address))
{
val=((buff[0]<<8)|buff[1])/1.2;
val=val+1;
lightLux = val;
}
Serial.print(lightLux); Serial.print(" Lux / ");
//Serial.println("Start Messument AM2320");
// Auslesen AM2320 I2C
float temp = am2320.getTemperature();
temperatureAM2320Send = word(temp*10);
Serial.print(temp); Serial.print(" C / ");
float hum = am2320.getHumidity();
humidityAM2320Send = word(hum*10);
Serial.print(hum); Serial.println(" %");
//Serial.println("--------------------");
/*
zunoSendReport(1);
zunoSendReport(2);
zunoSendReport(3);
zunoSendReport(4);
zunoSendReport(5);
*/
delay(2000);
//zunoSendDeviceToSleep();
}
int BH1750_Read(int address) //
{
int i=0;
Wire.requestFrom(address, 2);
while(Wire.available()) //
{
buff[i] = Wire.read(); // receive one byte
i++;
}
return i;
}
void BH1750_Init(int address)
{
Wire.beginTransmission(address);
Wire.write(0x10);//1lx reolution 120ms
Wire.endTransmission();
}
long getterLight() {
return lightLux;
}
long getterPressure() {
return pressureSend;
}
word getterTemp() {
return temperatureSend;
}
word getterTempAM2320() {
return temperatureAM2320Send;
}
word getterHumAM2320() {
return humidityAM2320Send;
}
Sorry, wenn die Sketches ein wenig wild aussehen. Ich habe einige Codeschnipsel verwendet und immer wieder hin und her umgebaut um die Ursache für den Absturz einzugrenzen.