diff --git a/components/badge23/espan.c b/components/badge23/espan.c
index b59346e24da5b6c5bafc5e6671110e9e0945ee1f..f8ba3fd9b827e15e46b7c273a9e6f52022b5920e 100644
--- a/components/badge23/espan.c
+++ b/components/badge23/espan.c
@@ -52,6 +52,7 @@ static esp_err_t i2c_master_init(void)
 }
 
 #define CAPTOUCH_POLLING_PERIOD 10
+static uint8_t hw_init_done = 0;
 
 void os_app_main(void)
 {
@@ -65,10 +66,11 @@ void os_app_main(void)
     init_buttons();
     captouch_init();
 
-    vTaskDelay(2000 / portTICK_PERIOD_MS);
+    //vTaskDelay(2000 / portTICK_PERIOD_MS);
     set_global_vol_dB(0);
 
     display_init();
+    hw_init_done = 1;
     while(1) {
         manual_captouch_readout(1);
         vTaskDelay((CAPTOUCH_POLLING_PERIOD) / portTICK_PERIOD_MS);
@@ -82,3 +84,8 @@ void os_app_main(void)
     ESP_ERROR_CHECK(i2c_driver_delete(I2C_MASTER_NUM));
     ESP_LOGI(TAG, "I2C de-initialized successfully");
 }
+
+uint8_t hardware_is_initialized(){
+    return hw_init_done;
+}
+
diff --git a/components/badge23/include/badge23/espan.h b/components/badge23/include/badge23/espan.h
index 2f40b8ab762024cb872b4ce99c7ac27497191963..7915f33e09ea0752b7b01903d018534cca7d6dd6 100644
--- a/components/badge23/include/badge23/espan.h
+++ b/components/badge23/include/badge23/espan.h
@@ -1,2 +1,4 @@
 #pragma once
+#include <stdint.h>
 void os_app_main(void);
+uint8_t hardware_is_initialized(void);
diff --git a/python_payload/main.py b/python_payload/main.py
index 1bbeed1cfff9bb45b2aa9908ae2252b7b762fe0a..571cdf042f1c604a3c2a8472a359ab646a269648 100644
--- a/python_payload/main.py
+++ b/python_payload/main.py
@@ -73,7 +73,9 @@ def set_rel_volume(vol):
 
 def main():
     global CURRENT_APP_RUN
-    time.sleep_ms(5000)
+    while not init_done():
+        pass
+
     captouch_autocalib()
 
     for module in MODULES:
diff --git a/usermodule/mp_hardware.c b/usermodule/mp_hardware.c
index 36ecb91ea367cdb4a6696a51c1974de1f9025d65..70522b900b83d984a9bcdf5f6f76d9a001ea6b0b 100644
--- a/usermodule/mp_hardware.c
+++ b/usermodule/mp_hardware.c
@@ -16,8 +16,14 @@
 #include "badge23/captouch.h"
 #include "badge23/display.h"
 #include "badge23/spio.h"
+#include "badge23/espan.h"
 #include "badge23_hwconfig.h"
 
+STATIC mp_obj_t mp_init_done(size_t n_args, const mp_obj_t *args) {
+    return mp_obj_new_int(hardware_is_initialized());
+}
+STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_init_done_obj, 0, 1, mp_init_done);
+
 STATIC mp_obj_t mp_display_update(size_t n_args, const mp_obj_t *args) {
     display_update();
     return mp_const_none;
@@ -128,6 +134,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_version_obj, mp_version);
 
 STATIC const mp_rom_map_elem_t mp_module_hardware_globals_table[] = {
     { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_badge_audio) },
+    { MP_ROM_QSTR(MP_QSTR_init_done), MP_ROM_PTR(&mp_init_done_obj) },
     { MP_ROM_QSTR(MP_QSTR_get_captouch), MP_ROM_PTR(&mp_get_captouch_obj) },
     { MP_ROM_QSTR(MP_QSTR_captouch_autocalib), MP_ROM_PTR(&mp_captouch_autocalib_obj) },
     { MP_ROM_QSTR(MP_QSTR_get_button), MP_ROM_PTR(&mp_get_button_obj) },