My Arduino Mini board has DHT22 temperature sensor and 433MHz radio transmitter modules. I'm using DHT
and RCswitch
libraries to make use of them. Code looks like this:
void setup() {
tempSwitch.enableTransmit(RADIO_PIN);
dht.begin();
}
void loop() {
float temp = dht.readTemperature();
unsigned long message = createTemperatureMessage(SENSOR_ID, temp);
tempSwitch.send(message, 32);
#ifdef MY_DEBUG
unsigned int sleepCount = 1;
#else
// 3600s / 2 / 8s == 225
unsigned int sleepCount = 225;
#endif
for (; sleepCount > 0; sleepCount--) {
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
}
}
So I'm reading temperature and sending it using RCswitch
library. Initially I just had delay(1000);
instead of fancy LowPower
sleep loop but I wanted to make my "device" more battery-friendly so I switched to low-power sleep.
The problem is that now Arduino is only sending data first time and after sleeping 30 minutes (in "release" mode) it does not send anything anymore. If I reduce 30 minutes to 8 seconds it is capable of sending data as well as if I replace sleep with delay(30*60*1000);
.
From beyond it looks like something is not caching up after the sleep. Do I need to "wake" radio module in any special way? How to fix that?
1 Answer 1
I've never tried this, but if you are putting the Arduino to sleep I would expect it to cut power to the devices (does it?) if it does then after a 30 minute sleep I would expect the devices to come back up in the initial state. Guessing by your code the initial state of the radio is Tx Disabled, so try moving the
tempSwitch.enableTransmit(RADIO_PIN);
to before the
float temp = dht.readTemperature();
line.
I'd also be concerned that the DHT22 is not in the correct state after you wake up.
Can you try doing a 1 second LowPower sleep in debug mode, I suspect it would work more often.
-
1You idea kind of worked (I just called
setup()
instead) but with addition ofdelay(1000);
after power-down sleep itself.Ribtoks– Ribtoks2018年08月06日 07:25:07 +00:00Commented Aug 6, 2018 at 7:25