LoRa - проблемы со сном.

Нет ответов
Cadil
Offline
Зарегистрирован: 27.06.2018

В схеме устройства используется пара передатчик-приемник Lora. Занялся энергосбережением устройства и столкнулся с проблемой: не могу отправить в сон передатчик LoRa.

Поскольку самостоятельно отправить в сон Лору не удалось, занялся поиском примеров в Инете. Нашел пример с внешним прерыванием

#include "LowPower.h"
#include <SPI.h>
#include <LoRa.h>

const int wakeUpPin = 3;

void wakeUp ()
{
}

void setup () {
   if (! LoRa.begin (915E6)) {
      LoRa.end ();
      pinMode (LED_BUILTIN, OUTPUT);
      while (1) { 
         digitalWrite (LED_BUILTIN,! digitalRead (LED_BUILTIN)); 
         LowPower.powerDown (SLEEP_250MS, ADC_OFF, BOD_OFF);
      }
   }
   pinMode (wakeUpPin, INPUT_PULLUP);
   attachInterrupt (digitalPinToInterrupt (wakeUpPin), wakeUp, FALLING);
   LoRa.sleep ();
}

void loop () {
   LowPower.powerDown (SLEEP_FOREVER, ADC_OFF, BOD_OFF);
   LoRa.idle (); 
   LoRa.beginPacket ();
   LoRa.print ( "Hello!");
   LoRa.endPacket (); 
   LoRa.sleep ();
}

Когда вывод 3 заземляется, плата просыпается, отправляет пакет и снова переходит в спящий режим. Не хотелось бы усложнять устройство и добавлять в схему часы для внешних прерываний.

Помогите изменить этот скетч так, чтобы можно было использовать встроенный сторожевой таймер вместо внешнего прерывания. Возможно есть другие варианты. Заранее благодарю за помощь. 

Или поставлю вопрос по-другому. Как изменить скетч  для проверки соединений  LoRa и тока сна (ниже), чтобы отправить сообщение?

#include "LowPower.h"
#include <SPI.h>
#include <LoRa.h>

void setup () {
   if (! LoRa.begin (915E6)) {
      LoRa.end ();
      pinMode (LED_BUILTIN, OUTPUT);
      while (1) { 
         digitalWrite (LED_BUILTIN,! digitalRead (LED_BUILTIN)); 
         LowPower.powerDown (SLEEP_250MS, ADC_OFF, BOD_OFF);
      }
   }
   LoRa.sleep ();
}

void loop () {
   LowPower.powerDown (SLEEP_FOREVER, ADC_OFF, BOD_OFF);
}