Created
September 26, 2020 13:44
-
-
Save dwblair/5bd69024c8536780fa1e3bf835f1d8fb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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