Подключение HC-SR04 к ESP32
Ультразвуковой датчик расстояния
HC-SR04 соединяют с ESP32 четырьмя проводами: питание, земля и два сигнальных вывода, TRIG и ECHO, на любые свободные GPIO. Главная особенность этой пары — уровни: датчик пятивольтовый, а ESP32 — 3,3-вольтовая.
Схема подключения HC-SR04 к ESP32
| HC-SR04 | ESP32 |
|---|---|
| ECHO | GPIO18 |
| TRIG | GPIO5 |
| VCC | 3V3 |
| GND | GND |
Схема из примера «Ультразвук: измерение расстояния».
⚡ В примере «HC-SR04» питается от 3V3 — в симуляторе так проще, и модель это допускает. Настоящий модуль рассчитан на 5 В: подключайте VCC к VIN (5 В от USB) или к отдельному источнику 5 В с общей землёй.
Выводы HC-SR04
| Вывод | Назначение |
|---|---|
| ECHO | выход: длительность высокого уровня — время полёта звука |
| TRIG | вход запуска: импульс 10 мкс начинает измерение |
| VCC | питание 5 В |
| GND | общий провод |
Код для ESP32
const int TRIG = 5, ECHO = 18;
void setup() {
Serial.begin(115200);
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
}
float measureCm() {
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
// Скорость звука 343 м/с = 0.0343 см/мкс, путь туда и обратно.
unsigned long us = pulseIn(ECHO, HIGH, 30000);
if (us == 0) return -1;
return us * 0.0343 / 2.0;
}
void loop() {
float cm = measureCm();
if (cm < 0) Serial.println("вне диапазона");
else Serial.printf("%.1f см\n", cm);
delay(300);
}
Скетч можно править и запускать в симуляторе без платы и установки среды.
Что учесть на ESP32
- TRIG можно подключать напрямую: 3,3 В с ESP32 датчик воспринимает как высокий уровень.
- ECHO выдаёт 5 В, поэтому перед входом ESP32 ставят делитель на резисторах 1 кОм и 2 кОм (получится около 3,3 В) или берут версию датчика HC-SR04P на 3,3 В.
pulseIn()на ESP32 работает штатно; чтобы не блокироватьloop(), измерение переносят в прерывание по ECHO.
Частые ошибки при подключении к ESP32
- ECHO напрямую на вход ESP32 без делителя: вывод работает за пределами допустимого, и плата может выйти из строя не сразу, а через недели.
- Питание датчика от 3V3: на 3,3 В HC-SR04 часто выдаёт нестабильные показания или вообще не стартует. Давайте 5 В с VIN и общую землю.
- ECHO напрямую на вход ESP32 — вывод работает на пределе и со временем может выйти из строя. Нужен делитель.
- Измерения чаще раза в 60 мс: эхо от прошлого импульса принимается за новое, и расстояние скачет.
pulseInбез тайм-аута: если эха нет (цель дальше 4 м или мягкая), скетч ждёт секунду. Передавайте третий аргумент, например 30000 мкс.- Мягкие и наклонные поверхности — ткань, поролон, стена под углом — рассеивают звук, и датчик их «не видит».
Ещё по теме
- плата Подключение HC-SR04 к Arduino
- деталь HC-SR04: подключение к ESP32 и Arduino
- калькулятор Делитель напряжения
Другие детали для ESP32
DHT22 (AM2302)BME280DS3231SSD1306 OLED 0,96″LCD 1602 с I2CMAX7219TM1637MPU6050 (GY-521)Модуль релеWS2812B (NeoPixel)KY-040Клавиатура 4×4HX711ФоторезисторМодуль microSDRGB-светодиодСервопривод SG9074HC595ИК-приёмник (VS1838B)TFT ST7735 1,8″Шаговый двигательКнопкаПотенциометрПьезопищалкаСветодиодDS18B20Ползунковый переключательHC-SR501TTP223Датчик влажности почвыMQ-2LM35Джойстик KY-023DHT11HTU21DSN65HVD230