一 ESP32 项目简介:
本程序结合ESP32、SR602人体感应模块、LED灯做一个简单的人体感应灯,理解人体感应灯的原理,做为升级版人体感应灯的学习基础。

二 硬件说明:
- ESP32-S3开发板 1个
- LED灯 1个
- 220欧电阻 1个
- SR602人体感应模块 1个
- 面包板 1块
- 公对母杜邦线 5根
三 ESP32 Python人体感应灯接线图

四 ESP32 Python人体感应灯源代码
# 导入 time 模块,用于获取系统时间、延时等操作
import time
# 从 machine 模块导入 Pin 类,用于控制 GPIO 引脚
from machine import Pin
# 定义 LED 连接的引脚:GPIO4,设置为输出模式(OUT)
LED = Pin(4, Pin.OUT)
# 定义 PIR(人体红外传感器)连接的引脚:GPIO5,设置为输入模式(IN)
PIR = Pin(5, Pin.IN)
# 初始化一个变量 lefttime,用于记录“LED 应该保持点亮的截止时间”
# 初始值为 0,表示一开始没有触发,LED 应熄灭
lefttime = 0
# 主循环:程序将无限重复执行以下逻辑
while True:
# 读取 PIR 传感器当前的输出值(0 或 1)
# pir_val = 1 表示检测到人体移动;pir_val = 0 表示未检测到
pir_val = PIR.value()
# 如果 PIR 检测到人体(pir_val 为真,即非零)
if pir_val:
# 更新 lefttime:设置为当前时间 + 10 秒
# 即:从现在起,LED 将持续亮 10 秒
lefttime = time.time() + 10
# 判断当前系统时间是否还在“应点亮”的时间段内
if time.time() < lefttime:
# 如果是,则打开 LED
LED.on()
else:
# 否则,关闭 LED
LED.off()
# 短暂休眠 10 毫秒,避免 CPU 占用过高,同时保证响应速度
# 不加这句会导致主循环运行过快,浪费资源
time.sleep_ms(10)Python五 ESP32 C++人体感应灯源代码
// 定义LED连接的引脚编号为4
const int LED_PIN = 4;
// 定义PIR人体红外传感器连接的引脚编号为5
const int PIR_PIN = 5;
// 用于记录LED应该关闭的时间点(单位:毫秒,从程序启动开始计时)
unsigned long lightOffTime = 0;
void setup() {
// 设置LED引脚为输出模式
pinMode(LED_PIN, OUTPUT);
// 设置PIR传感器引脚为输入模式
pinMode(PIR_PIN, INPUT);
// 初始关闭LED(输出低电平)
digitalWrite(LED_PIN, LOW);
// 初始化串口通信,波特率为115200,用于调试输出
Serial.begin(115200);
}
void loop() {
// 读取PIR传感器的状态(HIGH表示检测到人体移动,LOW表示未检测到)
int motion = digitalRead(PIR_PIN);
// 如果检测到人体移动(motion == HIGH)
if (motion == HIGH) {
// 将LED关闭时间设定为当前时间 + 10000毫秒(即10秒后关闭)
lightOffTime = millis() + 10000;
}
// 如果当前系统时间还没到设定的关闭时间
if (millis() < lightOffTime) {
// 打开LED
digitalWrite(LED_PIN, HIGH);
// 通过串口打印“亮”
Serial.println("亮");
} else {
// 否则关闭LED
digitalWrite(LED_PIN, LOW);
// 通过串口打印“无人,灭”
Serial.println("无人,灭");
}
// 延迟10毫秒,避免串口输出过于频繁,同时降低CPU占用
delay(10);
}C++