本人是新手,刚开始接触esp32板,希望能与大家交流。
开发板使用:正点原子ATK_DNESP32S3 V1.3
超声波传感器:HC-SR04
IDE: VSCODE + PLATFORMIO
在VS Code新建工程,工程命名为:ultrasonic
主板选择对应主板,这里由于没有找到正点原子对应的主板,我自已导入了一个
Frameword选择arduino
创建好工程后,写入代码:
#include <Arduino.h>
/*
* Arduino - Ultrasonic Sensor HC-SR04
* Wiring:
* - VCC --> 5VDC
* - TRIG --> Pin 37
* - ECHO --> Pin 20
* - GND --> GND
*/
const int trigPin = 37; // 发送
const int echoPin = 20; // 接收
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
digitalWrite(trigPin, LOW); // 保证初始为低电平
}
void loop() {
// 触发超声波信号
digitalWrite(trigPin, LOW);
delayMicroseconds(2); //触发前先拉低TRIG引脚2微秒,保证信号稳定
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// 读取回声持续时间
long duration_us = pulseIn(echoPin, HIGH, 30000); // 增加超时保护
// 计算距离(厘米),声速340m/s,往返距离
float distance_cm = duration_us * 0.034 / 2;
Serial.print("distance: ");
Serial.print(distance_cm, 2);
Serial.println(" cm");
delay(1000);
}
代码详解:
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
- 触发前先拉低TRIG引脚2微秒,保证信号稳定。
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
- 通过TRIG引脚发出一个10微秒的高电平脉冲,触发超声波发射。
long duration_us = pulseIn(echoPin, HIGH, 30000);
- 使用 pulseIn测量ECHO引脚高电平持续时间(微秒),即超声波往返所需时间。
- 增加 pulseIn超时参数,避免死等。
float distance_cm = duration_us * 0.034 / 2;
- 距离计算公式:
distance_cm = duration_us * 0.034 / 2
,其中0.034为声速(cm/μs),除以2是因为超声波往返。
编译代码:
下载:
我的 platformio.ini 上的配置:
[env:dnesp32s3]
platform = espressif32
board = dnesp32s3
framework = arduino
upload_port = COM5
monitor_port = COM5
monitor_speed=115200
Serial Monitor查看结果: