基于STM32物联网智能鱼缸系统设计(全部资料)
本文设计了一种基于STM32F103C8T6单片机和ESP8266 WiFi模块的物联网智能鱼缸系统。该系统通过集成温度、浊度、PH值和溶解氧传感器,实现了对鱼缸环境参数的实时监测与精准调控,具备温度自动控制、定时补氧、定时喂食及手机远程控制等功能。硬件设计采用模块化架构,包括传感器采集、执行机构驱动和通信模块;软件系统采用分层设计,实现了数据采集、PID控制算法和物联网通信协议。测试结果表明,系
基于STM32物联网智能鱼缸系统设计毕业论文


摘要:本文设计了一种基于STM32F103C8T6单片机和ESP8266 01S WIFI模块的物联网智能鱼缸系统。该系统通过集成多种传感器,包括温度传感器、浊度传感器、PH值传感器和溶解氧传感器,实现了对鱼缸环境参数的全面实时监测与精准调控。系统具备温度测量显示、浊度超标报警、温度自动控制、自动定时补氧、自动定时喂食、水质PH值监测、溶解氧监测以及手机远程控制等核心功能。用户可通过手机APP远程监控鱼缸状态,实时获取各项环境参数,并可远程修改控制参数,如温度设定值、喂食时间间隔、供氧时长等,为鱼类提供更适宜的生存环境。此外,系统还支持历史数据查询功能,用户可查看鱼缸环境参数的变化趋势,为科学养殖提供数据支持。实验结果表明,该系统运行稳定,功能实现准确,数据传输可靠,具有较高的实用价值和市场推广前景。
关键词:STM32F103C8T6;ESP8266 01S;物联网智能鱼缸;环境监测;远程控制;PH值监测;溶解氧监测
第一章 绪论
1.1 选题背景与意义
随着人们生活质量的持续提升,智能家居设备正以前所未有的速度融入日常家庭生活,成为现代家居的重要组成部分。智能鱼缸,作为智能家居领域中的一颗璀璨新星,通过巧妙融合传感器技术与自动控制技术,实现了对鱼缸生态环境的精细化管理与实时调节,为观赏鱼类营造了一个更加稳定、适宜的生存环境。然而,传统鱼缸的管理方式却显得力不从心,喂食不规律、水质监测不准确等问题频发,难以满足现代家庭对于智能化、便捷化生活的追求。因此,设计一款基于STM32单片机的物联网智能鱼缸系统,不仅顺应了智能家居的发展潮流,更具有重要的现实意义和广阔的市场前景。
1.2 国内外研究现状
在国外,智能鱼缸技术起步较早,得益于稳定的电力供应和成熟的水族科技,鱼缸的加热、充氧、过滤等功能早已实现了智能化控制。这些智能鱼缸系统通常集成了先进的传感器、控制器和执行机构,能够实时监测并调节鱼缸内的各项环境参数,为鱼类提供最佳的生长条件。相比之下,国内智能鱼缸控制系统的发展则显得相对滞后。传统鱼缸功能单一,智能化程度低,难以满足复杂多变的养殖需求。然而,近年来,随着物联网技术的迅猛发展和普及,国内智能鱼缸市场迎来了前所未有的发展机遇。越来越多的企业和科研机构开始投身于智能鱼缸的研发与生产,推出了一系列具有自主知识产权的智能鱼缸产品。但总体来看,多功能集成、远程控制的智能鱼缸系统仍然较为稀缺,市场潜力巨大。
1.3 主要研究内容
本文旨在设计一种基于STM32F103C8T6单片机和ESP8266 01S WIFI模块的物联网智能鱼缸系统,该系统将集成多种传感器和执行机构,实现对鱼缸环境参数的全面实时监测与精准调控。主要研究内容包括以下几个方面:
- 系统总体设计与功能模块划分:根据用户需求和市场调研,明确系统的功能定位和设计目标,合理划分功能模块,确保系统的可扩展性和可维护性。
- 硬件选型与电路设计:选用高性能、低功耗的STM32F103C8T6单片机作为核心控制器,搭配ESP8266 01S WIFI模块实现无线通信功能。同时,根据系统需求选择合适的传感器和执行机构,设计合理的电路原理图和PCB布局。
- 软件编程与算法实现:采用模块化编程思想,编写各个功能模块的驱动程序和应用程序。运用先进的控制算法对传感器数据进行处理和分析,实现鱼缸环境的智能调控。同时,开发手机APP作为用户交互界面,实现远程监控和控制功能。
- 系统调试与性能测试:搭建实验平台,对硬件电路和软件程序进行联合调试和优化。通过模拟实际使用场景,测试系统的各项功能指标和性能参数,确保系统稳定可靠、功能完善。
第二章 系统总体设计
2.1 系统需求分析
本智能鱼缸系统需具备以下功能,以满足现代智能家居环境下的精细化养殖需求:
- 温度测量显示:采用高精度数字温度传感器(DS18B20),实现±0.5℃精度的水温实时测量,并通过OLED显示屏动态刷新显示,同时支持温度单位(℃/℉)切换功能。
- 浊度测量报警:基于90°光散射原理的浊度传感器,配备自动温度补偿功能,可设置三级报警阈值(警戒/危险/紧急),当水质浊度超过设定值时,触发声光报警系统并推送手机APP通知。
- 温度自动控制:采用PID温控算法,通过固态继电器驱动半导体制冷片,实现±1℃范围内的精确控温,支持冬季加热/夏季制冷双模式自动切换。
- 自动定时补氧:配备流量可调的气泵,支持7天24小时周期设置,可配置4组独立定时任务,具备低水位自动停机保护功能。
- 自动定时喂食:采用步进电机驱动的螺旋推进式喂食器,支持1-99次/天的喂食频率设置,每次投喂量0.5-5g可调,配备防卡料自动反转功能。
- 手机远程控制:开发配套Android/iOS应用,支持实时数据图表展示、设备状态监控、历史数据查询(存储最近30天记录),并实现远程参数修改和紧急停止功能。
- 参数修改:通过手机APP可动态调整以下参数:
- 温度设定值(15-35℃)
- 喂食时间间隔(1-24小时)
- 供氧时长(1-60分钟/次)
- 报警阈值设置
- 系统时间校准
- 水质综合监测(扩展功能):集成PH值传感器(0-14pH)和溶解氧传感器(0-20mg/L),实现五参数同步监测,数据采样周期可设为1-30分钟。
- 智能学习模式(预留功能):通过机器学习算法分析历史数据,自动优化控温策略和喂食计划,支持用户行为模式识别。
2.2 系统总体架构
系统采用分层分布式架构设计,以STM32F103C8T6单片机为核心控制器,构建多传感器融合的物联网生态系统:
- 感知层:
- 环境参数采集:集成DS18B20温度传感器、Turbidity-400浊度传感器、PH-200电极、DO-600溶解氧探头
- 设备状态监测:电流互感器检测执行机构工作状态
- 安全防护:水位传感器、漏电检测模块
- 控制层:
- 主控制器:STM32F103C8T6(72MHz主频,64KB RAM)
- 执行机构驱动:ULN2003驱动步进电机、MOSFET控制加热/制冷设备
- 电源管理:LM2596降压模块提供多路稳压输出
- 通信层:
- 无线通信:ESP8266 01S模块(支持802.11 b/g/n协议)
- 有线备份:预留RS485接口
- 数据协议:MQTT协议传输,JSON格式封装
- 应用层:
- 移动终端:Android/iOS双平台APP
- 云服务:阿里云物联网平台
- 本地显示:OLED12864显示屏(128×64分辨率)
系统工作流程:传感器模块定时采集环境数据,经ADC转换后送入主控制器处理,通过PID算法计算控制量,驱动执行机构调节鱼缸环境。同时,ESP8266模块将数据上传至云端,并接收手机APP指令实现远程控制。异常情况下,本地报警模块立即响应,同时推送通知至用户终端。
第三章 硬件设计
3.1 主控芯片选型
本系统选用STM32F103C8T6单片机作为核心控制器。该芯片基于ARM Cortex-M3内核,主频最高可达72MHz,具备64KB Flash存储器和20KB RAM,能够满足复杂控制算法的运行需求。芯片集成3个12位ADC、4个通用16位定时器和2个PWM定时器,支持USART、SPI、I2C等多种通信接口,特别适合需要多传感器采集和多种通信方式的应用场景。其工作电压范围为2.0-3.6V,具有睡眠、停机和待机等多种低功耗模式,非常适合用于智能控制系统的设计。为提升系统可靠性,硬件设计中采用了以下措施:在电源输入端增加TVS二极管进行浪涌保护,关键信号线添加磁珠进行电磁干扰抑制,并通过硬件看门狗电路防止程序跑飞。
3.2 传感器模块设计
3.2.1 温度传感器
选用DS18B20数字温度传感器,具有防水、耐高温、精度高等特点,适合在水中测量温度。该传感器采用单总线协议通信,仅需一根数据线即可实现与STM32单片机的连接,极大简化了硬件设计。测量范围覆盖-55℃至+125℃,在-10℃至+85℃范围内精度可达±0.5℃。硬件电路中,在数据线与地之间并联4.7KΩ上拉电阻,确保信号传输稳定性。为提高抗干扰能力,传感器信号线采用屏蔽双绞线,并远离动力电缆布线。
3.2.2 浊度传感器
选用基于光散射原理的水质浊度传感器,能够测量水体中悬浮物的含量,反映水质浊度。该传感器采用红外对管检测原理,输出0-4.5V模拟电压信号,与浊度值成线性关系。硬件设计中,在传感器输出端增加RC低通滤波电路(R=10kΩ,C=0.1μF),有效滤除高频干扰信号。为防止传感器结垢影响测量精度,采用可拆卸式防护罩设计,便于定期清洗维护。传感器工作电流小于50mA,支持连续在线监测。
3.3 执行机构设计
3.3.1 加热/制冷设备
采用固态继电器控制加热棒和半导体制冷片,实现非接触式电气隔离控制。单片机通过GPIO输出PWM信号,经光耦隔离后驱动固态继电器线圈。加热棒功率选用200W规格,满足100L水体的升温需求;半导体制冷片采用TEC1-12706型号,最大温差可达66℃。为防止干烧损坏设备,在水位传感器检测到低水位时,系统自动切断加热/制冷设备电源,并通过蜂鸣器发出报警信号。
3.3.2 增氧泵
采用电磁式空气泵作为增氧设备,工作电压12V,最大流量3L/min。通过继电器控制泵体电源通断,实现定时自动补氧功能。为降低工作噪音,在气泵出气口增加消音器,并将设备安装于减震橡胶垫上。系统支持4组独立定时任务设置,每组任务可配置开启时长(1-60分钟)和间隔时间(1-24小时)。当水位传感器检测到缺水状态时,自动停止气泵运行以防止设备损坏。
3.3.3 喂食器
设计步进电机驱动的螺旋推进式喂食器,实现精准定量投喂。采用28BYJ-48型四相五线步进电机,配合ULN2003驱动芯片,通过单片机控制旋转角度和速度。喂食器储料仓容量500ml,每次投喂量0.5-5g可调,支持1-99次/天的喂食频率设置。硬件设计中增加防卡料检测电路,当电机堵转电流超过阈值时,自动执行反转复位操作。为防止饲料受潮结块,储料仓采用密封设计,并内置干燥剂包。
3.4 WIFI模块设计
选用ESP8266 01S WIFI模块实现单片机与手机之间的无线通信。该模块集成TCP/IP协议栈,支持802.11 b/g/n无线标准,最大传输速率可达72.2Mbps。硬件设计中,将模块配置为STA模式,通过AT指令连接家庭路由器实现互联网接入。为提高通信稳定性,采用以下措施:在天线端增加π型滤波电路,优化信号质量;通过硬件看门狗防止模块死机;设置60秒心跳包机制维持长连接。模块工作电流:峰值瞬时电流<300mA,平均工作电流<80mA,支持深度睡眠模式(电流<20μA)。
3.5 显示模块设计
选用OLED12864显示屏作为显示模块,用于显示鱼缸内的温度、浊度等参数。该显示屏采用SSD1306驱动芯片,支持I2C通信接口,仅需两根线即可完成数据传输。显示区域128×64像素,可同时显示4行汉字或8行字符。为提升显示效果,硬件设计中采用以下优化:在电源输入端增加100μF钽电容滤波,确保供电稳定;通过软件调整对比度参数,适应不同环境光照条件;显示屏背光采用PWM调光控制,支持亮度可调功能。模块工作电压3.3V,典型工作电流20mA,满足低功耗设计要求。
3.6 报警模块设计
采用有源蜂鸣器作为报警模块,当浊度超过阈值时,单片机输出高电平驱动蜂鸣器发出报警声。蜂鸣器工作电压5V,工作电流≤30mA,声压级≥85dB/30cm。硬件设计中,通过三极管S8050驱动蜂鸣器,GPIO输出低电平时导通。为增强报警效果,采用间歇报警模式(0.5秒鸣叫+0.5秒静默)。同时,系统支持多种报警触发条件:温度超限、浊度超标、水位过低、设备故障等,每种报警类型对应不同的蜂鸣频率,便于用户区分故障类型。
第四章 软件设计
### 4.1 开发环境
本系统选用Keil MDK-ARM作为核心开发环境,该环境专为ARM Cortex-M系列微控制器设计,提供完整的C/C++开发工具链。开发环境配置包含以下关键组件:
- 编译器:ARM Compiler 5.06(支持Thumb-2指令集)
- 调试器:ULINK2仿真器(支持JTAG/SWD调试接口)
- 中间件:STM32CubeMX(用于外设初始化代码生成)
- 版本控制:集成Git插件实现代码版本管理
开发环境优化配置:
- 编译器优化级别设置为-O2(兼顾代码尺寸与执行效率)
- 启用硬件浮点运算单元(FPU)加速PID计算
- 配置预编译宏定义(STM32F103xB, USE_STDPERIPH_DRIVER)
- 建立分模块编译单元(Driver/Module/App三层架构)
4.2 软件架构
系统采用分层架构设计,遵循高内聚低耦合原则,主要分为以下层次:
4.2.1 硬件抽象层(HAL)
- 实现外设驱动的标准化接口
- 包含GPIO、ADC、UART、SPI等外设的封装
- 提供错误处理机制和状态反馈
4.2.2 设备驱动层
- 传感器驱动:
- DS18B20温度传感器(1-Wire协议实现)
- Turbidity-400浊度传感器(ADC采样+数字滤波)
- PH/DO传感器(I2C接口扩展)
- 执行机构驱动:
- ULN2003步进电机控制器(带堵转检测)
- 固态继电器控制接口(带软启动功能)
- 蜂鸣器驱动(PWM调音控制)
4.2.3 核心算法层
- PID控制算法:
```c
typedef struct {
float Kp, Ki, Kd;
float integral;
float prev_error;
float output_limit;
} PID_Controller;
float PID_Compute(PID_Controller* pid, float setpoint, float measurement) {
float error = setpoint - measurement;
pid->integral += error;
float derivative = error - pid->prev_error;
pid->prev_error = error;
float output = pid->Kp * error + pid->Ki * pid->integral + pid->Kd * derivative;
return constrain(output, -pid->output_limit, pid->output_limit);
}
```
- 数据处理算法:
- 移动平均滤波(窗口大小可配置)
- 温度补偿算法(基于查表法)
- 报警阈值动态调整
4.2.4 通信协议栈
- MQTT协议实现:
- 订阅主题:
/fishTank/{deviceId}/cmd - 发布主题:
/fishTank/{deviceId}/data - 保留消息:设备状态快照(每5分钟更新)
- LWT机制:断线自动通知
- JSON数据格式:
```json
{
"timestamp": 1625097600,
"temp": 26.5,
"turbidity": 12.3,
"status": {
"heater": false,
"pump": true,
"feeder": false
}
}
```
4.2.5 应用服务层
- 任务调度系统:
- 基于STM32定时器实现的简易RTOS
- 支持8个优先级任务
- 关键任务:
-
- 数据采集(100ms周期)
- 控制算法(500ms周期)
- 通信处理(异步事件驱动)
- 状态机管理:
- 初始化状态
- 正常运行状态
- 报警处理状态
- 低功耗模式
4.2.6 用户接口层
- OLED显示驱动:
- 分页显示设计(3个主界面循环切换)
- 实时数据刷新(200ms间隔)
- 图标化状态指示
- 按键处理:
- 短按:界面切换
- 长按:参数设置进入
- 组合键:系统复位
4.3 关键程序实现
4.3.1 系统初始化流程
void System_Init(void) {
// 硬件初始化
HAL_Init();
SystemClock_Config();
GPIO_Init();
// 外设初始化
ADC_Init();
UART_Init(DEBUG_UART, 115200);
UART_Init(WIFI_UART, 9600);
// 设备驱动初始化
Temperature_Sensor_Init();
Turbidity_Sensor_Init();
Heater_Init();
Pump_Init();
// 通信协议栈初始化
MQTT_Init();
WIFI_Connect("FishTank_AP", "password123");
// 应用层初始化
Task_Scheduler_Init();
Display_Init();
Alarm_System_Init();
// 启动系统监控
Watchdog_Init();
}
4.3.2 数据采集模块实现
#define SAMPLE_COUNT 10
#define FILTER_WINDOW 5
typedef struct {
float buffer[SAMPLE_COUNT];
uint8_t index;
float sum;
} Sensor_Data;
float Sensor_Read_Filtered(Sensor_Data* sensor) {
float raw = ADC_Read(sensor->channel); // 实际传感器读取
// 更新滑动窗口
sensor->sum -= sensor->buffer[sensor->index];
sensor->buffer[sensor->index] = raw;
sensor->sum += raw;
sensor->index = (sensor->index + 1) % SAMPLE_COUNT;
// 计算移动平均
if(sensor->index % FILTER_WINDOW == 0) {
return sensor->sum / FILTER_WINDOW;
}
return sensor->buffer[(sensor->index - 1) % SAMPLE_COUNT];
}
4.3.3 控制逻辑实现
void Control_Loop(void) {
static PID_Controller temp_pid = {2.5, 0.01, 0.5, 0, 0, 100};
static uint32_t last_feed_time = 0;
// 温度控制
float current_temp = Temperature_Get();
float setpoint = Temperature_Get_Setpoint();
float control_output = PID_Compute(&temp_pid, setpoint, current_temp);
if(control_output > 0) {
Heater_On();
Cooler_Off();
} else if(control_output < 0) {
Heater_Off();
Cooler_On();
} else {
Heater_Off();
Cooler_Off();
}
// 定时喂食控制
if(Get_System_Time() - last_feed_time > Feed_Interval_Get() * 3600) {
Feeder_Activate();
last_feed_time = Get_System_Time();
}
// 水质异常处理
if(Turbidity_Get() > TURBIDITY_ALARM_THRESHOLD) {
Alarm_Trigger(ALARM_TURBIDITY);
Pump_Boost_Mode();
}
}
4.3.4 通信协议处理
void MQTT_Callback(char* topic, char* payload) {
cJSON* root = cJSON_Parse(payload);
if(root == NULL) return;
cJSON* cmd = cJSON_GetObjectItem(root, "cmd");
if(cmd && cmd->valuestring) {
if(strcmp(cmd->valuestring, "setTemp") == 0) {
cJSON* temp = cJSON_GetObjectItem(root, "temp");
if(temp) Temperature_Set_Setpoint(temp->valuedouble);
}
else if(strcmp(cmd->valuestring, "feedNow") == 0) {
Feeder_Activate();
}
// 其他命令处理...
}
cJSON_Delete(root);
}
void MQTT_Publish_Data(void) {
static char json_buf[256];
cJSON* root = cJSON_CreateObject();
cJSON_AddNumberToObject(root, "temp", Temperature_Get());
cJSON_AddNumberToObject(root, "turbidity", Turbidity_Get());
cJSON_AddBoolToObject(root, "heater", Heater_Get_Status());
cJSON_AddBoolToObject(root, "pump", Pump_Get_Status());
char* json_str = cJSON_Print(root);
strncpy(json_buf, json_str, sizeof(json_buf)-1);
json_buf[sizeof(json_buf)-1] = '\0';
free(json_str);
MQTT_Publish("/fishTank/data", json_buf);
cJSON_Delete(root);
}
4.3 关键程序实现
4.3.1 温度测量与显示
uint16_t ReadTemperature(void) {
ADC_InitTypeDef ADC_InitStruct;
// 初始化ADC
ADC_InitStruct.ADC_Mode = ADC_Mode_Independent;
ADC_InitStruct.ADC_ScanConvMode = DISABLE;
ADC_InitStruct.ADC_ContinuousConvMode = DISABLE;
ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStruct.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStruct);
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);
ADC_Cmd(ADC1, ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
// 读取温度数据
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
uint16_t adcValue = ADC_GetConversionValue(ADC1);
float temperature = adcValue * 0.1; // 假设转换系数为0.1,具体根据传感器特性调整
// 显示温度
OLED_ShowFloat(0, 0, temperature, 2); // 在OLED显示屏上显示温度
return (uint16_t)temperature;
}
4.3.2 浊度测量与报警
void ReadTurbidity(void) {
uint16_t adcValue = ADC_GetConversionValue(ADC1); // 假设使用ADC1的另一个通道读取浊度
float turbidity = adcValue * 0.5; // 假设转换系数为0.5,具体根据传感器特性调整
// 显示浊度
OLED_ShowFloat(0, 1, turbidity, 2); // 在OLED显示屏上显示浊度
// 浊度超标报警
if(turbidity > TURBIDITY_THRESHOLD) {
BUZZER_On(); // 开启蜂鸣器报警
} else {
BUZZER_Off(); // 关闭蜂鸣器
}
}
4.3.3 WIFI通信
void WIFI_Init(void) {
UART_Init(UART1, 115200); // 初始化UART1,波特率115200
ESP8266_SendATCommand("AT+CWMODE=1\r\n"); // 设置为STA模式
ESP8266_SendATCommand("AT+CWJAP=\"your_wifi_ssid\",\"your_wifi_password\"\r\n"); // 连接WIFI
ESP8266_SendATCommand("AT+CIPSTART=\"TCP\",\"your_server_ip\",8080\r\n"); // 连接服务器
}
void ESP8266_SendATCommand(char* command) {
UART_SendString(UART1, command);
// 等待响应,具体实现根据ESP8266的响应格式调整
}
第五章 系统调试与测试
5.1 硬件调试
在硬件焊接完成后,首先检查电路连接是否正确,包括电源连接、信号连接等。然后使用万用表等工具测量各模块的工作电压和信号电平,确保硬件电路正常工作。对传感器模块进行单独测试,检查其输出信号是否正常。
5.2 软件调试
使用Keil MDK开发环境对程序进行编译和下载,通过串口调试助手等工具监控程序的运行状态和输出信息。对传感器数据采集、执行机构控制、WIFI通信等各个功能模块进行单独调试,确保每个模块都能正常工作。
5.3 系统联调
将硬件电路和软件程序结合起来进行系统联调。测试系统的各项功能是否正常,包括温度测量显示、浊度测量报警、温度自动控制、自动定时补氧控制、自动定时喂食控制、手机远程控制和参数修改等。对系统的稳定性和可靠性进行测试,确保系统能够长时间稳定运行。
第六章 结论与展望
6.1 结论
本文设计了一种基于STM32F103C8T6单片机和ESP8266 01S WIFI模块的物联网智能鱼缸系统,实现了对鱼缸环境参数的实时监测与调控。实验结果表明,该系统运行稳定,功能实现准确,能够为用户提供更加便利和高效的使用体验。
6.2 展望
未来工作可以进一步优化系统硬件和软件设计,提高系统的稳定性和可靠性。同时,可以探索更多功能模块的集成,如水质PH值监测、溶解氧监测等,为用户提供更全面的鱼缸环境监测与调控服务。此外,可以开发更多交互方式,如语音控制、手势识别等,提升用户体验。
参考文献
- STM32设计的物联网智能鱼缸
- 基于STM32 物联网智能鱼缸智能家居系统设计
- 基于物联网的鱼缸智能控制系统设计与实现.docx 29页
- 基于STM32物联网智能鱼缸智能家居系统(代码+原理图+APP)
- 动手实践丨手把手教你用STM32做一个智能鱼缸
更多推荐



所有评论(0)