🤖Have you ever tried Chat.M5Stack.com before asking??😎
    M5Stack Community
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Register
    • Login

    Wake up using button A or button b

    M5 Stick/StickC
    2
    3
    4.2k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • I
      irokoi
      last edited by

      Hey, i try to wakeup m5stickc from deepsleep using button A or B with this function : esp_sleep_enable_ext1_wakeup with ESP_EXT1_WAKEUP_ANY_HIGH mode. Problem encountered is that A and B button have pullup enabled.

      Im aware that A and B button pull their respective GPIO low when pressed. How to activated pulldown for these buttons? i can't use ESP_EXT1_WAKEUP_ALL_LOW mode because wake up enabled when all GPIOs are low...

      gpio_pulldown_en(); has no effect!

      This is my code:

      #define BUTTON_PIN_BITMASK (BIT64(GPIO_NUM_37)| BIT64(GPIO_NUM_39))
      
      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;
        }
      }
      
      /*
      Method to print the GPIO that triggered the wakeup
      */
      void print_GPIO_wake_up(){
        uint64_t GPIO_reason = esp_sleep_get_ext1_wakeup_status();
        Serial.print("GPIO that triggered the wake up: GPIO ");
        Serial.println((log(GPIO_reason))/log(2), 0);
      }
        
      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();
      
        //Print the GPIO used to wake up
        print_GPIO_wake_up();
      
        /*
        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.
        */
        
        gpio_pulldown_en(GPIO_NUM_39);
        gpio_pulldown_en(GPIO_NUM_37);
        gpio_pullup_dis(GPIO_NUM_39);
        gpio_pullup_dis(GPIO_NUM_37);
        //If you were to use ext1, you would use it like
        esp_sleep_enable_ext1_wakeup(BUTTON_PIN_BITMASK,ESP_EXT1_WAKEUP_ANY_HIGH);//ESP_EXT1_WAKEUP_ANY_HIGH  ESP_EXT1_WAKEUP_ALL_LOW
        //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
      }
      

      Thanks for your help

      1 Reply Last reply Reply Quote 0
      • felmueF
        felmue
        last edited by

        Hello @irokoi

        have you considered using ext0 instead? E.g.

        esp_sleep_enable_ext0_wakeup(GPIO_NUM_37, LOW);
        esp_sleep_enable_ext0_wakeup(GPIO_NUM_39, LOW);
        

        Thanks
        Felix

        GPIO translation table M5Stack / M5Core2
        Information about various M5Stack products.
        Code examples

        1 Reply Last reply Reply Quote 0
        • I
          irokoi
          last edited by

          thanks, I think it's the only solution ;)

          1 Reply Last reply Reply Quote 0
          • First post
            Last post