Unable to wake M5StickC using SH200Q's activity interrupt



  • According to some of the documentation (and a random issue on GitHub), the SH200Q should be hooked up to GPIO35 to wake the stick from deep sleep upon activity. While running, I can see this interrupt being triggered, but it never actually wakes from deep sleep.

    Here's the code I use to set up the interrupt:

    // Enable acc interrupt
      buf = 1<<1;
      M5.IMU.I2C_Write_NBytes(SH200I_ADDRESS, 0x14, 1, &buf);
    
      // Set acc threshold
      buf = 100;
      M5.IMU.I2C_Write_NBytes(SH200I_ADDRESS, 0x17, 1, &buf);
      
      // Set amount of time acc must be in threshold before interrupt is triggered
      buf = 4;
      M5.IMU.I2C_Write_NBytes(SH200I_ADDRESS, 0x19, 1, &buf);
    
      // set gyro x/y/z as inputs for interrupt (bit 7 enables the use of TIME_THRESHOLD)
      buf = 1<<4 | 1<<5 | 1<<6 | 1<<7;
      M5.IMU.I2C_Write_NBytes(SH200I_ADDRESS, 0x1B, 1, &buf);
    

    And this is the line that should enable wake on GPIO35 activity:
    esp_sleep_enable_ext0_wakeup((gpio_num_t)35, 1); // set ext0 to wake up when GPIO35 is high

    I've also tried enabling wakeup on one of the external M5Stick buttons as a sanity check.. that worked fine.

    My question; is the SH200Q's interrupt actually hooked up to anything, and if so what? Or is there some error in my code?



  • IMU does not control GPIO35 to issue an interrupt



  • Should this work when using the M5StickC model with the MPU6886 IMU?

    The schematic suggests that GPIO35 is wired to the external interrupt of the MPU6886 https://docs.m5stack.com/#/en/core/m5stickc

    Cheers,
    Dave



  • @marsalkm This ability should work on M5StickC units with the MPU6886. There's more info on this thread here:
    https://community.m5stack.com/topic/2039/wake-up-on-pick-up