Esp32-c3-mini-1

Hey guys! I am working on a project wherein I have to use wifi and ble capabilities of the ESP32-C3-MINI-1 on small coin cell batteries. Since I want the project to be able to have a lifespan of approximately a year and a half, I decided it would be best to put the ESP in deep sleep (external wake-up caused by a push button) since the wifi and ble only need to be activated upon a specific interaction. Essentially, I want the MCU to wake up when the button is pressed and have the MCU illuminate a tri-color led (blue for initial pairing of the device, green and red as status indicators once activated for use). My plan was to use a B3F-1110 switch and use state detection code to allow it to be a toggle switch. However, I am having quite a bit of trouble with even getting the ESP to wake up by the external interrupt (that being the button). I am not sure whether my schematic (KiCAD schematic and Wokwi simulator) is wrong or whether the code I have used to test it (via online simulator: Wokwi ) is wrong. I would appreciate any and all input, thanks!

Sorry, but I not seen nether schematic nor simulation... Did you forget to include the links?

ah yes, i forgot to include them. Here they are:


#define BUTTON_PIN_BITMASK 0x200000000 // 2^33 in hex

RTC_DATA_ATTR int bootCount = 0;

/*
Method to print 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 ESP_SLEEP_WAKEUP_EXT0 : Serial.println("Wakeup caused by external signal using RTC_IO"); break;
    case ESP_SLEEP_WAKEUP_EXT1 : Serial.println("Wakeup caused by external signal using RTC_CNTL"); break;
    case ESP_SLEEP_WAKEUP_TIMER : Serial.println("Wakeup caused by timer"); break;
    case ESP_SLEEP_WAKEUP_TOUCHPAD : Serial.println("Wakeup caused by touchpad"); break;
    case ESP_SLEEP_WAKEUP_ULP : Serial.println("Wakeup caused by ULP program"); break;
    default : Serial.printf("Wakeup was not caused by deep sleep: %d\n",wakeup_reason); break;
  }
}

void setup(){
  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();

  /*
  First we configure the wake up source
  We set our ESP32 to wake up for an external trigger.
  There are two types for ESP32, ext0 and ext1 .
  ext0 uses RTC_IO to wakeup thus requires RTC peripherals
  to be on while ext1 uses RTC Controller so doesnt need
  peripherals to be powered on.
  Note that using internal pullups/pulldowns also requires
  RTC peripherals to be turned on.
  */
  esp_sleep_enable_ext0_wakeup(GPIO_NUM_33,1); //1 = High, 0 = Low

  //If you were to use ext1, you would use it like
  //esp_sleep_enable_ext1_wakeup(BUTTON_PIN_BITMASK,ESP_EXT1_WAKEUP_ANY_HIGH);

  //Go to sleep now
  Serial.println("Going to sleep now");
  delay(1000);
  esp_deep_sleep_start();
  Serial.println("This will never be printed");
}

void loop(){
  //This is not going to be called
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.