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

    M5stickc plus2 DeepSleep

    M5 Stick/StickC
    4
    12
    3.0k
    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.
    • C
      Cognitive5525
      last edited by Cognitive5525

      The "deepsleep" function of the M5StickC PLUS2 is taken care of by an external hardware-RTC (RTCBM8563). Have a look at the electric diagram on the doc page. I don't think you can use the "generic" Micropython machine.deepsleep()

      You should use the Power.timerSleep(sec) which is a part of the "built-in" M5 library.

      A tip if you are programming directly in Micropython and uploading via the serial port. You can use the UIFlowl web site as a kind of "API-reference". Go in and find the UIFlow "brick/function" you'll like to use and then see what Micropython code it generates.Here is an example:

      0_1714408864101_3a54a202-cfd4-4979-bbf1-a68a13917ceb-image.png

      1 Reply Last reply Reply Quote 1
      • C
        Cognitive5525
        last edited by

        And maybe also upgrade to version 2.0.4:
        0_1714409688082_9410cad1-deab-49ce-9c75-58f0b056d21b-image.png

        H 1 Reply Last reply Reply Quote 1
        • H
          Hopichek @Cognitive5525
          last edited by

          @cognitive5525

          The problem is that I created a fairly large project in Flow 1.13 using functions that are not in Flow 2. Therefore, the question is rather how to implement deep sleep specifically in Flow 1.13. And I don't understand why the standard function doesn't work(

          The whole project is written in blocks in flow and in python I want to finish writing a deep sleep.

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

            Hello @Hopichek

            the HOLD pin (GPIO4) needs to stay high during deep sleep to keep the ESP32 powered.
            Try the following to keep the value of the HOLD pin during deep sleep:

            from machine import Pin, deepsleep
            Pin(4, Pin.OUT, value=1, pull=Pin.PULL_HOLD) # HOLD PIN - UIFlow1
            #Pin(4, Pin.OUT, value=1, hold=True) # HOLD PIN - UIFlow2
            deepsleep(20000)
            

            Note: verified with an M5Paper which has a similar power architecture.

            Thanks
            Felix

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

            C H 2 Replies Last reply Reply Quote 1
            • C
              Cognitive5525
              last edited by

              If you look at the electric diagram I referenced you'll see that there is a power circuit that relies on a software implemented power-on hold function.
              The ESP32 must pull up GPIO4 ("HOLD") to keep the system power on which include the power for the ESP32 itself.
              When you call the standard machine.deepsleep() which is designed to use the ESP32 internal deep-sleep which relies on power to the ESP32, then the GPIO4 will turn low and cause the external power circuit to cut power to the entire system - expect for the BM8563 RTC. Now the ESP32 has no power and will never wake up again.
              The only way to power on again is to press the power button (designated S3 on the diagram) or if the BM8563 RTC pulls down the INT signal at some point. The BM8563 must be set up on beforehand with a timeout or date to pull the the INT signal.
              "Under the hood" in UIFlow firmware the GPIO4 will be pulled high just after boot i.e. when the power is turned on either by the power button or the INT signal from the BM8563 RTC. That is also why you have to keep the power button pressed a few seconds for the system to start - the ESP32 has to reach the point where it holds power on by itself - i.e. pulling GPIO4 high.

              I had a look at the UIFlow 1.x for M5stickC Plus 2 and there are some functions under RTC where you can set timeout and interrupt. I think you might bee able to do the following:

              • Enable timer interrupt (from RTC section)
              • set timer value (from RTC section)
              • power off (from Power section)
              1 Reply Last reply Reply Quote 1
              • C
                Cognitive5525 @felmue
                last edited by

                @felmue said in M5stickc plus2 DeepSleep:

                the HOLD pin (GPIO4) needs to stay high during deep sleep to keep the ESP32 powered.
                Try the following to keep the value of the HOLD pin during deep sleep:
                from machine import Pin, deepsleep
                Pin(4, Pin.OUT, value=1, pull=Pin.PULL_HOLD) # HOLD PIN - UIFlow1
                #Pin(4, Pin.OUT, value=1, hold=True) # HOLD PIN - UIFlow2
                deepsleep(20000)

                Here the system power is kept on - how is the power consumption compared to when only the BM8563 RTC is powered?

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

                  Hello @Cognitive5525

                  I don't have an M5StickCPlus2 so I cannot do the necessary measurements. But in the past I measured the M5Paper power consumption for both sleep and shutdown modes. Please see here. The power consumption in shutdown mode (only RTC running) drops to about 2.7 uA.

                  Thanks
                  Felix

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

                  1 Reply Last reply Reply Quote 0
                  • H
                    Hopichek @felmue
                    last edited by

                    @felmue Thanks a lot, everything is working!

                    C 1 Reply Last reply Reply Quote 0
                    • C
                      Cognitive5525 @Hopichek
                      last edited by

                      @hopichek,
                      While Felix's method do work, please note it is only putting the ESP32 itself in deep sleep not the rest of the board. I don't know your power saving requirements for the sleeping periods, but with the suggestion* I described above you'll probably get an even lower power consumption during deep sleep.

                      *) if it works 😏

                      W 1 Reply Last reply Reply Quote 0
                      • W
                        wjcarpenter @Cognitive5525
                        last edited by

                        Thanks to those who provided information about this in this thread. I can see in retrospect that it is explained on the P2 documentation page, though in a way that makes a casual observer (like me :-) ) think "why are they telling me this? doesn't seem like something I need to know."

                        I don't use UIFlow, so I had to do a little detective work to figure out how to do the equivalent in the Arduino framework. AFAIK, Arduino doesn't know anything about "hold", and you have to call an ESP32 native function to achieve it.

                        Here's what worked for me:

                        pinMode(4, OUTPUT);
                        digitalWrite(4, HIGH);
                        gpio_hold_en(GPIO_NUM_4);  // this is the interesting line
                        esp_sleep_enable_timer_wakeup(6 * 1000 * 1000);
                        esp_deep_sleep_start();
                        
                        W 1 Reply Last reply Reply Quote 0
                        • W
                          wjcarpenter @wjcarpenter
                          last edited by

                          And I just noticed that @felmue has an Arduino example of exactly that here: https://github.com/felmue/MyM5StackExamples/blob/main/M5StickCPlus2/SleepAndPowerOffTest/SleepAndPowerOffTest.ino

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