Bei der Lebensdauer der Batterien ist sicherlich wichtig, ob du einen Watchdog im Sketch nutzt und der Sensor zwischendurch schläft und natürlich auch, wie oft du dir Daten von ihm senden lässt. Ich habe seit Anfang Februar einen DHT22 mit nem Pololu U1V11F3 StepUp Converter und 3 AA Batterien im Test und die Spannung lag am letzten Wochenende noch bei 3,48v - was mich hoffen lässt da der Pololu die Batterien bis auf 0,3v entladen kann... Btw. - Magst du deinen Sketch nicht mit uns teilen?
Mit dem Send_BMP085_Watchdog Sketch von meigrafd bekomme ich den BMP180 nicht zum laufen, dann fungiert der TinyTX sogar als eine Art 'Störsender' und behindert die Kommunikation aller anderen 10 TinyTx Sender mit dem TinyTX Receiver.
An einem Arduino Micro und auf meinem selbstgebauten HAT, über GPIO direkt am Pi angeschlossen, funktioniert der BMP180 hingegen tadellos. Ich werde das wohl auch so lassen, denn der Luftdruck ist im Pi Gehäuse der Gleiche wie irgendwo anders im Haus auch und so habe ich auch gleich eine Temperaturüberwachung mit im Gehäuse verbaut - unabhängig von der CPU Temperatur die man ja noch zusätzlich auslesen kann 
Hey doing,
naja, ich benutze die Sketches von Nathan... Da wird der DHT abgefragt und dann 60 Sekunden schlafen geschickt... Ich habe die beiden Sketches vom DHT22 und BMP085, zugegeben stümperhaft, zusammen gewürfelt. Es funktioniert ja auch tadellos... Ich bekomme die Werte für Temperatur, Luftfeuchte, Spannung und Druck. Alles kein Thema.
Nur sobald der BMP180 UND der DHT22 an einem TinyTX3 stecken, habe ich das Problem das die Batterien schnell leergesaugt werden. Die TinyTX die nur den DHT haben, laufen seit Wochen ohne Probleme...
Anbei mal der Sketch den ich benutze, evtl. springt dir ja das Problem ins Auge 
//----------------------------------------------------------------------------------------------------------------------
// TinyTX - An ATtiny84 and RFM12B Wireless Temperature & Humidity Sensor Node
// By Nathan Chantrell. For hardware design see http://nathan.chantrell.net/tinytx
//
// Using the DHT22 temperature and humidity sensor
//
// Licenced under the Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) licence:
// http://creativecommons.org/licenses/by-sa/3.0/
//
// Requires Arduino IDE with arduino-tiny core: http://code.google.com/p/arduino-tiny/
//----------------------------------------------------------------------------------------------------------------------
// Sensors: 16=Livingroom, 17=Outdoor, 18=Bedroom, 19=Safe, 20=Childsroom, 21=Kitchen, 22=Bathroom
#include <DHT22.h> // https://github.com/nathanchantrell/Arduino-DHT22
#include <JeeLib.h> // https://github.com/jcw/jeelib
#include <PortsBMP085.h> // Part of JeeLib
ISR(WDT_vect) { Sleepy::watchdogEvent(); } // interrupt handler for JeeLabs Sleepy power saving
#define myNodeID 19 // RF12 node ID in the range 1-30
#define network 235 // RF12 Network group
#define freq RF12_868MHZ // Frequency of RFM12B module
#define USE_ACK // Enable ACKs, comment out to disable
#define RETRY_PERIOD 5 // How soon to retry (in seconds) if ACK didn't come in
#define RETRY_LIMIT 1 // Maximum number of times to retry
#define ACK_TIME 30 // Number of milliseconds to wait for an ack
#define DHT22_PIN 10 // DHT sensor is connected on D10/ATtiny pin 13
#define DHT22_POWER 9 // DHT Power pin is connected on D9/ATtiny pin 12
DHT22 myDHT22(DHT22_PIN); // Setup the DHT
PortI2C i2c (2); // BMP085 SDA to D8 and SCL to D7
// PortI2C i2c (1); // BMP085 SDA to D10 and SCL to D9
BMP085 psensor (i2c, 3); // ultra high resolution
#define BMP085_POWER 9 // BMP085 Power pin is connected on D9
//########################################################################################################################
//Data Structure to be sent
//########################################################################################################################
typedef struct {
int humidity; // Humidity reading
int supplyV; // Supply voltage
int temp; // Temperature reading
int16_t temp2; // Temperature reading
int32_t pres; // Pressure reading
} Payload;
Payload tinytx;
// Wait a few milliseconds for proper ACK
#ifdef USE_ACK
static byte waitForAck() {
MilliTimer ackTimer;
while (!ackTimer.poll(ACK_TIME)) {
if (rf12_recvDone() && rf12_crc == 0 &&
rf12_hdr == (RF12_HDR_DST | RF12_HDR_CTL | myNodeID))
return 1;
}
return 0;
}
#endif
//--------------------------------------------------------------------------------------------------
// Send payload data via RF
//-------------------------------------------------------------------------------------------------
static void rfwrite(){
#ifdef USE_ACK
for (byte i = 0; i <= RETRY_LIMIT; ++i) { // tx and wait for ack up to RETRY_LIMIT times
rf12_sleep(-1); // Wake up RF module
while (!rf12_canSend())
rf12_recvDone();
rf12_sendStart(RF12_HDR_ACK, &tinytx, sizeof tinytx);
rf12_sendWait(2); // Wait for RF to finish sending while in standby mode
byte acked = waitForAck(); // Wait for ACK
rf12_sleep(0); // Put RF module to sleep
if (acked) { return; } // Return if ACK received
Sleepy::loseSomeTime(RETRY_PERIOD * 1000); // If no ack received wait and try again
}
#else
rf12_sleep(-1); // Wake up RF module
while (!rf12_canSend())
rf12_recvDone();
rf12_sendStart(0, &tinytx, sizeof tinytx);
rf12_sendWait(2); // Wait for RF to finish sending while in standby mode
rf12_sleep(0); // Put RF module to sleep
return;
#endif
}
//--------------------------------------------------------------------------------------------------
// Read current supply voltage
//--------------------------------------------------------------------------------------------------
long readVcc() {
bitClear(PRR, PRADC); ADCSRA |= bit(ADEN); // Enable the ADC
long result;
// Read 1.1V reference against Vcc
#if defined(__AVR_ATtiny84__)
ADMUX = _BV(MUX5) | _BV(MUX0); // For ATtiny84
#else
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); // For ATmega328
#endif
delay(2); // Wait for Vref to settle
ADCSRA |= _BV(ADSC); // Convert
while (bit_is_set(ADCSRA,ADSC));
result = ADCL;
result |= ADCH<<8;
result = 1126400L / result; // Back-calculate Vcc in mV
ADCSRA &= ~ bit(ADEN); bitSet(PRR, PRADC); // Disable the ADC to save power
return result;
}
//########################################################################################################################
void setup() {
rf12_initialize(myNodeID,freq,network); // Initialize RFM12 with settings defined above
rf12_sleep(0); // Put the RFM12 to sleep
pinMode(DHT22_POWER, OUTPUT); // set power pin for DHT to output
pinMode(BMP085_POWER, OUTPUT); // set power pin for BMP085 to output
PRR = bit(PRTIM1); // only keep timer 0 going
ADCSRA &= ~ bit(ADEN); bitSet(PRR, PRADC); // Disable the ADC to save power
}
void loop() {
digitalWrite(BMP085_POWER, HIGH); // turn BMP085 sensor on
Sleepy::loseSomeTime(50);
psensor.getCalibData();
digitalWrite(DHT22_POWER, HIGH); // turn DHT sensor on
DHT22_ERROR_t errorCode;
Sleepy::loseSomeTime(2000); // Sensor requires minimum 2s warm-up after power-on.
errorCode = myDHT22.readData(); // read data from sensor
if (errorCode == DHT_ERROR_NONE) { // data is good
// Get raw temperature reading
psensor.startMeas(BMP085::TEMP);
Sleepy::loseSomeTime(16);
int32_t traw = psensor.getResult(BMP085::TEMP);
// Get raw pressure reading
psensor.startMeas(BMP085::PRES);
Sleepy::loseSomeTime(32);
int32_t praw = psensor.getResult(BMP085::PRES);
// Calculate actual temperature and pressure
int32_t press;
psensor.calculate(tinytx.temp2, press);
tinytx.pres = (press * 0.01);
tinytx.temp = (myDHT22.getTemperatureC()*100); // Get temperature reading and convert to integer, reversed at receiving end
tinytx.humidity = (myDHT22.getHumidity()*100); // Get humidity reading and convert to integer, reversed at receiving end
tinytx.supplyV = readVcc(); // Get supply voltage
rfwrite(); // Send data via RF
}
digitalWrite(DHT22_POWER, LOW); // turn DS18B20 off
digitalWrite(BMP085_POWER, LOW); // turn BMP085 sensor off
Sleepy::loseSomeTime(57000); //JeeLabs power save function: enter low power mode for 60 seconds (valid range 16-65000 ms)
}
Display More
Gruß,
toberkel