Welcome to the Pycom forum Forum
    • \[\[global:header.categories\]\]
    • \[\[global:header.recent\]\]
    • \[\[global:header.tags\]\]
    • \[\[global:header.popular\]\]
    • Login

    Explore Pybytes | Official Documentation | Report a Firmware Bug/Issue | GitHub

    30 sec boot time vs deep sleep

    Scheduled Pinned Locked Moved LoPy
    lopydeep sleepdeepsleep wakedeepsleepmpy-cross
    14 Posts 7 Posters 1.5k Views 8 Watching
    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.
    • M Offline
      martijnthe @jcaron
      last edited by

      @jcaron said in 30 sec boot time vs deep sleep:

      @martijnthe Are you sure the 30 seconds are really just loading the code?

      Pretty sure. I measured before and after the imports in boot.py and main.py and that's where the time is going. The imports themselves don't "do" anything but declare classes and functions.

      There's very little to no processing going on.

      robert-hhR 1 Reply Last reply Reply Quote 0
      • robert-hhR Offline
        robert-hh @martijnthe
        last edited by

        @martijnthe That seems to be a pretty large code, if it is pre-compiled and still requires 30 seconds for loading. Frozen bytecode would be faster because that is not moved to RAM, but stays in flash.

        M 1 Reply Last reply Reply Quote 0
        • M Offline
          martijnthe
          last edited by

          @crumble said in 30 sec boot time vs deep sleep:

          Check your code for all sleeps. Sounds like you wait a lot for the network inits and other stuff.

          There are no sleeps. The 30 secs is just for the import statements to complete (imports of modules that only contains function and class definitions).

          R 1 Reply Last reply Reply Quote 0
          • R Offline
            reidfo @martijnthe
            last edited by reidfo

            @martijnthe said in 30 sec boot time vs deep sleep:

            @crumble said in 30 sec boot time vs deep sleep:

            Check your code for all sleeps. Sounds like you wait a lot for the network inits and other stuff.

            There are no sleeps. The 30 secs is just for the import statements to complete (imports of modules that only contains function and class definitions).

            That's really a huge amount of time and code for an embedded device, especially if you want it to sleep. As suggested earlier, can you break up your code and only load what is necessary on each wakeup? My own code is too large to deep sleep, and even with sleeps, LTE connection, and MQTT connection, plus several imports it only takes about 5-10 seconds before everything is ready.

            1 Reply Last reply Reply Quote 0
            • M Offline
              martijnthe @robert-hh
              last edited by

              @robert-hh said in 30 sec boot time vs deep sleep:

              Frozen bytecode would be faster because that is not moved to RAM, but stays in flash.

              Thanks for that tip.
              That sounds much more attractive than breaking up the code to only load what's necessary.

              @reidfo said:

              My own code is too large to deep sleep, and even with sleeps, LTE connection, and MQTT connection, plus several imports it only takes about 5-10 seconds before everything is ready.

              TBH, 5-10 seconds latency to be able to respond to an external interrupt is unacceptably long. I'm used to microcontrollers where this takes only a couple microseconds!

              I'm also more used to microcontrollers where you (as developer) can decide what portions of RAM you want to keep alive during sleep so that don't loose everything when going to sleep. The ESP32 has a couple Ks of "RTC memory" which is kept alive in deep sleep, but I'm not sure if 1) it's accessible somehow from .py and 2) whether/for what it's currently used.

              Thanks for all the suggestions. Ideas I may try:

              • Bake the code into the firmware using "frozen bytecode" (still does not )
              • Investigate keeping PSRAM alive and re-using its contents + look into RTC RAM.
              robert-hhR A 2 Replies Last reply Reply Quote 1
              • robert-hhR Offline
                robert-hh @martijnthe
                last edited by

                @martijnthe About frozen bytecode: The 30 seconds boot time lets me gues that you have about 30.000 lines of code. Freezing that may overflow the partition size, which requires to rework the partition table.

                J 1 Reply Last reply Reply Quote 0
                • J Offline
                  jcaron @robert-hh
                  last edited by

                  @robert-hh which brings me back to my earlier point: who needs 30K lines of code on a battery-powered IoT sensor? Does it really need to run on the device itself, rather than on a server?

                  Also note that the more code you have on the device, the more difficult updates are going to be, especially if you use very low bandwidth networks (especially on the downlinks) such as LoRaWAN.

                  @martijnthe the Pycom modules try to bring the advantages of (micro)Python to an embedded platform (which makes development usually easier and quicker), but this will obviously have drawbacks if you compare that to raw assembly running directly "on the metal". If you want to get the highest performance (in terms of speed, code size, memory use...) out of the devices, and have full control of the ESP32, you'll probably have to switch to C and/or assembler directly. And if you have something around 30K of micro python, that would be an ever larger (and more difficult to maintain) codebase in C or assembler...

                  But do you really need that on an IoT sensor?

                  robert-hhR 1 Reply Last reply Reply Quote 0
                  • robert-hhR Offline
                    robert-hh @jcaron
                    last edited by

                    @jcaron I do not know how large the code is. So 30k lines uis just an extrapolation from the times I have seen. If the code is much smaller and still takes 30 to start, it's likely not just loading, but also a lot of code execution performed.

                    1 Reply Last reply Reply Quote 1
                    • P Offline
                      Paul Thornton
                      last edited by

                      Id like to take a look at this for you over the christmas holidays as 30 seconds really is abnormally long,

                      If your code could make its way over to paul@pycom.io with a link to this thread Ill keep it private and see what i can do :)

                      1 Reply Last reply Reply Quote 2
                      • A Offline
                        andreas @martijnthe
                        last edited by andreas

                        Dear @martijnthe,

                        we have been able to successfully get the boot time of our Terkin-Datalogger [1] from about 25 seconds down to about 3 seconds by freezing the modules like outlined by @robert-hh. The code base including all third-party modules is around 10 kLOC and we have released the result as builds called Annapurna [2].

                        With kind regards,
                        Andreas.

                        [1] https://github.com/hiveeyes/terkin-datalogger
                        [2] https://community.hiveeyes.org/t/annapurna-firmware-for-pycom-esp32/2754

                        1 Reply Last reply Reply Quote 2

                        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
                        • 1 / 1
                        • First post
                          Last post

                        Pycom on Twitter

                        Pycom