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

一、功能需求

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

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

功能:

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

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

✅ 自动判断 LD2402 文本模式

✅ 网页自动刷新,无卡顿

✅ 手机 / 电脑都能打开

✅ 配网直接写死在代码里

二、功能实现

1、 硬件环境

ESP32-S3 具有多种子型号,例如 N8R8N16R8 等等。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,即可看到现代化实时监控页面
相关推荐
国科安芯13 小时前
ASC4T245S分组双向控制架构深度解析:独立DIR/OE控制、QFN16封装与混合方向总线桥接
单片机·嵌入式硬件·物联网·fpga开发·架构·risc-v
KaMeidebaby13 小时前
卡梅德生物技术快报|蛋白 N 端测序在重组贻贝融合蛋白表征中的应用,解决原核表达序列偏移工艺难题
前端·人工智能·物联网·算法·百度
元岳数字人小元14 小时前
如何依托数字人源码做好私有化部署选型
人工智能·开源·人机交互·交互
CV-deeplearning15 小时前
万物皆可 Markdown!开源 MCP 服务器 Markdownify,10 种格式一键转换
开源·markdown·格式转换·ai工具·mcp·markdownify
JNX_SEMI15 小时前
AT2401C 2.4GHz 全集成射频前端单芯片技术解析
前端·单片机·嵌入式硬件·物联网·硬件工程
电子工程师成长日记-C5116 小时前
51单片机智能灯光控制系统
单片机·嵌入式硬件·51单片机
Sinclair17 小时前
认识安企CMS-核心功能亮点
架构·开源
狂奔蜗牛(bradley)17 小时前
嵌入式软件编程思想之事件驱动+表驱动状态机+事件参数+优先级FIFO
单片机·mcu
secondyoung17 小时前
Cortex-R52学习:存储系统
arm开发·单片机·学习·arm
SMT贴片河南芯途电子18 小时前
工业数据采集终端硬件定制:低功耗、多传感与无线通信融合!
物联网·边缘计算