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

    How long M5stack-paper can sleep for?

    PRODUCTS
    paper m5stack-paper
    2
    11
    5.9k
    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.
    • felmueF
      felmue
      last edited by felmue

      Hello @ScheduleDisplay

      M5.shutdown(secs) uses the timer function of the RTC. According to the documentation the timer is 8 bits and it slowest clock source is 1/60 Hz. So you get about 255 x 60 s = 15300 s which is roughly 4 h (= 14400 s).

      Re 1.) So yes, there is a limitation of the sleep duration when using the timer function of the RTC.

      If you need longer period than 4 hours you need to look into the alarm functionality of the RTC. E.g. you first need to read the RTC time, add the amount you want to sleep to it and then set the alarm accordingly.

      M5.shutdown(const rtc_date_t &RTC_DateStruct, const rtc_time_t &RTC_TimeStruct) can be used to set the alarm, but it only works when you first calculate the alarm time in relation the actual time in the RTC.

      Note: the actual time in the RTC resets when there is no USB and the battery has run out of juice. The actual time is not automatically the time on you wall clock (except when you actually set it in the RTC). But for the alarm function to be used it doesn't have to be synced with the wall clock - it's only important that you know the time the RTC so you can calculate the difference and set the alarm.

      Re 2.) so no other shutdown function is needed.

      Thanks
      Felix

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

      1 Reply Last reply Reply Quote 1
      • ScheduleDisplayS
        ScheduleDisplay
        last edited by

        Hello Felix,
        Thank you very much for your reply.

        I updated the code according to your suggestion.

        1. I know the actual time so I set the actual date and time of RTC.
          rtc_date_t RTCDate;
          rtc_time_t RTCtime;
        
          RTCDate.year = year();
          RTCDate.mon  = month();
          RTCDate.day  = day();
          M5.RTC.setDate(&RTCDate);
        
          RTCtime.hour = hour();
          RTCtime.min  = minute();
          RTCtime.sec  = second();
          M5.RTC.setTime(&RTCtime);
        
          Serial.print("\n Actual RTC date and time  =>" + String(RTCDate.day) + "-" + String(RTCDate.mon) + "-" + String(RTCDate.year) + " " + String(RTCtime.hour) + ":" + String(RTCtime.min) + ":" + String(RTCtime.sec) );
        
        
        1. I also know the sleep duration in secs. for example 30 minutes (1800 secs). So I added these secs into the current time to get the wakeup time in the future.
        int nextRereshTimeInSecs = now() + 1800;
        setTime(nextRereshTimeInSecs);
        
        1. Then I set the alarm using setAlarmIRQ(const rtc_date_t &date, const rtc_time_t &time) and shut down the M5stack-paper.
            rtc_date_t wakeupDate;
            rtc_time_t wakeupTime;
        
            int currentYear = year();
            int8_t int8_year = currentYear % 100;
            int8_t int8_month = month();
            int8_t int8_day = day(); 
            
            // Populate rtc_date_t structure
            wakeupDate.year = int8_year ;
            wakeupDate.mon = int8_month ;
            wakeupDate.day = int8_day;
        
            int8_t int8_hour = hour();
            int8_t int8_minute = minute();
            int8_t int8_second = second(); 
            // Populate rtc_time_t structure
            wakeupTime.hour = int8_hour;
            wakeupTime.min = int8_minute;
            wakeupTime.sec = int8_second;
        
            Serial.print("\n Future RTC date and time  =>" + String(wakeupDate.day) + "-" + String(wakeupDate.mon) + "-" + String(wakeupDate.year) + " " + String(wakeupTime.hour) + ":" + String(wakeupTime.min) + ":" + String(wakeupTime.sec) );
        
            delay(300);
            M5.RTC.clearIRQ();
            M5.RTC.setAlarmIRQ(wakeupDate, wakeupTime);
        
            delay(10);
            M5.shutdown();
        

        Currently, I am testing it with the sleep duration of 30 minutes and it looks like working. I will test it for more than 4 hours tonight.

        The question is that, do I have to use
        M5.shutdown( wakeupDate, wakeupTime)

        OR

        is it OK what I am currently using
        M5.RTC.setAlarmIRQ(wakeupDate, wakeupTime);
        M5.shutdown();

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

          Hello @ScheduleDisplay

          it doesn't really matter as `M5.shutdown( wakeupDate, wakeupTime) essentially does the same. See here.

          Thanks
          Felix

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

          ScheduleDisplayS 1 Reply Last reply Reply Quote 0
          • ScheduleDisplayS
            ScheduleDisplay @felmue
            last edited by

            @felmue I tried longer sleep duration of 9 hours and unfortunately the device didn't wakeup.
            Is it possible that M5.RTC.setAlarmIRQ(wakeupDate, wakeupTime); also has a limitaiton of max 4 hours of sleep duration?

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

              Hello @ScheduleDisplay

              no, I don't think there is a limitation. This is a regular alarm function of the RTC which should allow an alarm even years from now.

              But I noticed that the code in the library adds a small delay(10) to make sure the I2C command to set the alarm time has finished before powering off.

              The only other reason I could think of that the M5Paper doesn't wake up anymore would be a flat battery.

              Thanks
              Felix

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

              ScheduleDisplayS 1 Reply Last reply Reply Quote 0
              • ScheduleDisplayS
                ScheduleDisplay @felmue
                last edited by ScheduleDisplay

                @felmue Hello Felix.

                1. I also already had delay (10) before M5.shutdown();
                  Do I2CEnable need to be TRUE in M5 initialization? to use I2C commands?
                  I have it False in M5 initialization call M5.begin(true, false, true, true, false);, could this be a problem?
                  However, it is working fine if the sleep duration is less than 4 hours

                2. M5Paper has 100% battery, I can restart it manually by pressing the side button. The battery is showing as 100%

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

                  Hello @ScheduleDisplay

                  No, if the touch is enabled (first true) then that already is done there. See here.

                  Ok - battery - I am afraid I am not sure why it would fail then.

                  Thanks
                  Felix

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

                  ScheduleDisplayS 1 Reply Last reply Reply Quote 0
                  • ScheduleDisplayS
                    ScheduleDisplay @felmue
                    last edited by

                    @felmue Hello Felix.
                    Is it possible to provide me the working code snippet with longer than 4 hours sleep duration?

                    Or

                    Can you please check if there is any problem with the code snippet I posted earlier?

                    Thanks

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

                      Hello @ScheduleDisplay

                      please find an example here which (when turned on by power button) shuts down and wakes up from RTC about 7 hours later.

                      Note: only using the hour field gives you a maximum of 23 hours. If you need more you'll need to also use the day and maybe year fields.

                      Thanks
                      Felix

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

                      ScheduleDisplayS 1 Reply Last reply Reply Quote 1
                      • ScheduleDisplayS
                        ScheduleDisplay @felmue
                        last edited by

                        @felmue Hello Felix.
                        Thank you very much for your help.
                        I get it working using the hour field with some little changes.

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