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,即可看到现代化实时监控页面
相关推荐
坤坤藤椒牛肉面10 小时前
EXIT外部中断
单片机·嵌入式硬件
Are_You_Okkk_10 小时前
无需配环境、不受设备限!MonkeyCode重新定义研发
大数据·人工智能·开源·团队开发·ai编程
xiangw@GZ10 小时前
射频信号隔离度量化分析及优化措施
单片机·嵌入式硬件
TDengine (老段)10 小时前
TDengine 虚拟表实现原理
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
lbb 小魔仙10 小时前
海量时序数据困局破壁:DolphinDB 如何重新定义工业物联网的数据底座
物联网
╰ㄣ浮华若梦︶ _10 小时前
51单片机的DS1302使用
单片机·嵌入式硬件·51单片机·ds1302·8051
卷Java10 小时前
DeepSeek V4 开源 Apache 2.0 之后,闭源模型还香吗?
开源·apache
崇山峻岭之间10 小时前
单片机USART实验
单片机·嵌入式硬件
m0_3771081411 小时前
stm32软件i2c
stm32·单片机·嵌入式硬件