ESP8266连接超声波模块
HC-SR04四脚模块:
超声波模块到底是怎么运行的呢?
在使用之前我们必须弄清楚这个传感器的运行方法,因为传感器本身只是把它的“ECHO”引脚保持在高电平,使之持续一段时间,这对应于从发送的波形到接收反射(回波)所花费的这一段时间。
模块发出一阵声波,同时向回声引脚施加电压。
该模块从声波接收反射并从回波引脚消除电压。
在测距的时候,超声波传感器中产生脉冲将数据发送到NodeMCU或任何其它的微控制器。
起始脉冲约为10us,基于距离的PWM信号将为150 us-25us。如果没有障碍物,则NodeMCU生成38us脉冲,以确认没有检测到物体。
- 接线:esp8266——HC-SR04
- vin(5v)——vcc
- TRIG——D4(gpio2)
- ECHO——D3(gpio0)
- GND——GND
读数代码:
const int trigPin = 2; //D4
const int echoPin = 0; //D3
float distance;
// 定义变量
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT); // 将trigPin设置为输出
pinMode(echoPin, INPUT); // 将echoPin设置为输入
}
void loop() {
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
//将trigPin设置为HIGH状态10微秒
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// 读取echoPin,以微秒为单位返回声波传播时间
distance =pulseIn(echoPin, HIGH) / 58.00;
// 打印距离在串行监视器
Serial.print("Distance: ");
Serial.print(distance);
Serial.println("cm");
delay(500);
}
- 探测距离计算公式:
注意
一个系统内一定要共地,外接电源多个时也要共地,不然通信信息读取会有问题。
代码补充
由于D4口连接了板内的一个LED灯,所以使用D4口时,rst板会发生无法读数的结果,所以建议不要使用D0和D4口。
//const int trigPin = 2; //D4
//const int echoPin = 0; //D3
const int trigPin = 5; //D1
const int echoPin = 4; //D2
float distance;
// 定义变量
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT); // 将trigPin设置为输出
pinMode(echoPin, INPUT); // 将echoPin设置为输入
}
void loop() {
// Clears the trigPin
Serial.print("begin!");
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
//将trigPin设置为HIGH状态10微秒
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// 读取echoPin,以微秒为单位返回声波传播时间
distance =pulseIn(echoPin, HIGH) / 58.00;
// 打印距离在串行监视器
Serial.print("Distance: ");
Serial.print(distance);
Serial.println("cm");
delay(2000);
}