diff --git a/TODO.md b/TODO.md index 27a787751..c7508525b 100644 --- a/TODO.md +++ b/TODO.md @@ -18,7 +18,7 @@ * use a freertos thread to remain blocked reading from recvfromAckTimeout, so that we don't need to keep polling it from our main thread * override peekAtMessage so we can see any messages that pass through our node (even if not broadcast)? would that be useful? * sendToMesh can currently block for a long time, instead have it just queue a packet for a radio freertos thread - +* see section 7.3 of https://cdn.sparkfun.com/assets/learn_tutorials/8/0/4/RFM95_96_97_98W.pdf and have hope radio wake only when a valid packet is received. Possibly even wake the ESP32 from deep sleep via GPIO. * fix the logo # Pre-beta priority diff --git a/src/MeshRadio.h b/src/MeshRadio.h index 065a00f17..e9269b400 100644 --- a/src/MeshRadio.h +++ b/src/MeshRadio.h @@ -22,6 +22,9 @@ public: bool init(); + /// Prepare the radio to enter sleep mode, where it should draw only 0.2 uA + void sleep() { rf95.sleep(); } + /// Send a packet - the current implementation blocks for a while possibly (FIXME) ErrorCode sendTo(NodeNum dest, const uint8_t *buf, size_t len); diff --git a/src/configuration.h b/src/configuration.h index 071bbe920..3c55cae6b 100644 --- a/src/configuration.h +++ b/src/configuration.h @@ -42,7 +42,7 @@ along with this program. If not, see . #define DEBUG_PORT Serial // Serial debug port #define SERIAL_BAUD 115200 // Serial debug baud rate -#define SLEEP_MSECS (5 * 60 * 1000) // Sleep for these many millis (or a button press or a lora msg?) +#define SLEEP_MSECS (24 * 60 * 60 * 1000) // Sleep for these many millis (or a button press or a lora msg?) #define MESSAGE_TO_SLEEP_DELAY 5000 // Time after message before going to sleep #define LOGO_DELAY 5000 // Time to show logo on first boot #define REQUIRE_RADIO true // If true, we will fail to start if the radio is not found @@ -129,9 +129,9 @@ along with this program. If not, see . #define BUTTON_PIN 0 #define RESET_GPIO 14 -#define DIO0_GPIO 34 -#define DIO1_GPIO 35 -#define DIO2_GPIO 32 // Note: not really used on this board +#define DIO0_GPIO 26 +#define DIO1_GPIO 35 +#define DIO2_GPIO 34 #endif diff --git a/src/main.ino b/src/main.ino index 8de2974d0..7cf2c50d4 100644 --- a/src/main.ino +++ b/src/main.ino @@ -60,6 +60,9 @@ void doDeepSleep(uint64_t msecToWake) // FIXME, shutdown radiohead interrupts before powering off device + // Put radio in sleep mode (will still draw power but only 0.2uA) + radio.sleep(); + #ifdef T_BEAM_V10 if (axp192_found) { @@ -316,7 +319,7 @@ void loop() #ifdef LED_PIN // toggle the led so we can get some rough sense of how often loop is pausing digitalWrite(LED_PIN, digitalRead(LED_PIN) ? 0 : 1); -#endif +#endif #ifdef BUTTON_PIN // if user presses button for more than 3 secs, discard our network prefs and reboot (FIXME, use a debounce lib instead of this boilerplate) @@ -345,19 +348,14 @@ void loop() } #endif - // Send every SEND_INTERVAL millis - static uint32_t last = 0; - if (true) - { #ifdef MINWAKE_MSECS - if (millis() > MINWAKE_MSECS) - { - sleep(); - } + if (millis() > MINWAKE_MSECS) + { + sleep(); + } #endif - // No GPS lock yet, let the OS put the main CPU in low power mode for 100ms (or until another interrupt comes in) - // i.e. don't just keep spinning in loop as fast as we can. - delay(100); - } + // No GPS lock yet, let the OS put the main CPU in low power mode for 100ms (or until another interrupt comes in) + // i.e. don't just keep spinning in loop as fast as we can. + delay(100); } \ No newline at end of file