Невозможно использовать радиопередатчик после переключения на библиотеку LowPower
Моя плата Arduino Mini имеет датчик температуры DHT22 и модули радиопередатчика 433 МГц. Я использую библиотеки DHT
и RCswitch
, чтобы использовать их. Код выглядит так:
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);
}
}
Итак, я считываю температуру и отправляю ее с помощью библиотеки RCswitch
. Изначально у меня был просто delay(1000);
вместо замысловатого цикла сна LowPower
, но я хотел сделать свое "устройство" более экономичным для батареи, поэтому переключился на режим сна с низким энергопотреблением.
Проблема в том, что теперь Arduino отправляет данные только в первый раз, а после 30 минут сна (в режиме «релиз») больше ничего не отправляет. Если я сокращу 30 минут до 8 секунд, он сможет отправлять данные так же, как если я заменю сон на delay(30*60*1000);
.
Со стороны кажется, что что-то не кэшируется после сна. Нужно ли мне "будить" радиомодуль каким-то особым образом? Как это исправить?
@Ribtoks, 👍0
1 ответ
Лучший ответ:
Я никогда этого не пробовал, но если вы переводите Arduino в спящий режим, я бы ожидал, что он отключит питание устройств (так ли это?), если это так, то после 30-минутного сна я бы ожидал, что устройства вернутся в исходное состояние. Предполагаю по вашему коду, что исходное состояние радио — Tx Disabled, поэтому попробуйте переместить
tempSwitch.enableTransmit(RADIO_PIN);
до
float temp = dht.readTemperature();
линия.
Я также обеспокоен тем, что DHT22 не находится в правильном состоянии после пробуждения.
Можете ли вы попробовать включить режим сна LowPower на 1 секунду в режиме отладки? Я полагаю, что это сработает чаще.
- Как перевести ATtiny/ATmega в режим глубокого сна (чтобы годами работать от батарей), но при этом обнаруживать нажатие кнопки?
- Вывод ESP8266 из deepSleep с помощью кнопки
- Как перевести RFID-модуль MFRC522 в спящий режим?
- Легкий сон ESP8266 — не могу проснуться
- Как отслеживать миллисекунды в спящем режиме
- Использовать lowpower-library и продолжать использовать последовательное соединение и другие вещи
- Очищается ли SRAM при переводе Arduino в режим sleep_mode_pwr_down?
- Пронуться после отключения питания чтобы проверить датчик а затем снова заснуть
Ваша идея в некотором роде сработала (вместо этого я просто вызвал
setup()
), но с добавлениемdelay(1000);
после самого сна при отключении питания., @Ribtoks