Гайд · ESP32 · Советы
5 вещей, что твой ESP32 уже умеет
Большинство использует ESP32 как маленький Arduino с Wi-Fi и до остального не добирается. А в чипе уже встроены пять мощных возможностей — без доп-железа и без поиска библиотек. Вот что это, зачем оно нужно и готовый пример кода для каждой из пяти.
1. ESP-NOW — говори с другим ESP32 без роутера
ESP-NOW позволяет двум (или многим) ESP-платам обмениваться маленькими пакетами напрямую, без Wi-Fi-роутера и без интернета — только по MAC-адресам. Быстро (~1 мс), энергоэффективно, идеально для пультов, сенсорных нод и связи робот-робот. Едет на Wi-Fi-радио, но минует весь стек TCP/IP; где оно рядом с Wi-Fi и BLE — в гайде по протоколам.
#include <esp_now.h>
#include <WiFi.h>
uint8_t peer[] = {0x24, 0x6F, 0x28, 0xAA, 0xBB, 0xCC}; // MAC приёмника
typedef struct { int id; float temp; } Msg;
Msg data;
void setup() {
WiFi.mode(WIFI_STA);
esp_now_init();
esp_now_peer_info_t p = {};
memcpy(p.peer_addr, peer, 6);
esp_now_add_peer(&p);
}
void loop() {
data.id = 1; data.temp = 24.5;
esp_now_send(peer, (uint8_t *)&data, sizeof(data)); // без роутера, ~1 мс
delay(2000);
} 2. Ёмкостный touch — любая площадка становится кнопкой
У классического ESP32 10 touch-совместимых GPIO. Подведи пин к площадке из меди, фольги
или шляпке винта — и touchRead() вернёт число, что падает, когда палец рядом — без
кнопки, без доп-чипа. Отлично для стильных панелей, скрытых органов управления и пробуждения по касанию.
(У S2/S3 touch-API немного другой; классический ESP32 использует touchRead(T0..T9).)

void setup() {
Serial.begin(115200);
}
void loop() {
int v = touchRead(T0); // T0 = GPIO4 на классическом ESP32
if (v < 40) Serial.println("touched!"); // меньше = палец рядом
delay(100);
} 3. Глубокий сон — месяцы работы от батареи
Между всплесками работы ESP32 может уйти в глубокий сон на ~10 мкА и проснуться по таймеру
или пину. Это разница между батарейной нодой на день и на год. Загвоздка: при пробуждении чип
перезагружается и setup() выполняется заново, так что состояние храни в RTC-памяти. Подробно —
в гайде по глубокому сну.

#define uS_PER_S 1000000ULL
void setup() {
Serial.begin(115200);
Serial.println("проснулись — сделали дело, спим");
// ... читаем датчик, отправляем ...
esp_sleep_enable_timer_wakeup(10 * uS_PER_S); // проснуться через 10 с
esp_deep_sleep_start(); // ~10 мкА до пробуждения
}
void loop() {} // не выполняется — при каждом пробуждении заново setup() 4. OTA — обновляй прошивку по воздуху
Когда плата уже на стене, не хочется выдёргивать её ради перепрошивки. OTA заливает новую
прошивку по Wi-Fi: добавь пару строк — и в Arduino IDE появится сетевой порт. Обязательно для развёрнутых
устройств — а если хочешь совсем в одну строку, дашборд RisalDash даёт кнопку
«Обновить прошивку» через dash.enableOTA().

#include <WiFi.h>
#include <ArduinoOTA.h>
void setup() {
WiFi.begin("your-ssid", "your-pass");
while (WiFi.status() != WL_CONNECTED) delay(300);
ArduinoOTA.begin(); // теперь плату можно прошивать по Wi-Fi
}
void loop() {
ArduinoOTA.handle(); // сетевой порт появится в IDE
} 5. PWM (почти) на любом пине — яркость, скорость, серво
Периферия LEDC у ESP32 генерирует аппаратный PWM почти на любом GPIO — диммируй LED, задавай
скорость мотора или позицию серво, всё без блокировки CPU. Выбираешь пин, частоту и разрешение, затем просто
пишешь значение duty. В Arduino-ESP32 core 3.x это аккуратный API ledcAttach() ниже (в старом
2.x был ledcSetup() + ledcAttachPin()).
void setup() {
ledcAttach(18, 5000, 8); // пин 18, 5 кГц, 8 бит (0..255) [core 3.x]
}
void loop() {
for (int d = 0; d <= 255; d++) { ledcWrite(18, d); delay(4); } // разгар
for (int d = 255; d >= 0; d--) { ledcWrite(18, d); delay(4); } // затухание
} Собери всё вместе
Ничего из этого не требует шилда или списка покупок — это кремний, что у тебя уже есть. Батарейный датчик, который просыпается по касанию, читает, шлёт значение по ESP-NOW и уходит обратно в глубокий сон — обновляемый в поле по OTA, со статусным PWM-светодиодом — это пять «скрытых» фич и ноль лишних деталей. В этом и суть: твой ESP32 умеет куда больше, чем мигать.
Нужен UI сверху? Полный живой дашборд — с OTA внутри — в пару строк C++.