SlimeVR / SlimeVR-Tracker-ESP

SlimeVR tracker firmware for ESP32/ESP8266 and different IMUs
Apache License 2.0
798 stars 274 forks source link

Added ON-OFF button support #318

Open gorbit99 opened 3 months ago

gorbit99 commented 3 months ago

This PR adds in support for 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:

kép

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 inside defines.h. For example:

#define ON_OFF_BUTTON D7

for a D1 mini.

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 hold down time can be changed by defining ON_OFF_BUTTON_HOLD_TIME_MS in defines.h.

The tracker attempts to deinitialize the imus attached to it.

While it varies, this setup should drop the power consumption to somewhere around 100-200uA.

Things that need checking:

It's also theoretically possible to add in a hold time for turning on the tracker for the ESP32 variant, but since this isn't at all possible for the ESP8266, I didn't implement it.

kounocom commented 3 months ago

Tested on custom esp32-c3 board, works as expected

gorbit99 commented 1 month ago

Can I get some eyes on this?

gorbit99 commented 1 week ago

Brought this code up to date with the sfusion merging, now theoretically all IMUs supported by sfusion should also be supported by this PR.