🤖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
    3
    10
    2.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.
    • H
      Hopichek
      last edited by

      Hello!

      I use UIFlow 1.13.4 and M5stickc plus2

      def buttonA_wasDoublePress():
      global peer_mac, data, Sleep, Speed, Rudder_Angle, Select, cnt_succes, flag_cb
      M5pwr.brightness(0)
      p37 = machine.Pin(37, mode = machine.Pin.IN, pull = machine.Pin.PULL_UP)
      p37.irq(trigger = machine.Pin.WAKE_LOW, wake = machine.DEEPSLEEP)
      machine.deepsleep(20000)
      pass
      btnA.wasDoublePress(buttonA_wasDoublePress)

      I'm trying to add a deep sleep mode. But the device simply turns off when you press button A twice.

      Tell me how to realize deep sleep in UIFlow on M5stickc plus2.

      Thanks a lot.

      1 Reply Last reply Reply Quote 0
      • 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 😏

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