AO3400 — это мощный N-канальный MOSFET с низким сопротивлением в открытом состоянии (Rds(on) = 28 мОм) и малым током утечки, идеально подходящий для отключения делителя во время сна, когда батарея подключена, а вот ESP не выполняет свои основные задачи.
 Так скажем 

🔌 Схема подключения с AO3400

📝 Компоненты:

Компонент Назначение
AO3400 N-канальный MOSFET (SOT-23)
Резисторы R1, R2 Делитель напряжения (например, 1 МОм + 1 МОм)
Резистор R3 Подтягивающий к GND (1 МОм)
Конденсатор C1 0.1 мкФ (керамический, фильтрация)

🛠 Соединения:

Батарея (+) ----[R1]----+----[GPIO35] (АЦП)
                        |
                       [R2]
                        |
                 Сток (D) AO3400
                        |
                 Исток (S) ---- GND
                        |
                 Затвор (G) --[10кОм]-- GPIO_CTRL (например, GPIO4)
                        |
                      [1МОм] <-- Подтяжка к GND
  • R1, R2 = 1 МОм: Снижают ток делителя до ~2.1 мкА (при 4.2V).

  • R3 = 1 МОм: Подтягивает затвор к GND в режиме сна.

  • C1 = 0.1 мкФ: Фильтрует шумы на GPIO35.

⚡ Принцип работы:

  1. Активный режим:

    • GPIO_CTRL = HIGH (3.3V) → MOSFET открыт → делитель подключён к GND.

    • АЦП измеряет напряжение на GPIO35.

  2. Режим сна:

    • GPIO_CTRL = LOW (0V) → MOSFET закрыт (подтяжка R3 удерживает затвор в GND).

    • Ток утечки: Только через R3 (< 1 мкА).

📝 Оптимизированный код:

 
const int MOSFET_PIN = 4;    // GPIO для управления AO3400
const int ADC_PIN = 35;      // GPIO35 (АЦП)

void setup() {
  pinMode(MOSFET_PIN, OUTPUT);
  digitalWrite(MOSFET_PIN, LOW); // Закрываем MOSFET сразу
}

float readBattery() {
  digitalWrite(MOSFET_PIN, HIGH); // Открываем MOSFET
  delay(10);                      // Ждём стабилизации (~10 мс)
  float voltage = analogRead(ADC_PIN) * (3.3 / 4095.0) * 2; // Для R1=R2=1МОм
  digitalWrite(MOSFET_PIN, LOW);  // Закрываем MOSFET
  return voltage;
}

void enterDeepSleep() {
  digitalWrite(MOSFET_PIN, LOW);  // Гарантированно закрываем MOSFET
  esp_sleep_enable_timer_wakeup(10e6); // Спим 10 секунд
  esp_deep_sleep_start();
}

void loop() {
  Serial.printf("Voltage: %.2f V\n", readBattery());
  enterDeepSleep();
}

✅ Преимущества AO3400:

  • Низкое Rds(on): Минимальные потери напряжения в открытом состоянии.

  • Малый ток утечки: В закрытом состоянии — наноАмперы.

  • Компактность: Корпус SOT-23 удобен для монтажа.

⚠️ Критические проверки:

  1. Напряжение на затворе:

    • AO3400 полностью открывается при Vgs > 2.5V. Убедитесь, что ESP32 даёт стабильные 3.3V на GPIO.

  2. Полярность MOSFET:

    • Не перепутайте сток (D) и исток (S)! Сток подключается к R2, исток — к GND.

  3. Тестирование мультиметром:

    • В режиме сна проверьте, что напряжение на GPIO35 близко к 0V (делитель отключён).

🎯 Итоговые рекомендации:

  1. Резисторы R1, R2: Выбирайте 1 МОм для минимизации тока (2.1 мкА при 4.2V).

  2. Подтягивающий резистор (R3): Обязателен для гарантированного закрытия MOSFET в сне.

  3. Потребление: В режиме сна — < 5 мкА (суммарно от ESP32 и делителя).

Пример реальных замеров с AO3400:

Активный режим: 2.1 мкА (через делитель) + 5 мкА (ESP32 ADC)  
Режим сна: 0.1 мкА (утечка MOSFET) + 2 мкА (подтяжка R3)  

Схема с AO3400 — это оптимальный баланс между точностью измерений и энергопотреблением!