Невозможно использовать радиопередатчик после переключения на библиотеку 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);.

Со стороны кажется, что что-то не кэшируется после сна. Нужно ли мне "будить" радиомодуль каким-то особым образом? Как это исправить?

, 👍0


1 ответ


Лучший ответ:

1

Я никогда этого не пробовал, но если вы переводите Arduino в спящий режим, я бы ожидал, что он отключит питание устройств (так ли это?), если это так, то после 30-минутного сна я бы ожидал, что устройства вернутся в исходное состояние. Предполагаю по вашему коду, что исходное состояние радио — Tx Disabled, поэтому попробуйте переместить

tempSwitch.enableTransmit(RADIO_PIN);

до

float temp = dht.readTemperature();

линия.

Я также обеспокоен тем, что DHT22 не находится в правильном состоянии после пробуждения.

Можете ли вы попробовать включить режим сна LowPower на 1 секунду в режиме отладки? Я полагаю, что это сработает чаще.

,

Ваша идея в некотором роде сработала (вместо этого я просто вызвал setup()), но с добавлением delay(1000); после самого сна при отключении питания., @Ribtoks