ESP32+WebServer+LD2402实现人体/宠物感知

一、功能需求

使用的ESP32 Arduino-WebServer设计一个LD2402程序 ,界面现代化UI界面,实时显示LD2402的检测数据。

LD2402模块在调试时,较好的方式是通过手机访问设备Web界面查看模块对人体/宠物感知情况。

功能:

✅ 现代美观网页 UI(黑色科技感)

✅ 实时显示:有无目标、距离 (cm)、实时更新

✅ 自动判断 LD2402 文本模式

✅ 网页自动刷新,无卡顿

✅ 手机 / 电脑都能打开

✅ 配网直接写死在代码里

二、功能实现

1、 硬件环境

ESP32-S3 具有多种子型号,例如 N8R8、N16R8 等等。N16 表示具有 16 MB 的 Flash,R8 表示具有 8MB 的 PSRAM。

推荐使用 ESP32-S3-DevKitC-1 开发板(或兼容板)。

2、 软件环境

开发环境:Arduino IDE

ESP32 的WebServer库是 ESP32 Arduino 核心库的一部分(无需额外安装),它的核心作用是:

  • 让 ESP32 作为HTTP 服务器,监听指定端口(默认 80);
  • 接收浏览器 / 客户端的 HTTP 请求(如访问http://192.168.1.100/led/on);
  • 绑定 "URL 路径(路由)" 和 "处理函数",比如访问/led/on就执行点亮 LED 的函数;
  • 向客户端返回网页内容、状态码或重定向指令。

3、程序代码

复制代码
/*
  ESP32 + LD2402 雷达实时监控网页
  现代UI + 实时数据显示
  LD2402 文本模式 115200 波特率
*/

#include <WiFi.h>
#include <WebServer.h>

// ==================== 配网信息 ====================
const char* ssid = "你的WiFi名称";
const char* password = "你的WiFi密码";

// ==================== LD2402 串口引脚 ==============
#define UART2_TX 17
#define UART2_RX 18

// ==================== WEB 服务 =====================
WebServer server(80);

// 全局数据
String ld2402_status = "OFF";
float ld2402_distance = 0.0;
String last_line = "";

// ==================================================
// 网页 HTML(现代化UI)
// ==================================================
String getHTML() {
    String html = "<!DOCTYPE html>";
    html += "<html lang='zh-CN'><head><meta charset='UTF-8'>";
    html += "<meta name='viewport' content='width=device-width, initial-scale=1.0'>";
    html += "<title>LD2402 雷达监控</title>";
    html += "<style>";
    html += "*{margin:0;padding:0;box-sizing:border-box;font-family:'Segoe UI',sans-serif}";
    html += "body{background:#121212;color:#fff;padding:20px;display:flex;justify-content:center;align-items:center;min-height:100vh}";
    html += ".card{background:#1e1e1e;width:100%;max-width:480px;padding:30px;border-radius:16px;box-shadow:0 0 25px rgba(0,200,255,0.2)}";
    html += ".title{text-align:center;font-size:24px;margin-bottom:20px;color:#00c8ff}";
    html += ".item{margin:16px 0;padding:12px;background:#2a2a2a;border-radius:10px}";
    html += ".label{color:#aaa;font-size:14px}";
    html += ".value{font-size:28px;font-weight:bold;color:#fff;margin-top:4px}";
    html += ".status-on{color:#00ff6a}";
    html += ".status-off{color:#ff4444}";
    html += ".footer{text-align:center;margin-top:24px;color:#666;font-size:12px}";
    html += "</style></head><body>";
    html += "<div class='card'>";
    html += "<div class='title'>LD2402 毫米波雷达监控</div>";

    // 状态
    html += "<div class='item'>";
    html += "<div class='label'>检测状态</div>";
    if (ld2402_status == "ON") {
        html += "<div class='value status-on'>有人/宠物存在</div>";
    } else {
        html += "<div class='value status-off'>无目标</div>";
    }
    html += "</div>";

    // 距离
    html += "<div class='item'>";
    html += "<div class='label'>实时距离</div>";
    html += "<div class='value'>" + String(ld2402_distance) + " cm</div>";
    html += "</div>";

    html += "<div class='footer'>自动刷新 · ESP32 WebServer</div>";
    html += "</div>";
    html += "<script>setTimeout(()=>location.reload(),300)</script>";
    html += "</body></html>";
    return html;
}

void handleRoot() {
    server.send(200, "text/html", getHTML());
}

void readLD2402() {
    if (Serial2.available()) {
        String line = Serial2.readStringUntil('\n');
        line.trim();
        if (line.length() == 0) return;
        last_line = line;

        if (line == "OFF") {
            ld2402_status = "OFF";
            ld2402_distance = 0;
        } 
        else if (line.startsWith("distance:")) {
            ld2402_status = "ON";
            ld2402_distance = line.substring(9).toFloat();
        }
    }
}

void setup() {
    Serial.begin(115200);
    Serial2.begin(115200, SERIAL_8N1, UART2_RX, UART2_TX);

  // WiFi 连接
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("\nWiFi 连接成功!");
  Serial.print("访问地址:");
  Serial.println(WiFi.localIP());

  server.on("/", handleRoot);
  server.begin();
}

void loop() {
  readLD2402();    // 实时读取雷达
  server.handleClient();
}

三、使用方法

  1. 把 WiFi 名称和密码改成你自己的
  2. 接线:
    • ESP32 GPIO17 → LD2402 RX
    • ESP32 GPIO18 → LD2402 TX
  1. 烧录
  2. 打开串口监视器,查看 IP 地址
  3. 浏览器输入 IP,即可看到现代化实时监控页面
相关推荐
不悔哥2 天前
开源OV-Watch:怎么做一个智能手表
单片机·开源·嵌入式
家和802 天前
Carla仿真系列:4_在 Carla 的 Tesla 上装 4 路摄像头,并创建网格为环视拼接做准备
开源
XiHongShi20162 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
调试优选官2 天前
IoT物联网系统定制落地实践:从设备接入、协议网关、平台分层到业务应用,如何做技术选型、交付验收、责任边界与长期运维成本评估及迁移安排
物联网·iot·成本分析
感谢地心引力2 天前
我用 Doubao-Seed-2.1-pro 做了一个深度融入 AI 功能的本地知识库软件
ai·开源·seed·markdown·豆包
alsmile2 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go
深圳老胡3 天前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
华允物联-HUAIOT3 天前
工业路由器和DTU在联网方式上的区别
物联网
wuyk5553 天前
《WiFi 嵌入式物联网开发全套实战》| 第 16 章 ESP32 AP+STA 双模共存原理与工程坑点
网络·stm32·物联网
码流子3 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构