🤖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

    Scheduled Pinned Locked Moved M5 Stick/StickC
    3 Posts 2 Posters 5.0k Views
    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 Offline
      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 Online
        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 Offline
          irokoi
          last edited by

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

          1 Reply Last reply Reply Quote 0

          Hello! It looks like you're interested in this conversation, but you don't have an account yet.

          Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

          With your input, this post could be even better 💗

          Register Login
          • First post
            Last post