#include <SPI.h> | |
#include <RH_RF95.h> | |
#define uS_TO_S_FACTOR 1000000 //Conversion factor for micro seconds to seconds | |
#define TIME_TO_SLEEP 5 //Time ESP32 will go to sleep (in seconds) | |
RTC_DATA_ATTR int bootCount = 0; | |
#define RFM95_CS 18 | |
#define RFM95_RST 14 | |
#define RFM95_INT 26 | |
// Change to 434.0 or other frequency, must match RX's freq! | |
#define RF95_FREQ 915.0 | |
// Singleton instance of the radio driver | |
RH_RF95 rf95(RFM95_CS, RFM95_INT); | |
int mypin = 25; | |
void setup(){ | |
pinMode(mypin, OUTPUT); | |
Serial.begin(115200); | |
delay(1000); //Take some time to open up the Serial Monitor | |
//Increment boot number and print it every reboot | |
++bootCount; | |
Serial.println("Boot number: " + String(bootCount)); | |
//Print the wakeup reason for ESP32 | |
print_wakeup_reason(); | |
//Set timer to 5 seconds | |
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR); | |
Serial.println("Setup ESP32 to sleep for every " + String(TIME_TO_SLEEP) + | |
" Seconds"); | |
digitalWrite(mypin, HIGH); // turn the LED on (HIGH is the voltage level) | |
delay(100); // wait for a second | |
digitalWrite(mypin, LOW); // turn the LED off by making the voltage LOW | |
delay(100); | |
while (!rf95.init()) { | |
Serial.println("LoRa radio init failed"); | |
Serial.println("Uncomment '#define SERIAL_DEBUG' in RH_RF95.cpp for detailed debug info"); | |
while (1); | |
} | |
Serial.println("LoRa radio init OK!"); | |
// Defaults after init are 434.0MHz, modulation GFSK_Rb250Fd250, +13dbM | |
if (!rf95.setFrequency(RF95_FREQ)) { | |
Serial.println("setFrequency failed"); | |
while (1); | |
} | |
Serial.print("Set Freq to: "); Serial.println(RF95_FREQ); | |
rf95.setTxPower(23, false); | |
rf95.sleep(); | |
//Go to sleep now | |
esp_deep_sleep_start(); | |
} | |
void loop(){} | |
//Function that prints the reason by which ESP32 has been awaken from sleep | |
void print_wakeup_reason(){ | |
esp_sleep_wakeup_cause_t wakeup_reason; | |
wakeup_reason = esp_sleep_get_wakeup_cause(); | |
switch(wakeup_reason) | |
{ | |
case 1 : Serial.println("Wakeup caused by external signal using RTC_IO"); break; | |
case 2 : Serial.println("Wakeup caused by external signal using RTC_CNTL"); break; | |
case 3 : Serial.println("Wakeup caused by timer"); break; | |
case 4 : Serial.println("Wakeup caused by touchpad"); break; | |
case 5 : Serial.println("Wakeup caused by ULP program"); break; | |
default : Serial.println("Wakeup was not caused by deep sleep"); break; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment