Open
Conversation
Contributor
|
Tested on custom esp32-c3 board, works as expected |
Contributor
Author
|
Can I get some eyes on this? |
Contributor
Author
|
Brought this code up to date with the sfusion merging, now theoretically all IMUs supported by sfusion should also be supported by this PR. |
Member
|
I'll check this later after work, looks good though. |
Contributor
Author
|
@Vyolex Currently there is a weird drifting issue that happens with this branch, and I want to rewrite some of the logic a bit, to make it non-blocking, so I wouldn't bother yet. |
d8e7bcc to
22d1722
Compare
kounocom
approved these changes
Jan 24, 2025
b2985d4 to
56f3d0f
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR adds in support for non-blocking momentary push button based ON-OFF functionality using the ESP's deep sleep feature.
The code was tested on an ESP8266 (specifically a D1 mini) and an ESP32-C3 (supermini esp32c3). For the latter, attaching a push button between GND and any of the RTC GPIOs (GPIO0-5), the code should work, but for the ESP8266, the following hardware needs to be added:
GPIO13 can be set to any of the safe pins (4, 5, 12, 13, 14), however the other ones are already used by the default SlimeVR setup.
I have tried to make the setup work with a MOSFET instead of a transistor, but didn't manage to yet.The on-off behaviour can be activated by defining ON_OFF_BUTTON_PIN inside defines.h. For example:
for a D1 mini.
Functionality
When the tracker is on, holding down the button for 1 second puts it to deep sleep (this is debounced). When it's in deep sleep, pressing the button once will wake it up, resetting it.
The tracker attempts to deinitialize the imus attached to it. Using an ESP32, it's also possible to define a pin that acts as an enable pin for the IMU (or other hardware), for possibly a voltage regulator or mosfet, that completely depowers the IMU. This functionality is not available on ESP8266, due to it lacking deep sleep pin hold functionality. To use this feature, one needs to define
BUTTON_IMU_ENABLE_PINand optionallyBUTTON_IMU_ENABLE_ACTIVE_LEVEL(defaults to HIGH if not defined).Additionally the tracker can be made to automatically shut off after a certain period of inactivity or if the battery voltage drops below a certain threshold. Both of these are meant to stop the tracker from depleting the battery to dangerous levels if accidentally left on. To use these features, define
BUTTON_AUTO_SLEEP_TIME_SECONDSandBUTTON_BATTERY_VOLTAGE_THRESHOLDrespectively.While it varies, this setup should drop the power consumption to somewhere around 100-200uA, or even lower, if the IMU is completely depowered.
Battery consumption
Things that need checking: