VL53L1X no funciona despues de un deep sleep

Hola tengo un Arduino nano ESP32, despuÉs de hacer un deEp sleep no se inicializa el sensor infrarrojo,sabéis porque.

void setup() {
  Serial.begin(9600);



  // inicialización infrarrojo
  //selecciona sensor de distancia
  tcaselect(0);
  Serial.println("VL53L0X test 1");

  if (!sensor2.init()) {
    Serial.println(("Error al iniciar VL53L0X"));
    ESP.restart();
  }
  sensor2.setDistanceMode(VL53L1X::Short);    // Preciso para cerca
  sensor2.setMeasurementTimingBudget(20000);  // Lecturas rápidas (cada ~20ms)




  Serial.println("VL53L0X test 2");
  tcaselect(1);
  if (!sensor1.init()) {
    Serial.println(("Error al iniciar VL53L0X"));
    ESP.restart();
  }

  sensor1.setDistanceMode(VL53L1X::Short);    // Preciso para cerca
  sensor1.setMeasurementTimingBudget(20000);  // Lecturas rápidas (cada ~20ms)


  delay(500);

pinMode(interruptPin, INPUT_PULLUP);  //RESISTENCIA INTERNA
  pinMode(PinInterrupcion, INPUT_PULLUP);
  esp_sleep_enable_ext0_wakeup(interruptPin, 1);
}


void MagneticReed(void) {


  bool estadoPuertaActual = digitalRead(PinInterrupcion);
  unsigned long tiempoActual = millis();
  //Serial.println(estadoPuerta);
  // Serial.println(estadoAnterior);
  // Serial.println("finpuerta");


  if (estadoPuertaActual != estadoAnterior) {
    tiempoAnterior = millis();
    estadoAnterior = estadoPuertaActual;
  }

  if (tiempoActual - tiempoAnterior > 200) {  // rebotes

    estadoPuerta = estadoPuertaActual;
 
    

    if (estadoPuerta == 1 || (estadoPuerta == 0 && counter > 0)) {
      
//CODIGO
     }
     else {
                                      
            

           
             esp_deep_sleep_start();

             delay(1000);
                    
           
         
        
      }
   
  }

Debo reconocer que jamás trabaje con ese sensor pero... ¿Te esta compilando ese ese código? No cargas ninguna librería, ni inicializas el sensor

la libreria esta cagada e inicializado el sensor

El código que adjuntaste no está completo.

Completa el código porque como te señalan los compañeros el código esta incompleto.
Yo tengo el sensor y no puedo probar tu código justamente por eso.

Algo más, estas usando un multiplexor I2C, si es así, agrega un esquema de como esta todo conectado.

Para mi te falta

#include <VL53L1X.h>
#include <esp_sleep.h>

y mucho mas código.

después del deepSleep no se inicializa el sensor

#include <esp_sleep.h>
#include <VL53L1X.h>

#define interruptPin GPIO_NUM_12
#define TCAADDR 0x70 
const int PinInterrupcion = 2;

VL53L1X sensor1;

VL53L1X sensor2;

void tcaselect(uint8_t i) {
  if (i > 7) return;

  Wire.beginTransmission(TCAADDR);
  Wire.write(1 << i);
  Wire.endTransmission();
  delay(10);
}



void todasTareas(void *parameter);
void MagneticReed(void); 

RTC_DATA_ATTR int counter = 0;
int estadoPuerta = 0;

int estadoAnterior = 0;            // Estado del pin en la lectura anterior
unsigned long tiempoAnterior = 0;  // Tiempo de la última lectura

void setup() {
  Serial.begin(9600);

  
   // inicialización I2C
  Wire.begin();
  delay(500);

  
  // inicialización infrarrojo
  //selecciona sensor de distancia
  tcaselect(0);
  Serial.println("VL53L0X test 1");

  if (!sensor2.init()) {
    Serial.println(("Error al iniciar VL53L0X"));
    ESP.restart();
  }
  sensor2.setDistanceMode(VL53L1X::Short);    // Preciso para cerca
  sensor2.setMeasurementTimingBudget(20000);  // Lecturas rápidas (cada ~20ms)




  Serial.println("VL53L0X test 2");
  tcaselect(1);
  if (!sensor1.init()) {
    Serial.println(("Error al iniciar VL53L0X"));
    ESP.restart();
  }

  sensor1.setDistanceMode(VL53L1X::Short);    // Preciso para cerca
  sensor1.setMeasurementTimingBudget(20000);  // Lecturas rápidas (cada ~20ms)


  delay(500);




  //mode sleep

  pinMode(interruptPin, INPUT_PULLUP);  //RESISTENCIA INTERNA
  pinMode(PinInterrupcion, INPUT_PULLUP);
  esp_sleep_enable_ext0_wakeup(interruptPin, 1);  // Habilitar interrupciones externas



  // Crear tareas
 
  
  xTaskCreatePinnedToCore(todasTareas, "TareasSecuenciales", 8192, NULL, 1, NULL, 1);
}
void loop() {}

void todasTareas(void *parameter) {



  for (;;) {
   
    MagneticReed();  // Siempre activo

    if (estadoPuerta == 0 && counter > 0) {
      // lee unos sensores
      }
    vTaskDelay(50 / portTICK_PERIOD_MS);  // Delay de cada ciclo del loop
  }
}

void MagneticReed(void) {


  bool estadoPuertaActual = digitalRead(PinInterrupcion);
  unsigned long tiempoActual = millis();


  if (estadoPuertaActual != estadoAnterior) {
    tiempoAnterior = millis();
    estadoAnterior = estadoPuertaActual;
  }

  if (tiempoActual - tiempoAnterior > 200) {  // rebotes

    estadoPuerta = estadoPuertaActual;
   
    

    if (estadoPuerta == 1 || (estadoPuerta == 0 && counter > 0)) {
      
     // codigo
       
     }
     else {
          

           
              esp_deep_sleep_start();
       
             
           
         
        
      }
    }
  }

Yo probaría cerrar la comunicación con wire.end() y reinicializarla con Wire.begin()

he probado con wire.end y wire.begin y sigue sin funcionar. después del deep hago un escaneo del bus i2c y no encuentra nada. Y si cargo otra vez el programa o otro similar tampoco reconoce, solo lo hace si quito la alimentación. Sabéis porque o como hacer para quitar la alimentación y volvérsela a poner.

Consulta con la documentación del sensor y del arduino que corriente consume cada uno y cuanta corriente puede suministrar un pin y si están dentro del rango, conecta la alimentación del sensor a un pin.

Y si le haces un reset?
Debes usar el pin xshut (consulta la documentación).

la solución ha sido poner un mosfet para que quite la alimentación