diff --git a/esphome/components/debug/__init__.py b/esphome/components/debug/__init__.py
index 1955b5d22c..4a48effa1e 100644
--- a/esphome/components/debug/__init__.py
+++ b/esphome/components/debug/__init__.py
@@ -8,6 +8,9 @@ from esphome.const import (
     CONF_ID,
     CONF_LOOP_TIME,
 )
+from esphome.components.zephyr import (
+    zephyr_add_prj_conf,
+)
 
 CODEOWNERS = ["@OttoWinter"]
 DEPENDENCIES = ["logger"]
@@ -42,5 +45,6 @@ CONFIG_SCHEMA = cv.All(
 
 
 async def to_code(config):
+    zephyr_add_prj_conf("HWINFO", True)
     var = cg.new_Pvariable(config[CONF_ID])
     await cg.register_component(var, config)
diff --git a/esphome/components/debug/debug_zephyr.cpp b/esphome/components/debug/debug_zephyr.cpp
new file mode 100644
index 0000000000..56b9222107
--- /dev/null
+++ b/esphome/components/debug/debug_zephyr.cpp
@@ -0,0 +1,59 @@
+#include "debug_component.h"
+#ifdef USE_ZEPHYR
+#include <climits>
+#include "esphome/core/log.h"
+#include <zephyr/drivers/hwinfo.h>
+
+namespace esphome {
+namespace debug {
+
+static const char *const TAG = "debug";
+
+static void set_reset_reason(std::string &reset_reason, bool set, const char *reason) {
+  if (!set) {
+    return;
+  }
+  if (reset_reason.size()) {
+    reset_reason += ", ";
+  }
+  reset_reason += reason;
+}
+
+std::string DebugComponent::get_reset_reason_() {
+  uint32_t cause;
+  auto ret = hwinfo_get_reset_cause(&cause);
+  if (ret) {
+    ESP_LOGE(TAG, "Unable to get reset cause: %d", ret);
+    return "";
+  }
+  std::string reset_reason;
+
+  set_reset_reason(reset_reason, cause & RESET_PIN, "External pin");
+  set_reset_reason(reset_reason, cause & RESET_SOFTWARE, "Software reset");
+  set_reset_reason(reset_reason, cause & RESET_BROWNOUT, "Brownout (drop in voltage)");
+  set_reset_reason(reset_reason, cause & RESET_POR, "Power-on reset (POR)");
+  set_reset_reason(reset_reason, cause & RESET_WATCHDOG, "Watchdog timer expiration");
+  set_reset_reason(reset_reason, cause & RESET_DEBUG, "Debug event");
+  set_reset_reason(reset_reason, cause & RESET_SECURITY, "Security violation");
+  set_reset_reason(reset_reason, cause & RESET_LOW_POWER_WAKE, "Waking up from low power mode");
+  set_reset_reason(reset_reason, cause & RESET_CPU_LOCKUP, "CPU lock-up detected");
+  set_reset_reason(reset_reason, cause & RESET_PARITY, "Parity error");
+  set_reset_reason(reset_reason, cause & RESET_PLL, "PLL error");
+  set_reset_reason(reset_reason, cause & RESET_CLOCK, "Clock error");
+  set_reset_reason(reset_reason, cause & RESET_HARDWARE, "Hardware reset");
+  set_reset_reason(reset_reason, cause & RESET_USER, "User reset");
+  set_reset_reason(reset_reason, cause & RESET_TEMPERATURE, "Temperature reset");
+
+  ESP_LOGD(TAG, "Reset Reason: %s", reset_reason.c_str());
+  return reset_reason;
+}
+
+uint32_t DebugComponent::get_free_heap_() { return INT_MAX; }
+
+void DebugComponent::get_device_info_(std::string &device_info) {}
+
+void DebugComponent::update_platform_() {}
+
+}  // namespace debug
+}  // namespace esphome
+#endif
diff --git a/tests/components/debug/test.nrf52-adafruit.yaml b/tests/components/debug/test.nrf52-adafruit.yaml
new file mode 100644
index 0000000000..dade44d145
--- /dev/null
+++ b/tests/components/debug/test.nrf52-adafruit.yaml
@@ -0,0 +1 @@
+<<: !include common.yaml
diff --git a/tests/components/debug/test.nrf52.yaml b/tests/components/debug/test.nrf52.yaml
new file mode 100644
index 0000000000..dade44d145
--- /dev/null
+++ b/tests/components/debug/test.nrf52.yaml
@@ -0,0 +1 @@
+<<: !include common.yaml
diff --git a/tests/test12.2.yaml b/tests/test12.2.yaml
index 3313e5d1cb..bca31947d1 100644
--- a/tests/test12.2.yaml
+++ b/tests/test12.2.yaml
@@ -76,3 +76,12 @@ zephyr_ble_nus:
   log: true
 
 zephyr_debug:
+
+debug:
+
+text_sensor:
+  - platform: debug
+    device:
+      name: "Device Info"
+    reset_reason:
+      name: "Reset Reason"
diff --git a/tests/test12.3.yaml b/tests/test12.3.yaml
index 33a32526c3..fb26628820 100644
--- a/tests/test12.3.yaml
+++ b/tests/test12.3.yaml
@@ -42,3 +42,12 @@ zephyr_ble_nus:
   log: true
 
 zephyr_debug:
+
+debug:
+
+text_sensor:
+  - platform: debug
+    device:
+      name: "Device Info"
+    reset_reason:
+      name: "Reset Reason"