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,即可看到现代化实时监控页面
相关推荐
2601_953988075 小时前
Ricon组态系统vs传统组态软件:为什么选择新一代Web组态平台
前端·后端·物联网·tcp/ip·数学建模·前端框架
萌新小白YXY5 小时前
SAE J1587/SAE J1708 协议笔记
笔记·单片机·嵌入式硬件
嘉子的秃头日记6 小时前
机械革命“自动修复”无法修复你的电脑
stm32·单片机·电脑
Yangy_Jiaojiao6 小时前
具身智能VLA模型全景图:从Pi0到HoloBrain-0的15大开源力作
开源
森旺电子6 小时前
电子负载使用介绍
单片机·嵌入式硬件
TDengine (老段)6 小时前
TDengine 第三方工具 — Telegraf、Kafka Connect、Flink、Spark
大数据·数据库·物联网·flink·kafka·时序数据库·tdengine
hsjiasb15 小时前
FreeRTOS学习(二十六)——动态内存管理heap_1到heap_5
stm32·单片机·学习·学习笔记·freertos
LCG元16 小时前
STM32+ESP8266+MQTT 物联网气象站:从零搭建温湿度远程监测系统(附完整源码)
stm32·物联网·struts
殷忆枫19 小时前
基于K210与STM32的智能垃圾分类与物联网监管系统
stm32·物联网·分类
周洲083019 小时前
STM32 GPIO 外部中断深度解析:边沿触发 / 电平触发、NVIC 优先级配置、中断嵌套实战
stm32·单片机·嵌入式硬件