后端系统,使用TraeCN + deepseek-v4-flash,由AI全自动构建。
ESP32 物联网自动浇水系统 – 实施计划
使用 .NET 8 构建一个完整的物联网自动浇水系统,包含:
-
内置 MQTT Broker(使用 MQTTnet)- 接收 ESP32 设备数据,下发控制指令
-
ASP.NET Core Web API 后端 – 提供 RESTful API,使用 SQLite 存储数据
-
Blazor WebAssembly 前端 – 设备监控面板、图表展示、手动控制
管理 20 个 ESP32 设备,每台设备检测土壤湿度(0-4095),记录浇水历史。
不到2小时一个完整的系统生成,包含设备模拟器。
基于 ASP.NET Core 9 + Blazor WebAssembly 的物联网自动浇水系统,内置 MQTT Broker,支持 ESP32 设备接入和管理。
技术栈
|
组件 |
技术 |
|---|---|
|
运行时 |
.NET 9 |
|
Web 框架 |
ASP.NET Core + Blazor WebAssembly |
|
ORM |
Entity Framework Core (SQLite) |
|
MQTT |
MQTTnet(内置 Broker + Client) |
|
实时通信 |
SignalR |
|
前端 UI |
Bootstrap 5 + Chart.js |
项目结构
Esp32Watering/
├── src/
│ └── Esp32Watering.Server/ # 后端服务
│ ├── Controllers/ # API 控制器
│ ├── Data/ # 数据库上下文
│ ├── Hubs/ # SignalR Hub
│ ├── Models/ # 实体与 DTO
│ ├── Services/ # 核心服务
│ └── Client/ # Blazor WebAssembly 前端
│ ├── Pages/ # 页面组件
│ ├── Services/ # 前端 API 服务
│ └── Layout/ # 布局组件
└── tools/
└── Esp32Simulator/ # ESP32 设备模拟器
快速开始
前置条件
-
.NET 9 SDK
启动服务
# 克隆仓库
git clone https://gitee.com/zhux3/esp32-watering.git
cd esp32-watering
# 启动服务器
dotnet run --project src/Esp32Watering.Server
服务启动后,浏览器访问 http://localhost:5167 即可打开管理界面。
启动设备模拟器(可选)
dotnet run --project tools/Esp32Simulator
模拟器默认模拟 20 台设备,定时上报湿度数据。
核心服务
- MqttBrokerService
— 内置 MQTT Broker,监听 1883 端口,接收设备连接
- MqttClientService
— 订阅设备主题,处理上报数据
- DeviceDataService
— 处理湿度记录、浇水确认、设备状态更新
- DeviceHeartbeatService
— 每 30 秒心跳检测,120 秒无数据自动标记离线
API 接口
|
方法 |
路由 |
说明 |
|---|---|---|
|
GET |
/api/devices |
获取所有设备列表 |
|
GET |
/api/devices/{id} |
获取单个设备详情 |
|
GET |
/api/moisturerecords/device/{deviceId}?take=10 |
获取设备湿度记录 |
|
GET |
/api/watering/records/device/{deviceId}?take=10 |
获取设备浇水记录 |
|
POST |
/api/watering/send |
发送浇水指令 |
|
GET |
/api/config/moisture-thresholds |
获取湿度阈值配置 |
SignalR Hub
- 端点
:
/hubs/watering: WateringCommandSent — 浇水指令确认推送
MQTT 主题
|
主题 |
方向 |
说明 |
|---|---|---|
esp32/{id}/soil_moisture |
设备 → 服务端 |
上报土壤湿度 (0-4095) |
esp32/{id}/status |
设备 → 服务端 |
上报在线状态 (online/offline) |
esp32/{id}/watering/cmd |
服务端 → 设备 |
下发浇水指令 |
esp32/{id}/watering/ack |
设备 → 服务端 |
浇水指令确认 |
数据库
使用 SQLite,数据库文件自动创建于项目运行目录。包含 3 张表:
- Devices
— 设备信息与在线状态
- SoilMoistureRecords
— 土壤湿度历史记录
- WateringRecords
— 浇水操作记录
预置 20 个设备作为种子数据。
前端页面
- 设备总览
(
/) — 卡片网格展示所有设备,显示在线状态、土壤湿度进度条,每 10 秒自动刷新 - 设备详情
(
/device/{id}) — Chart.js 折线图展示湿度趋势、浇水记录柱状图,支持手动浇水(20 秒自动关闭)