20. HPM5E00EVK Web 控制系统

20.1. 概述

HPM5E00EVK Web 控制系统是一个基于HPMicro HPM5E00 RISC-V微控制器的嵌入式Web服务器项目。该项目通过USB RNDIS虚拟网卡技术,实现了无需外部网络连接即可通过浏览器访问和控制开发板的功能。

20.2. 依赖 SDK版本V1.10.0

20.2.1. 主要特性

  • USB RNDIS网络 - 通过USB实现虚拟以太网连接,即插即用

  • 嵌入式Web服务器 - 基于Mongoose的轻量级HTTP服务器

  • 实时控制界面 - 使用Preact构建的现代化Web UI

  • 数字量输入监控 - 实时显示6路按键状态

  • 数码管显示控制 - 通过Web界面控制单个8段数码管

  • RESTful API - 提供标准化的HTTP API接口

20.2.2. 技术架构

后端 (web_server/)

  • RTOS: FreeRTOS

  • 网络协议栈: LwIP (轻量级TCP/IP协议栈)

  • USB协议: CherryUSB RNDIS设备类

  • Web服务器: Mongoose (嵌入式HTTP服务器)

  • 外设控制: EUI (扩展用户接口) - 数码管和按键矩阵

前端 (web_app/)

  • 框架: Preact (轻量级React替代方案)

  • 构建工具: Vite

  • 样式: Tailwind CSS

  • 打包方式: 构建后转换为C数组嵌入固件

20.3. 项目结构

HPM5E00-Web/
├── web_server/               # 嵌入式服务器代码
│   ├── app/                  # 应用主程序
│   │   ├── main.c           # 程序入口
│   │   ├── init.c/.h        # 硬件和网络初始化
│   │   ├── tasks.c/.h       # FreeRTOS任务管理
│   │   └── interrupts.c/.h  # 中断服务程序
│   ├── button/              # 按键和数码管控制
│   │   └── button.c/.h      # EUI外设驱动
│   ├── net/                 # 网络服务
│   │   └── net.c/.h         # Mongoose HTTP服务器和API
│   ├── rndis/               # USB RNDIS设备
│   │   └── cdc_rndis_device.c/.h
│   ├── fs/                  # 嵌入式文件系统
│   │   └── packed_fs.c      # 打包的前端资源
│   ├── config/              # 配置文件
│   │   ├── FreeRTOSConfig.h
│   │   ├── lwipopts.h       # LwIP配置
│   │   └── mongoose_config.h
│   └── common/              # 公共组件
│       ├── arch/            # LwIP架构适配
│       ├── dhcp-server/     # DHCP服务器
│       ├── dns-server/      # DNS服务器
│       └── mongoose/        # Mongoose源码
├── web_app/                 # Web前端应用
│   ├── src/
│   │   ├── app.jsx          # 应用主组件
│   │   ├── pages/
│   │   │   └── Welcome.jsx  # 主页面
│   │   └── assets/          # 静态资源
│   ├── dist/                # 构建输出目录
│   └── package.json
├── tools/                   # 工具脚本
│   ├── build_and_pack_full.bat  # 一键构建和打包脚本
│   └── make_packed_fs.py    # 前端资源打包工具
└── doc/                     # 文档

20.4. 快速开始

20.4.1. 硬件要求

  • HPM5E00EVK 开发板

  • USB数据线(连接到PC)

  • (可选)调试器(用于固件烧录和调试)

20.4.2. 软件要求

后端开发

  • Segger Embedded Studio (SES)

  • HPM SDK v1.10.0

  • CMake 3.13+

前端开发

  • Node.js 16+

  • npm 或 yarn

20.4.3. 开发板连接方式

20.4.4. 构建项目

generate_project

20.4.5. 编译和运行

20.4.5.1. 1. 构建前端应用

在web_app文件夹下右键,打开windows powershell

npm install
npm run build

build_web

20.4.5.2. 2. 打包前端资源到C文件

使用一键脚本:

cd ..
cd tools
build_and_pack_full.bat

packet

20.4.5.3. 3. 编译固件

使用SES打开项目:

20.4.5.4. 4. 烧录和运行

  1. 将固件烧录到HPM5E00EVK开发板

  2. 通过USB连接开发板到PC,注意要连接到USB口,debug口用于日志打印 the_way_to_connect

  3. PC会识别出虚拟网卡并自动获取IP地址(192.168.7.x)

  4. 打开浏览器访问: http://192.168.7.1:8000

20.5. 运行现象

20.5.1. 串口日志

未打开web页面串口日志 LOG_without_open_web 打开web页面串口日志 LOG_with_open_web

20.5.2. Web界面功能

Web

  1. 设备状态显示

    • 左上角显示”HPM5E00EVK 开发板”和在线状态

    • 在线时状态指示灯为绿色并闪烁

  2. MCU核心亮点展示

    • 显示5个特性卡片:强劲内核、工业互联核心、精准运动控制、高集成度、安全可靠

    • 悬停时有扫描线动画效果

  3. 数字量输入监控

    • 实时显示6路按键状态(IN1-IN6)

    • 按下开发板上的物理按键,对应的按钮指示器将实时点亮(显示为1)

    • 松开按键后熄灭(显示为0)

    • 更新周期:200ms

  4. 数码管显示控制

    • 提供0-9共10个数字按钮

    • 点击数字按钮,开发板上的数码管将显示对应数字

    • 点击后按钮会高亮1秒

20.5.3. 串口输出

连接串口调试终端(115200, 8N1),可以看到:

Web Server Starting...
IP Address: 192.168.7.1
HTTP Server: http://192.168.7.1:8000

按键按下时会输出按键状态信息。

20.6. API接口

20.6.1. 1. 心跳检测

GET /api/heartbeat
Response: {"status": "ok", "uptime": 12345}

20.6.2. 2. 数字量输入状态

GET /api/di
Response: {"digitalInputs": 5}  // 位掩码,bit0-bit5对应IN1-IN6

20.6.3. 3. EtherCAT数据

GET /api/ethercat/data
Response: {
  "digitalInputs": 5,
  "digitalOutputs": 0,
  "syncPeriod": 0,
  "syncMode": "FreeRun",
  "slaveALStatus": "INIT"
}

20.6.4. 4. 数码管控制

POST /api/segment-display
Content-Type: application/json
Body: {"digit": 5}  // 显示数字0-9
Response: {"status": "ok"}

20.7. 网络配置

  • 设备IP地址: 192.168.7.1

  • 子网掩码: 255.255.255.0

  • HTTP端口: 8000

  • DHCP服务器: 自动为PC分配192.168.7.2-192.168.7.254的IP地址

  • DNS服务器: 内置DNS服务器,解析所有域名到192.168.7.1

20.8. 故障排除

20.8.1. PC无法获取IP地址

  • 检查USB连接是否正常

  • 在设备管理器中查看是否有RNDIS设备

  • 手动设置PC网卡IP为192.168.7.2,子网掩码255.255.255.0

20.8.2. 无法访问Web界面

  • 确认设备IP为192.168.7.1

  • 检查防火墙设置

  • 尝试使用 ping 192.168.7.1 测试连通性

20.9. 注意事项

  • 代码运行过程中,电脑处于断网状态,因为此时RNDIS 虚拟网卡成为默认网关。如果想要恢复上网功能,需要断开USB连接。