# orchard_smart **Repository Path**: song_df/orchard_smart ## Basic Information - **Project Name**: orchard_smart - **Description**: 果园智能控制系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-07 - **Last Updated**: 2026-03-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 果园智能灌溉系统(Orchard Smart Irrigation) 基于物联网的果园土壤含水率智能调节系统:实时采集环境数据,通过阈值/模糊决策算法自动或手动控制灌溉,支持 ESP32 设备接入、设备管理、历史数据与系统参数配置。 ## 系统架构 ``` ┌─────────────────┐ HTTP/WebSocket ┌─────────────────┐ │ ESP32-C3 设备 │ ◄─────────────────────► │ 后端 (Flask) │ │ 传感器 + 上报 │ POST /api/sensors │ SocketIO + API │ │ 接收激活/配置 │ GET /api/config │ SQLite │ └─────────────────┘ 下发激活/间隔 └────────┬────────┘ │ │ /api 代理 + SocketIO ▼ ┌─────────────────┐ │ 前端 (React) │ │ Vite + TS │ └─────────────────┘ ``` - **设备端**:ESP32-C3(如 XIAO_ESP32C3)采集土壤/空气温湿度,按配置间隔上报;支持服务端下发激活参数与数据上报间隔,配置存 NVS。 - **后端**:Flask + Flask-SocketIO,提供 REST API 与 WebSocket;SQLite 存设备、传感器数据、系统设置;自动灌溉线程按阈值与时间段决策。 - **前端**:React + TypeScript + Vite,设备总览/详情、设备管理、历史数据、系统设置;实时数据与状态通过 Socket.IO 更新。 ## 技术栈 | 层级 | 技术 | |--------|------| | 设备端 | Arduino (ESP32 3.3.7)、WiFi、HTTPClient、ArduinoJson、DallasTemperature、OneWire、Preferences (NVS) | | 后端 | Python 3.8+、Flask、Flask-SocketIO、Flask-CORS、SQLite、eventlet | | 前端 | React 18、TypeScript、Vite、Tailwind CSS、Radix UI、Recharts/ECharts、React Router、Axios、Socket.IO Client | ## 功能概览 - **设备管理**:添加设备(sensorId/名称/区域)、激活(参数下发至设备 NVS)、解绑(下发清除)、删除;列表展示在线状态(基于最近上报时间)。 - **设备总览与详情**:各设备实时传感器数据、区域、在线状态;单设备详情页与手动浇水/停止。 - **自动灌溉**:可配置土壤湿度阈值、允许时段、区域优先级;后台每 10 秒检查,满足条件则下发控制到设备。 - **历史数据**:按设备、时间范围查询与图表展示;支持清除历史。 - **系统设置**:数据上报间隔(分钟)、默认土壤湿度上下限、单次最长灌溉时间;保存时上报间隔下发至所有已激活设备,设备启动时也会拉取当前间隔。 ## 项目结构 ``` orchard-smart-irri/ ├── server/ # 后端 │ ├── app.py # Flask + SocketIO 入口 │ ├── routes/api.py # REST API(设备/传感器/设置/灌溉/历史等) │ ├── controllers/ # 灌溉决策等 │ ├── models/database.py # SQLite 与设备/设置/传感器数据 │ └── simulators/ # 传感器与设备模拟器(无硬件时使用) ├── client/ # 前端 │ ├── src/ │ │ ├── app/pages/ # 登录、总览、设备详情、设备管理、历史数据、系统设置 │ │ ├── components/ # 布局与 UI 组件 │ │ ├── services/ # API、Socket 封装 │ │ └── routes.tsx # 路由配置 │ ├── vite.config.ts # 开发代理 /api、/socket.io → 后端 │ └── package.json ├── device/device_node_entery/ # ESP32 设备端 │ ├── device_node_entery.ino # 主流程与上报逻辑 │ ├── DeviceController.cpp/h # HTTP 服务(/api/control、/api/activation、/api/config)、水泵、NVS 上报间隔 │ ├── HttpAccess.cpp/h # 上报传感器数据、拉取上报间隔 │ ├── SensorModule.cpp/h # 土壤/空气温湿度(当前为随机数模拟,DS18B20/AHT10 逻辑保留) │ ├── WiFiManager.cpp/h # WiFi 与 NVS(WiFi 配置、激活信息) │ └── ManualConfig.cpp/h # 串口配置菜单 ├── run_server.py # 后端启动脚本(推荐) ├── requirements.txt # Python 依赖 ├── package.json # 根脚本:npm run dev 同时启前后端 └── docs/ # 说明文档 ``` ## 快速开始 ### 1. 环境要求 - Python 3.8+ - Node.js 18+ - (可选)Arduino IDE 或 PlatformIO,ESP32 板支持包,用于设备端编译烧录 ### 2. 安装依赖 ```bash # 后端(建议使用虚拟环境) python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate pip install -r requirements.txt # 前端 cd client && npm install && cd .. # 或根目录 npm run install-all ``` ### 3. 启动服务 **推荐:前后端一起启动** ```bash npm run dev ``` **或分别启动** ```bash # 终端 1:后端(默认 3000) python run_server.py # 或指定端口 PORT=3000 python run_server.py # 终端 2:前端(Vite 默认 5173) cd client && npm run dev ``` ### 4. 访问 - 前端:(以 Vite 实际端口为准) - 后端 API: - 登录后可使用:设备总览、设备管理、历史数据、系统设置等。 ### 5. 设备端(ESP32) 1. 用 Arduino IDE 打开 `device/device_node_entery/device_node_entery.ino`,选择板型(如 XIAO_ESP32C3)。 2. 在代码中修改 `apiEndpoint` 为你的后端地址(如 `http://192.168.x.x:3000/api/sensors`)。 3. 烧录后:未配网则进入串口配置菜单;配网后在前端「设备管理」中添加设备并执行「激活」,激活参数会下发到设备,设备开始按系统设置的上报间隔上报数据。 4. 系统设置中修改「数据上报间隔」并保存后,会下发到已激活设备;设备重启时也会主动拉取当前间隔。 ## 配置说明 - **后端**:`PORT`(默认 3000)、`USE_THREADING=1`(不用 eventlet 时使用)。数据库与数据目录由 `server/models/database.py` 管理(默认项目下 `data/`)。 - **前端**:通过 Vite 代理访问后端,无需单独配置 API 地址(见 `client/vite.config.ts`)。 - **设备**:WiFi 与激活信息存 NVS;上报间隔存 NVS 命名空间 `device-config`,可由服务端下发或设备启动时 GET `/api/config` 拉取。 ## 文档 - `docs/` 下含使用说明、接口说明、设备与硬件模拟等文档,可按需查阅。 ## 许可证 MIT