简介:一套基于单片机与Wi-Fi通信的智能家居远程监控系统设计论文资料,面向嵌入式、物联网方向的开发者、高校学生及毕设/课设选题人员。内容以STM32为核心控制器,围绕家庭环境安全、温湿度监测、空气净化等场景,给出从系统架构、硬件选型、Wi-Fi网关到移动APP远程控制的完整设计思路。资源为PDF格式,单文件,压缩包大小5.64MB,查阅便捷,已有1205人浏览学习。论文梳理了蓝牙、ZigBee、Wi-Fi等常见无线控制方案的对比,并重点展示如何利用STM32+串口Wi-Fi网关实现数据采集和远程告警,还给出负离子空气净化设备的控制方法;对于需要借鉴智能家居系统整体方案、了解物联网远程监控技术落地细节的读者,是一份具有参考价值的完整范本。 做毕业设计或者课程设计选“基于单片机的无线智能家居环境远程监控系统”这个题目,基本就踩在了当前物联网和嵌入式方向的热点上。这类项目既包含传感器采集、无线通信、单片机编程,又涉及上位机或者云端平台的联动,不管是用51系列还是STM32系列做核心,整体工作量适中、展示效果好、延展性强,非常适合作为本科毕设或者综合课程设计题目。我今年带过几个学生做类似方向,也自己完整搭过一套基于STM32 + ESP8266 + MQTT的环境监控样机,这篇就把这套系统的设计思路、硬件选型、软件流程和调试经验完整拆开讲一遍,给正准备动手的同学一个可以直接“抄作业”的参考。
1. 系统整体设计与方案选型
1.1 核心需求解析
做任何嵌入式项目,第一步不是急着写代码,而是把需求翻译成技术指标。这套系统名字看着长,拆开其实就三个核心功能点:一是环境数据采集,二是无线数据传输,三是远程监控和控制。
具体到实际场景,用户希望实现的效果是:人不在家里,打开手机或者电脑,就能看到家里的温度、湿度、光照、烟雾浓度这些数据;更进一步,还能远程控制家里的继电器开关,比如打开风扇、断开某个电器电源。有些题目还会要求超过阈值自动报警,比如温度过高自动开启排风扇,这些都属于合理扩展。
把这几个需求翻译成技术指标就是:
- 模拟量采集精度和类型:温度、湿度、光照、烟雾等传感器信号需要完整采集
- 无线传输距离和可靠性:至少覆盖单个家庭内部,穿墙后仍能稳定通信
- 远程访问能力:数据需要上云或者通过局域网内网穿透,供手机远程查看
- 本地显示:系统本身带OLED或者LCD屏,方便设备端直接查看实时数据
- 可扩展性:预留GPIO和接口,方便后续增加更多传感器或者执行机构
1.2 主控、无线模块与云平台选型对比
方案选型是整个项目最关键的一步,选错了后面全在填坑。我直接放对比表格,这是我实际比较下来最真实的结果:
| 方案组成 | 推荐选项 | 备选选项 | 选择理由 |
|---|---|---|---|
| 主控MCU | STM32F103C8T6 | STC89C52、STM32F407 | 性能充裕,ADC资源多,资料极多,上手成本低 |
| 无线通信 | ESP8266-01S | ESP32、NRF24L01、蓝牙模块 | 自带WiFi协议栈,直接连接路由器上云 |
| 传感器 | DHT11/DHT22 + BH1750 + MQ-2 | DS18B20、SHT30 | 覆盖温湿度、光照、空气质量典型需求 |
| 云平台 | 阿里云物联网平台 / 巴法云 | OneNET、自建MQTT服务器 | 免费额度够用,接入文档齐全,支持MQTT协议 |
| 显示设备 | OLED 0.96寸 I2C接口 | LCD1602、TFT彩屏 | 显示信息丰富,I2C占用IO少 |
| 执行机构 | 继电器模块 | 舵机、蜂鸣器 | 继电器可以控制220V交流设备,展示效果好 |
为什么无线模块选ESP8266而不是NRF24L01?这是很多新手容易纠结的地方。NRF24L01的优势是低功耗、模块便宜,但它需要自己写通信协议,一个主机只能对应有限几个从机,而且没法直接上网。ESP8266虽然功耗高一些、编程复杂一些,但它本身就是一颗完整的WiFi SoC,内部有处理器,可以通过AT指令或者刷NodeMCU固件直接接入局域网和互联网,省去了单独做网关的麻烦。
再强调一次:这套系统的核心链路是“传感器采集 → MCU 处理 → 串口发给ESP8266 → WiFi上云 → 远程查看”,无线部分不是自己搭点对点通信,而是借助现有家庭WiFi网络,这一步想清楚后面编程就顺了。
1.3 系统架构和工作流程
整机工作流程并不复杂,我用大白话解释:STM32上电后先初始化各个传感器和外设,然后进入主循环,每隔固定时间(比如2秒)读一次温湿度、光照强度和烟雾浓度,通过OLED屏显示出来;同时把这些数据打包成一条JSON消息,通过串口发送给ESP8266模块,ESP8266再通过MQTT协议发布到云平台。手机端或者电脑端订阅对应的主题,就能实时收到数据。
这里有一个关键点:STM32和ESP8266之间的通信是串口通信,而ESP8266和云平台之间是WiFi + MQTT通信。两层通信的分离让系统职责非常清晰,MCU只负责传感器逻辑,WiFi模块只负责数据上行。想要实现远程控制,就反过来走一遍:手机端发布命令到指定主题,ESP8266订阅该主题,收到命令后通过串口给MCU发送指令,MCU控制继电器翻转。
从数据流角度来看:
传感器 --I2C/单总线/ADC--> STM32 --UART--> ESP8266 --WiFi/MQTT--> 云平台 --> 手机APP 手机APP --> 云平台 --> ESP8266 --> STM32 --> 继电器/风扇等执行器这套架构的优势在于层级清晰、每一层都容易单独调试。我在实际调试中,很多问题就是因为分层不清楚导致的,比如温度数据乱码,先判断是传感器问题、串口问题还是WiFi模块解析问题,每一层单独验一遍就能快速定位。
2. 硬件电路设计与关键细节
2.1 传感器选型与接线说明
DHT11温湿度传感器是这类设计的常客,原因很简单:便宜、库函数成熟、单总线协议只需要一根数据线。接线就三根线:VCC接3.3V或5V,GND接地,DATA接MCU的某个GPIO。这里有个很容易踩的坑:DHT11的DATA引脚需要外接一个4.7kΩ到10kΩ的上拉电阻,虽然很多模块板上已经集成了上拉电阻,但如果是买到的裸探头而不是模块,忘记加上拉会导致读出来的数据永远是0或者乱码。
BH1750光照传感器走的I2C协议,接线对应I2C规范:VCC接3.3V,GND接地,SCL接MCU的SCL引脚(STM32上是PB6或PB8),SDA接MCU的SDA引脚(PB7或PB9)。这个传感器模块一般内置了上拉电阻,所以基本不用外接。I2C地址默认是0x23,如果模块上的ADDR引脚接了高电平就变成0x5C,编程时注意区分即可。
MQ-2烟雾传感器就稍微讲究一点:它是模拟量输出,输出的电压随可燃气体浓度变化。需要接到MCU的ADC引脚上。MQ-2模块一般有两种输出,一个是数字量DOUT(有阈值比较器),一个是模拟量AOUT。建议把AOUT接MCU的ADC输入引脚,通过ADC采样值做阈值判断,这样比较灵活,而不只是用模块上的电位器调阈值。
从具体接线数量和IO资源上看,这套系统的硬件连接并不复杂。我列一个典型的接线表:
| 设备 | 接口类型 | MCU引脚 | 说明 |
|---|---|---|---|
| DHT11 | 单总线 | GPIO PA0 | 需上拉电阻 |
| BH1750 | I2C | PB6/SCL, PB7/SDA | 默认地址0x23 |
| MQ-2 | 模拟输出 | PA1 (ADC1_IN1) | 采集电压判断浓度 |
| OLED 0.96寸 | I2C | PB8/SCL, PB9/SDA | 与BH1750复用一个I2C总线,不同地址不冲突 |
| ESP8266-01S | UART | PA9/TX, PA10/RX | 波特率115200 |
| 继电器模块 | GPIO | PA5 | 高电平触发,控制风扇 |
总结一个原则:I2C总线上可以挂多个设备(不同地址),但单总线的DHT11和UART的ESP8266要单独占用引脚。如果你的MCU引脚紧张,DHT11换成I2C接口的SHT30会释放一个GPIO,这是项目后期值得考虑的升级方向。
2.2 电源方案与硬件避坑清单
这套系统最容易被忽视的就是电源设计。STM32F103C8T6的工作电压是2.0V~3.6V,一般用3.3V供电;而DHT11和MQ-2可以用5V供电,ESP8266的供电需求比较特殊——它启动瞬间电流能冲到300mA以上,普通的AMS1117稳压芯片如果输入不足,容易出现WiFi连接不上的诡异问题。
我实际测试中吃过这个亏:一开始用USB线给STM32核心板供电,核心板上的3.3V稳压器能力有限,接上ESP8266以后经常连不上路由器,偶尔连上了也容易被挤掉线。后来换成外部5V/2A电源适配器,通过AMS1117-3.3单独给ESP8266供电,问题立刻消失。所以建议:
- 系统总电源用5V/2A以上的USB电源或适配器
- ESP8266模块建议独立供电,不要和MCU共用同一路3.3V稳压输出
- 如果必须共用,至少要在ESP8266的VCC和GND之间加一个100μF以上的电解电容做储能缓冲
- 继电器如果是5V供电,注意驱动引脚的共地问题,MCU和继电器模块一定要接同一个GND
硬件焊接和接线过程中,我还建议大家买一个带开关的供电线,调试时随时断电比反复拔USB头方便太多。另外所有杜邦线尽量选短一点的,我遇到过采集数据波形畸变的问题,排查了很久最后发现是两根过长的杜邦线缠绕引起的信号干扰。
2.3 硬件调试中的经典场景
有一种情况非常典型:设备上电后OLED正常显示温度湿度,但ESP8266怎么都连不上路由器,排查思路应该按顺序走:先看ESP8266的电源指示灯是否稳定常亮,再看CH_PD(EN)引脚是否拉高(这个引脚必须接高电平模块才会工作),然后用USB转TTL工具单独测试ESP8266是否能通过AT指令连接路由器,排除模块本身问题之后,再看和STM32的串口接线Tx/Rx是否交叉。
另外就是MQ-2传感器的上电特性:这个传感器内部有一个加热丝,上电后需要预热几十秒到几分钟,这段时间输出值会先升高再回落,如果程序里没有做开机延时或者数据稳定判断,第一分钟读到的烟雾值会虚高。建议在程序初始化时跳过开机前30秒的数据,或者做连续多次采样取中间值的滤波处理,这个细节在答辩的时候讲出来会加分不少。
3. 软件架构与通信协议实现
3.1 下位机主程序设计
软件部分我习惯分五层来写:底层驱动、传感器中间层、数据处理层、通信协议层、业务逻辑层。这个分层的好处是调试时不用翻整个工程,比如OLED显示有问题就查驱动,温湿度不对就查传感器中间层。
主循环的逻辑很简单,伪代码大致是:
// 主循环伪代码 while (1) { // 1. 采集传感器数据 temperature = DHT11_Read_Temperature(); humidity = DHT11_Read_Humidity(); light = BH1750_Read_Lux(); smoke = ADC_Get_Value(ADC_CHANNEL_1); // 2. 数据滤波与阈值判断 smoke_filtered = MovingAverage_Filter(smoke); if (temperature > TEMP_THRESHOLD) Relay_On(); // 3. OLED本地显示 OLED_Display_All(temperature, humidity, light, smoke_filtered); // 4. 打包数据发往ESP8266 sprintf(json_buf, "{\"temp\":%d.%d,\"hum\":%d.%d,\"lux\":%d,\"smoke\":%d}", temp_int, temp_dec, hum_int, hum_dec, light, smoke_filtered); UART_Send_String(json_buf); // 5. 检查远程指令(非阻塞) if (UART_RxBuffer_Has_Cmd()) { Process_Remote_Command(); } delay(2000); // 2秒一次采集和上报 }需要注意,DHT11的读取时间间隔不能小于1秒,否则容易读出0或固定值,这是由传感器本身的采样周期决定的。BH1750每次转换也需要一定时间,连续读取时稍微加一点延时,或者用连续高分辨率模式。我实测中主循环放在2秒左右的间隔最稳妥,既满足实时性要求,又不会让MCU和ESP8266忙不过来。
这里再分享一个很多人不重视的细节:MCU和ESP8266之间最好定义一个简单的帧协议,不要直接裸发JSON字符串。我常用的做法是在JSON字符串开头加帧头和长度标识,比如AT+MQTTPUB=0,"topic",len,data\r\n,这是ESP8266的MQTT AT指令格式。如果自定义STM32与ESP8266之间的通信,可以设计成0xAA 0x55 len payload checksum格式,这样在串口接收时通过校验和就能剔除乱码帧,比直接strstr快得多,也稳得多。
3.2 MQTT通信协议与数据上报流程
MQTT是现在物联网设备上云的事实标准协议,它基于发布/订阅模型,设备之间不直接通信,而是通过Broker中转。协议本身是为低带宽、不稳定网络设计的,有遗嘱消息、QoS等级、保留消息这些机制。
这套系统中,ESP8266作为MQTT客户端。如果使用AT固件,指令流程大致是:
AT+CWMODE=1 // 设置Station模式 AT+CWJAP="你的WiFi名","密码" // 连接路由器 AT+MQTTUSERCFG=0,1,"clientId","username","password",0,0,"" AT+MQTTCONN=0,"broker地址",1883,1 // 连接Broker AT+MQTTSUB=0,"设备控制主题",1 // 订阅控制指令 AT+MQTTPUB=0,"设备数据主题",1,"{\"temp\":25.5}",119 // 发布数据我个人更推荐用MicroPython固件或者Arduino IDE给ESP8266写代码,毕竟用AT指令处理复杂的JSON和定时上报会非常痛苦。如果题目只要求用MCU做主控,那么ESP8266用AT透传模式就行;如果不限制,直接在ESP8266上跑Arduino代码,自己完成传感器数据上传和命令下发,整体架构会简化很多,但那样MCU就显得有点“陪衬”了。所以,如果你的评分标准里有“单片机核心工作量”这一项,还是把传感器采集放在MCU上、让ESP8266只做透传模块更稳妥。
MQTT的Topic设计要有讲究。我会设计两个主题:
- 数据上行主题:
/device/001/sensor,每个传感器数值变化都发布到这个主题 - 控制下行主题:
/device/001/command,手机端往这个主题发指令
Topic命名带一个设备ID的好处是以后接多个设备不冲突。
3.3 云平台接入与手机远程查看
云平台公开的接入方式通常有两种:一种是设备直连MQTT Broker,然后平台规则引擎把数据流转存或者转发;另一种是设备通过HTTP POST把数据推到服务端,服务端再存库展示。
对于毕设来说,最省力的方案是巴法云或者阿里云物联网平台。阿里云物联网平台的接入流程相对复杂一些,需要创建产品、定义物模型(属性/事件/服务)、生成三元组(ProductKey、DeviceName、DeviceSecret),然后使用阿里云提供的MQTT签名算法计算出最终连接参数。虽然第一次配置要花点时间,但正因为它严谨,答辩时讲起来更有技术含量。
我简单说一下阿里云MQTT连接的参数计算逻辑:连接Broker地址是${productKey}.iot-as-mqtt.cn-shanghai.aliyuncs.com,端口1883,客户端ID是${deviceName}|securemode=3,signmethod=hmacsha1,timestamp=789|,用户名是${deviceName}&${productKey},密码是使用DeviceSecret对${clientId${clientId}deviceName${deviceName}productKey${productKey}timestamp789做HMAC-SHA1计算的结果。这段逻辑如果手写会很容易出错,建议直接用官方提供的设备端SDK示例代码,或者用Python脚本在线算好连接参数,再填到ESP8266里。
如果你不想折腾阿里云那套签名机制,巴法云是更快速的选择:注册一个账号,创建一个主题,把密钥填进代码就能收发了,还能用他们的小程序查看数据,适合项目周期紧张的情况。我自己的建议是:如果目标是把项目做成“能演示、能通过答辩”,巴法云足够;如果想顺便锻炼物联网工程能力,认真走一遍阿里云物联网平台。
3.4 上位机显示界面与数据可视化
远程监控系统如果没有一个“看得见”的界面,效果会大打折扣。手机端最简单的方式是使用云平台自带的应用开发功能,或者直接通过MQTT客户端App订阅数据,把收到的JSON解析显示出来。更好的方案是用微信小程序或者网页端接收云平台转发的数据。
在网页端可视化方面,有一个经典组合是Node-RED + Dashboard。Node-RED是一个流程编排工具,通过连线方式就能实现MQTT消息接收、存储到数据库、仪表盘展示。它自带温度计、折线图、开关控件,界面做出来有点像简易版智能家居控制中心,非常适合项目演示。
如果让我从零做一套可视化界面,推荐的组合是:Node-RED读取MQTT数据,写入InfluxDB时序数据库,再用Grafana做Dashboard展示。这套链路虽然看起来“重”,但每一步都有成熟的第三方库支持,数据历史曲线非常直观,答辩时展示“过去24小时温度变化曲线”这类图表,会比只显示一个当前值更有说服力。
4. 常见问题与调试技巧实录
4.1 传感器数据异常排查
这套系统调试期最容易碰到的几个问题,我按出现频率整理成了表格:
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 温湿度读数为0或固定值 | DHT11上拉电阻缺失、间隔时间太短 | 补上拉4.7kΩ,读取间隔大于1s |
| 光照值不变 | BH1750地址错误、I2C总线被占用 | 用I2C扫描程序确认设备地址 |
| 烟雾值上电后一直偏高 | MQ-2未预热完成 | 开机后延时30s再读取,或做软件滤波 |
| 数据偶发乱码 | 串口波特率不匹配、共地问题 | 统一波特率115200,检查GND是否连通 |
| OLED显示雪花点 | I2C线序问题、模块供电不足 | 检查SCL/SDA接线,缩短杜邦线 |
| ESP8266频繁掉线 | 供电电流不足、WiFi信号弱 | 独立供电,增加电容,调整天线方向 |
| 远程控制没反应 | 订阅主题或命令格式不对 | 用MQTT调试工具订阅所有主题,观察原始报文 |
其中DHT11数据异常出现频率最高,特别是“第一次读出来是正常值,后面一直是0”这种情况,多半是连续读取间隔太短触发了传感器内部复位时序。解决办法是在读取失败时返回上一次有效值,连续失败3次才报告异常,这样数据曲线不会出现难看的凹陷。
烟雾传感器的模拟量还有一个特点:MQ-2在干净空气中的输出电压不是0,而是有一个“零点”,不同模块之间差异挺大。建议在代码里加一个校准步骤:开机时读取20次取平均值作为零点,后续采集值减去这个零点再参与阈值判断。这个做法在工业上叫基线校准,在答辩时提一句会显得很专业。
4.2 无线通信稳定性优化
“设备在家里能连上,拿到楼道演示就离线”,这是很多同学反馈的经典状况。WiFi本身的覆盖距离在室内也就十几米,加上墙体衰减,很容易掉线。优化手段分两个层面:
硬件层面:给ESP8266换外置天线版本(如ESP8266-12F),或者增加一个WiFi信号中继器。注意不要把ESP8266贴在金属外壳或者大面积铜箔旁边,天线区域要尽量留空。软件层面:开启MQTT的断线重连机制,ESP8266检测到TCP连接断开后自动重新连接WiFi和Broker;上报失败的数据可以缓存到缓冲区,等重连成功后再补发最新状态。
模拟量采集的稳定性同样值得优化。STM32的ADC引脚如果悬空或者接线过长,采集值会跳动得很厉害。可以在ADC引脚和GND之间并联一个0.1μF电容做滤波,同时在程序里对连续10次采样值冒泡排序后取中间值,这种中值滤波算法对付尖峰干扰非常有效,而且实现就几行代码。
4.3 现场演示前的检查清单
每次带作品去演示前,我都会按下面这个清单过一遍,这套项目参加了不少竞赛和答辩,基本都能顺利跑通:
- [ ] 电池或电源适配器电量充足,最好带备用充电宝供电
- [ ] 手机热点或者现场WiFi已经连接,SSID和密码和代码里一致
- [ ] 云平台额度有效,主题密钥没有过期
- [ ] MQTT调试助手里能看到实时上报数据,确认链路通
- [ ] 继电器和风扇在本地手动触发正常
- [ ] OLED显示的温湿度和手机端显示一致
- [ ] 演示现场有其他WiFi干扰时提前切换到5G频段(如果模块支持)或者调整天线角度
还有一个容易被忽略的点:如果演示环境需要切换WiFi,务必提前改好代码里的WiFi账号密码并重新烧录。现场临时该密码最容易出问题,因为ESP8266的AT指令或者Arduino固件里硬编码的都是一串固定字符串。
4.4 代码容量超限与MCU选型升级
做51系列的同学经常遇到“代码容量超限”的提示,这通常有两个原因:一是printf这类格式化函数占用了大量代码空间,二是编译器优化等级设置太低。STC89C52只有8KB Flash,随便加几个库函数就容易爆。解决办法是把printf替换成自己写一个简单的串口发送函数,或者换成STC15系列这种带更多Flash的芯片,再就是直接在工程选项里检查是否勾选了“使用扩展RAM”和“优化等级”。
如果是STM32F103C8T6,Flash是64KB,一般代码很难写满,基本不用担心。但要注意的是,如果你用了HAL库加FreeRTOS加一堆中间件,Flash和RAM消耗会明显上涨,编译时留意一下内存占用报告就好。编译出现内存超限的时候,优先检查有没有哪个数组定义得特别大,比如串口接收缓冲定义成8192字节,这种情况随便定一个256字节的环形缓冲区就够了。
4.5 设计报告与答辩准备经验
这个项目相关的毕设报告一般包含背景意义、系统总体设计、硬件设计、软件设计、系统测试与总结这几章。写报告的时候别只是堆代码和截图,要体现“设计决策”的思路,也就是说你是从哪里查到传感器的量程精度参数、为什么选择MQTT协议而非HTTP轮询、这种方案在成本和功耗上相比其他方案有什么优劣。
答辩时最容易被打的一个问题是“你系统里的远程监控时间延迟是多少”。这个问题的标准思考路径是:传感器采集2秒一次,串口打包耗时毫秒级,MQTT发布到Broker再到客户端订阅推送,本地局域网大概几十毫秒,走公网取决于网络情况一般1秒以内。回答清楚这个链路延迟分布,能给评委留下“这学生真跑过实验”的印象。另一个高频问题是“如果有多个设备同时上报怎么办”,这就要引出MQTT的消息队列机制和主题隔离设计,答得好的话是一个加分项。
5. 一类拓展方向与后续升级思路
这个项目最让我喜欢的一点是它是“可生长的”。做完基础版本的温湿度和烟雾监测之后,后续升级路径非常清晰,随便挑两个方向做深度扩展,就能把它从课程设计提升到工程项目的水平。
方向一是增加本地边缘控制逻辑。现在很多智能家居系统的问题是过度依赖云端,家里断网设备就成摆设了。可以在STM32代码里加一套不依赖WiFi的本地联动规则,比如连续检测到烟雾浓度超过阈值且室内无人(可用红外传感器或者人体感应模块判断),直接本地触发继电器切断燃气电磁阀并打开蜂鸣器报警。这套逻辑放在MCU端执行,即使断网也能保护安全,这在产品设计里叫“本地逃生通道”。
方向二是引入低功耗和电池供电方案。现在系统一直插着USB电源,谈不上节能。如果换成STM32L0系列或者ESP32的深度睡眠模式,传感器每隔几分钟醒来采集一次,然后通过WiFi上报再进入睡眠,一节18650电池就能撑很久,而且这种低功耗物联网设计正是当前行业热点,写在简历上非常有含金量。相关的实时时钟(RTC)唤醒、定时器配置、功耗测量方法,又是另一个值得展开的技术专题。
方向三是数据分析和联动告警。光看实时数据不够“智能”,可以加上历史数据趋势预测,比如通过最近的温度变化斜率判断是否可能出现凝露,或者结合多传感器数据做简单的异常检测。这些功能用Python读云平台的历史数据进行离线分析就行,实现成本不高,但让整个系统的故事和立意都丰满了很多。
回到开头的结论:这个题目选得值。它以相对低的成本覆盖了嵌入式开发最核心的几个知识点:GPIO操作、通信协议(I2C/单总线/UART)、网络通信和云端接入、软硬件联调。做一遍下来,单片机技能、物联网概念和系统工程思维都练到了。如果你正拿着这个题目不知道从哪里下手,先把上面的硬件接线和主程序框架搭起来,点亮OLED屏幕上跳出第一行温湿度,后面就顺了。
本文还有配套的精品资源,点击获取