Вот таблица с рекомендациями по подключению интерфейсов к ESP32, учитывая ваши требования:

Интерфейс/Устройство Рекомендуемые пины ESP32 Особенности подключения
I2C (дисплей, датчики) GPIO 21 (SDA), GPIO 22 (SCL) Подтяжка 4.7 кОм к 3.3V. Лучше использовать стандартные пины.
1-Wire (датчики температуры) GPIO 4, 5, 18 Подтяжка 4.7 кОм к 3.3V. Можно использовать несколько датчиков на одной линии.
Кнопки (4 шт.) GPIO 13, 14, 15, 34-39 (RTC) Подтяжка к GND через 10 кОм. GPIO 34-39 – только входы, без подтяжки.
LoRa E32    
→ RX GPIO 16 (RX2) UART2 (прием данных от LoRa).
→ TX GPIO 17 (TX2) UART2 (передача данных в LoRa).
→ M0 GPIO 12 Режим работы (в паре с M1). Не использовать GPIO 0, 2, 15 (проблемы при загрузке!).
→ M1 GPIO 27 Режим работы. Лучше избегать пинов с подтяжкой при старте.
→ AUX GPIO 35 (Input Only) Индикатор готовности модуля. Подтянуть к 3.3V через 10 кОм.
→ VCC 3.3V (или 5V, если модуль 5V) Проверить спецификацию модуля! Если 5V – использовать level shifter для сигнальных линий.
→ GND GND Общая земля.
Deep Sleep (TRC) GPIO 36 (VP), GPIO 39 (VN) Пробуждение по RTC-пинам (34-39) или таймеру.
SPI (резерв) GPIO 18 (SCK), 19 (MISO), 23 (MOSI), 5 (CS) Для SD-карты или других SPI-устройств.
Светодиод (индикация) GPIO 25, 26 Подключить через резистор 220 Ом.
DIP-переключатели GPIO 32, 33 Выбор режима работы (подтяжка к 3.3V через 10 кОм).
JTAG (отладка) GPIO 12-15 Если не используется – освободить.
Индикация GPIO 25 светодиод

Важные замечания:

  1. Питание от батареи:

    • Для минимизации потребления в Deep Sleep отключите все ненужные подтяжки и периферию.

    • Используйте esp_deep_sleep_start() и настройте пробуждение по таймеру или кнопке (RTC-пины).

  2. Проблемные пины:

    • GPIO 0 – если низкий уровень при старте, ESP32 войдет в режим загрузки.

    • GPIO 2 – тоже влияет на загрузку, лучше не использовать для кнопок без осторожности.

    • GPIO 12 – может вызвать сброс, если подтянут к земле при старте.

  3. LoRa E32:

    • Убедитесь, что модуль E32 работает от 3.3V (некоторые версии требуют 5V, но ESP32 не терпит 5V на входах!).

    • Если используется Hardware UART (UART2), не забудьте правильно инициализировать Serial2.

  4. 1-Wire:

    • Можно использовать библиотеку DallasTemperature + OneWire.

    • Если датчиков много, лучше разнести их на разные GPIO.

  5. Кнопки:

    • Для Deep Sleep лучше использовать RTC-пины (GPIO 34-39), но они только входные и не имеют подтяжки!

  6. Дополнительные интерфейсы:

    • Если нужно больше UART (например, для отладки), можно задействовать UART0 (GPIO 1, 3), но это конфликтует с Serial Monitor.

    • Для переключателей режимов можно использовать DIP-переключатели на GPIO 32, 33 + подтяжка к VCC.