ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

内置Web Server以太网温湿度传感器:从部署到开发实践指南

内置Web Server以太网温湿度传感器:从部署到开发实践指南 做环境监控的同学应该都有过这样的经历想同时看几个点位的温度湿度要么蹲在设备前盯着一块小OLED屏要么在一台电脑上装专用串口工具要么干脆抱着一大堆MODBUS寄存器地址去问厂家要协议文档。直到我手边换了一台带内置Web Server的以太网温湿度传感器事情才开始变得简单——网线一插电脑上打开浏览器在地址栏输入设备的IP地址页面直接显示当前温度、湿度、露点甚至历史曲线全程不需要装任何上位机软件也不需要折腾串口驱动。这篇文章把我从选型到部署、从页面操作到接口对接的完整过程整理了出来。内容包括为什么内置Web Server的以太网温湿度传感器比RS485、WiFi方案更适合不少场景设备内部的Web页面和数据接口是怎么协同工作的怎么在局域网里快速找到它并完成配置以及我踩过的几个典型的坑和排查方法。无论你是做机房动环监控的运维人员还是准备给自己的设备加一个“网页可查”功能的硬件工程师这篇文章应该都能给你省下不少弯路。1. 为什么我推荐带内置Web Server的以太网温湿度传感器1.1 先看传统方案的痛点很多人一提到温湿度采集第一反应就是DHT11、SHT30这类单点传感器再接个单片机读数据然后通过串口发到电脑。这套流程在实验室里验证功能没问题但真正放到工业现场或中大型机房问题马上就来了串口方案需要专用上位机设备端用RS232/RS485把数据传到电脑电脑上必须装厂商提供的上位机软件或者自己写串口解析程序。系统重装、换电脑、多客户端查看都变成麻烦事。Modbus RTU学习门槛不低工业上大量用Modbus RTU但你需要搞清楚寄存器映射表、功能码、CRC校验、波特率、数据位折腾一轮才能把数据读上来。多设备可视化困难哪怕你调通了Modbus协议想把多台传感器数据汇聚到一张网页或Dashboard上还是得自己写采集服务、建数据库、做前端界面工程量不小。跨平台访问不便串口工具基本绑定Windows哪天运维同事拿台Mac过来想临时看一眼数据都要到处找驱动。这些痛点堆在一起就会让人觉得“看个温湿度怎么这么难”。1.2 内置Web Server到底改变了什么内置Web Server的以太网温湿度传感器本质上是把“一个微型网站”直接烧进了传感器设备。设备内部跑了精简的HTTP服务监听80端口任何支持浏览器的终端都可以通过HTTP协议访问它获取当前温湿度数据。我们可以用一个生活化类比来帮助理解传统串口方案像是你必须在特定柜台专用上位机才能查账而内置Web Server的传感器则像是给每个设备配了一块“信息公开牌”任何浏览器都是查看这块牌的窗口输入IP就像输入门牌号门牌后面是实时更新的数据和配置页面。这个变化带来的直接好处是零客户端部署不需要安装任何软件不需要知道COM口号不需要配置波特率。只要浏览器能打开网页就能看数据。跨平台通行Windows、Linux、macOS甚至手机上的浏览器当然这里主要说的是电脑浏览器都能访问前提是设备和终端在同一个局域网下。网络协议标准化Web Server基于HTTP而上层还可以衍生出JSON数据接口、网页快照、远程配置等能力这为后面对接物联网平台和自动化脚本留下了很好的入口。部署成本直观常见机型也就一根网线加一个DC 12V电源如果支持PoE供电一根网线就把数据与供电都解决了布线成本比串口方案低很多。1.3 为什么是“以太网”而不是WiFi看到这里你可能会问WiFi温湿度传感器不是更省事吗不用拉网线手机就能看。确实家用场景WiFi更方便但在工程部署中我仍然优先推荐以太网原因很现实供电与网络分开时以太网更稳定WiFi对信道质量敏感工厂里电机、变频器一开2.4G频段干扰明显容易丢包或断连。以太网只要网线物理链路正常数据就稳定。PoE一根线解决供电企业级PoE交换机非常普及一根网线同时传数据加供电比WiFi还要再接一个电源适配器要干净得多。IP管理和安全审计方便以太网设备的MAC地址、IP地址都能在交换机上统一管理配合端口VLAN可以划分为独立监控网段WiFi设备默认无线接入管理起来就没这么通透。准入门槛低机房、车间、仓库大多数已经布好了网口插上即可网络工程师对“交换机端口状态”和“DHCP分配记录”的排查手段也更成熟。当然如果是户外临时布点、无法走线的情况WiFi/4G方案仍然有价值。只是“查数据方便”这个核心诉求面前以太网方案的稳定性和通用性最终让我把票投给了网线。2. 硬件架构与数据流拆解设备里到底发生了什么2.1 一台以太网温湿度传感器通常由哪几部分组成拆开一台工业级以太网温湿度传感器硬件组成并不复杂大致是这样模块常见方案作用温湿度探头SHT30 / SHT35 / 电容式湿敏电阻 NTC采集环境温度与湿度信号主控MCUSTM32、GD32等负责传感器换算、实现HTTP服务逻辑以太网协议栈W5500硬协议栈芯片或MCU内置MAC外设PHY处理TCP/IP、HTTP数据包收发网络物理层RJ45接口 隔离变压器连接网线与交换机供电模块DC 12V 转 3.3/5V或PoE PD模块为整机供电这里特别说一下W5500这类硬协议栈芯片。传统MCU实现Web Server有两种路径一种是用MCU内置的MAC加上外置PHY靠软件运行TCP/IP协议栈另一种是像W5500这样把TCP/IP协议栈固化在硬件芯片里MCU只需要通过SPI往芯片里写数据、读数据就能完成网络收发。对于做产品的小团队W5500方案开发门槛低、稳定性高很多市面上的以太网温湿度传感器都愿意用这一套方案也因此决定了设备最多支持几个并发HTTP连接——一般不会超过4个。2.2 “内置Web Server”是烧进芯片的不是跑在操作系统里的说过度膨胀的具体页面就黔驴技穷了。拿我们常用的一台设备来说它的Web页面就几个文件一个HTML首页、一个CSS样式文件、几段JavaScript脚本再加一个返回JSON数据的小接口整体体积只占闪存几KB到几十KB。设备上电后的流程大致是传感器初始化读取温湿度探头的校准系数。网络协议栈初始化获取IP地址要么读固定配置要么走DHCP。Web Server监听80端口等待浏览器发起TCP连接。浏览器发出HTTP GET请求设备解析请求路径。如果是页面路径直接返回HTML/JS/CSS文件如果是数据路径比如/data.json设备现场读取一次探头数值拼成功率谱非常小的JSON或文本返回给浏览器。浏览器拿到数据通过JavaScript定时器刷新页面上的数字和曲线。这种“读取实时值后再组帧返回”的做法保证了每次刷新看到的都是新鲜数据同时设备本身不需要保存太长时间的历史记录。2.3 数据在传感器与浏览器之间流动的三个关键细节真正理解这套数据流有三个细节值得记住HTTP是基于TCP的请求-响应模型每次浏览器刷新页面本质上就是一次“客户端发请求服务器返回响应”的过程。设备Web Server无法主动把数据“推”到浏览器所以页面通常采用AJAX轮询——浏览器用JavaScript每隔几秒自动请求一次数据接口。HTML页面里的温湿度数字不是写死的页面里往往只有一个div标签JavaScript拿到JSON数据后再更新这个标签的文本内容。所以你在浏览器里看到的温度实时性取决于刷新周期。并发连接数量要心里有数硬协议栈方案或轻量级软件协议栈方案设备能同时处理的TCP连接都很有限。如果所有人打开页面后都不关标签页连接数耗尽会导致新访问者打不开页面。建议团队查看时设置较长的刷新间隔比如5秒以上。3. 从接线到浏览器看到数据的全流程实操3.1 动手前的准备清单按照“先小而快、再全面铺开”的原则第一次上手建议尽量简化环境。我推荐准备这些一台内置Web Server的以太网温湿度传感器。一根至少超五类的成品网线建议1米或2米。一个可联网的交换机或路由器至少一个空闲LAN口。一台带有网口的电脑浏览器建议使用Chrome谷歌浏览器或Edge。确认传感器的供电方式直流供电机型需准备相应电源适配器PoE机型需确认交换机支持PoE。实际操作时我最常用的一套测试环境是传感器插在办公路由器的LAN口电脑用WiFi连着同一个路由器浏览器输入设备IP即可访问。这种组网方式下传感器和电脑虽然一个走有线、一个走无线但只要在同一个局域网段通信完全没问题。3.2 第一步接线与供电接线看着简单细节却不少DC供电机型打开传感器侧面的接线端子确认正负极标识接好DC 12V电源线。接反了不会烧设备大多数设备有防反接但会导致无法启动所以上电前最好用万用表确认一下电压和极性。PoE供电机型直接网线插交换机即可。要注意的是PoE交换机分为标准PoE802.3af/at和被动PoEPassive PoE。标准PoE会自动协商供电被动PoE则直接给特定线对送电。如果没有特别说明请只使用标准PoE交换机避免烧毁设备。上电后观察指示灯正常状态应该有电源指示灯常亮、网络Link指示灯常亮或闪烁。如果Link灯不亮多半是网线线序不对或网口接触不良。3.3 第二步找到传感器的IP地址这是第一次使用最容易卡住的环节我总结了三招按优先级排列第一招查设备标签或说明书。很多传感器出厂内置固定IP比如192.168.1.200。厂商会把默认IP、默认用户名密码贴在设备外壳或铭牌上先找找看。第二招登录路由器逛“DHCP客户端列表”。如果传感器默认是DHCP模式插上网线后它会自动向路由器申请IP。登录路由器后台在“连接设备”“DHCP客户端列表”里找设备名称常见的名称可能含有TH-Sensor、ETH-TH、W5500等字样。第三招用厂商搜索工具扫局域网。不少厂家提供了Windows端小工具名字一般是DeviceSearch、SensorView之类它会广播UDP包或者扫描网段把局域网内同品牌设备列出来显示IP和MAC地址。这类工具适合现场设备数量多、IP未知的情况。这里要强调网段匹配的问题如果电脑IP和传感器IP不在同一网段浏览器肯定打不开。比如传感器默认192.168.1.200而电脑是192.168.31.50就需要先把电脑的网卡地址手动改成192.168.1.50子网掩码255.255.255.0再重新访问。查看电脑IPv4地址的方法很简单在Windows终端里输入ipconfig在用Mac/Linux就是ifconfig或ip addr。3.4 第三步用浏览器访问并看懂页面找到IP之后打开Chrome或者Edge在地址栏输入http://192.168.1.200按下回车。第一次访问可能遇到两个情况有些浏览器会提示“此网站的安全证书有问题”或者“不安全连接”这是因为大部分设备只提供HTTP协议没有配置HTTPS证书。此时点击“高级”再“继续前往”即可这种情况在局域网设备访问里很常见不用担心。如果页面要求登录输入默认用户名和密码常见是admin/admin或者admin/123456。为了安全建议登录后立刻在设置页里修改密码。成功进去之后页面通常包含这些信息实时数据区当前温度、当前湿度、露点温度有的还会显示“采集时间”。趋势图区域用前端图表库绘制的滚动温度/湿度曲线。设备状态运行时间、固件版本、MAC地址、IP地址。配置区网络参数DHCP/静态IP、数据刷新间隔、温湿度上下限报警阈值、数据记录周期等。注意页面上的“刷新间隔”和数据记录间隔是两个概念。刷新间隔影响的是浏览器轮询频繁度记录间隔影响的是设备内部数据存储。别搞混。3.5 第四步配置静态IP、报警阈值与采样周期看完实时数据只是第一步真正用到生产环境时必须把设备参数调对。静态IP配置是我强烈建议做的一步。DHCP模式虽然插上就能用但路由器重启后IP很可能变化所有依赖旧IP的监控脚本和浏览器收藏夹就全失效了。建议在设备管理页面里把“自动获取IPDHCP”关闭改填静态IP。选择IP时要避开路由器的DHCP分配池比如路由器分配范围是192.168.1.100到192.168.1.199那就把传感器设为192.168.1.230这类空地址。子网掩码用255.255.255.0网关填路由器LAN口IP如192.168.1.1DNS可以填114.114.114.114或者直接填网关地址。报警阈值的设置思路温度上限和下限要留足够余量避免空调短时波动导致频繁误报。比如机房要求温度22±2可以把上限设为27度、下限设为15度。湿度报警同理机房一般建议30%~70%可以设置上下限各留5%的缓冲。采样周期如果只是为了人工查看默认1分钟或者5分钟都够如果要自动化采集保存历史数据建议传感器端设为2秒或5秒让数据粒度足够细但又不会让Web Server忙不过来。4. 进阶玩法把网页背后的数据变成自己的4.1 网页背后往往藏着数据接口很多内置Web Server的传感器不只是返回一个完整的HTML页面还会预留一个“纯数据接口”专门给程序读取。常见路径有/data.json返回JSON格式温湿度数据/getdata.asp或/getdata.cgi返回纯文本或键值对/snapshot.cgi返回当前状态快照怎么找到这个接口最简单的办法是在页面里按F12打开开发者工具切到“网络Network”面板然后刷新一次页面。看看浏览器向服务器发起了哪些HTTP请求其中返回内容是JSON或纯文本的那个请求就是我们要找的数据接口。举个例子我手上这台设备的接口是/data.json浏览器一次页面刷新会同时请求首页和数据接口其中数据接口返回的内容是{ temp: 25.3, hum: 52.1, dewpoint: 14.8, timestamp: 1736512345 }有了这个JSON接口传感器就不再是个“只能看的页面”而是变成了一个可编程的数据源。4.2 用curl快速验证接口在Linux、macOS和WindowsPowerShell里都可以用curl命令直接拉取数据。以下是在Linux终端里的一个简单操作curl http://192.168.1.230/data.json如果返回了JSON说明接口正常。接下来就可以把这条命令写进定时任务实现“每分钟采集一次数据”。例如*/1 * * * * curl -s http://192.168.1.230/data.json /var/log/th_sensor.log日志里的JSON会一行一条虽然格式简单但已经足够做长期趋势判断了。4.3 用Python脚本采集并保存CSV如果不想分析日志文件用Python写一个采集脚本更直接。下面这个脚本每隔5秒读取一次传感器数据写入到CSV文件每分钟还会打印一行摘要import requests import csv import time from datetime import datetime SENSOR_URL http://192.168.1.230/data.json def fetch_data(): resp requests.get(SENSOR_URL, timeout5) resp.raise_for_status() return resp.json() def main(): with open(temperature_humidity.csv, a, newline) as f: writer csv.writer(f) if f.tell() 0: writer.writerow([time, temperature, humidity, dewpoint]) while True: try: data fetch_data() now datetime.now().strftime(%Y-%m-%d %H:%M:%S) writer.writerow([ now, data[temp], data[hum], data[dewpoint], ]) f.flush() time.sleep(5) except Exception as exc: print(f[{datetime.now()}] 采集失败: {exc}) time.sleep(10) if __name__ __main__: main()这段脚本有几个很实用的设计f.flush()确保数据立即写入磁盘不会因为进程崩溃而丢失异常处理把网络故障和请求超时都包住了传感器临时不可用时脚本会等10秒再重试不会直接退出。4.4 对接监控平台或自建Dashboard有了HTTP接口对接监控平台就顺理成章了。常见的做法是写一个采集服务定时轮询传感器接口把数据写入时序数据库InfluxDB再用Grafana画Dashboard。这不只是把数字搬到网页上而是让历史数据可以查询、对比、告警。如果你用的物联网平台支持HTTP API推送也可以通过脚本把数据转发上去。思路很简单采集到数据后再向平台接口POST一次JSON。这里不展开具体平台配置核心逻辑类似import requests payload { deviceId: device01, temperature: 25.3, humidity: 52.1 } requests.post(https://your-iot-platform.example/api/upload, jsonpayload)需要提醒的是这类传感器内置Web Server的并发处理能力很有限轮询间隔别设太短。5秒一次已经足够1秒一次会把大量CPU资源耗费在HTTP解析上影响传感器本身的稳定运行。5. 常见问题排查与避坑实录5.1 浏览器打不开设备页面9成原因在这里我在现场调试遇到过最多的场景浏览器输入IP按回车结果页面一直转圈最后报“无法访问此网站”。遇到这种情况按以下顺序排查先确认网络通不通在电脑终端里执行ping 192.168.1.230。如果能收到回复说明链路正常如果超时问题大概率出在IP配置、网线、交换机端口上。确认电脑和传感器同网段用ipconfig查电脑IP如果网段不一致手动改电脑IP或者给传感器换到同网段。确认设备供电电源灯是否亮Link灯是否正常。有次我发现现场设备Link灯不亮最后查出来是网线水晶头只压了4芯10M模式能用、100M模式完全不通。检查浏览器代理设置如果电脑开了“自动检测代理”或某些加速器一类的网络软件浏览器访问局域网IP也可能被绕到代理去。解决办法是在浏览器设置里把“使用代理服务器”关掉或者切换为“直连”。局域网内访问传感器IP不需要走任何代理。换浏览器试试Chrome和Edge内核一致如果Chrome打不开可以换Firefox或浏览器隐私窗口再试排除插件干扰。5.2 页面能打开但数据不刷新页面能打开说明网络、Web Server都正常问题多半在前端交互刷新间隔太长在设备配置页面把AJAX刷新间隔改小比如从30秒改成2秒。浏览器缓存了旧页面按Ctrl F5强制刷新。浏览器拦截了脚本请求Chrome地址栏右侧有红色盾牌图标时点击允许加载脚本。但这在局域网设备里较少见。多人同时访问占用连接设备并发连接上限较低时把其他打开的页面标签页关掉再试。另外还有一个容易被忽略的点如果电脑系统时间不对设备返回的timestamp在页面里显示就可能“看起来”不对别急着怀疑传感器先看的是终端系统时间。5.3 时间戳不准、数据记录丢失不少以太网温湿度传感器并没有电池供电的RTC实时时钟断电后再上电时间可能恢复到出厂默认值。解决办法是在设备配置页面手动设置时间或者配置NTP服务器地址让它自动校时。如果没有NTP建议在采集脚本里以电脑时间为准传感器的timestamp只作为辅助参考。数据记录丢失的问题也常见。如果设备内置Flash只有几MB按1分钟一条记录存储大约只能存几个月。生产环境最好还是在服务器上做独立采集不要把设备Flash当作长期数据库。5.4 供电的坑PoE供电不一定插上就能用PoE虽然方便但有一个坑必须提前说明 不是所有网线都支持PoE。四芯网线1236各一芯只能跑百兆数据但标准PoE供电需要用到4578线对有些被动PoE也用1236供电如果网线只做了4芯数据可能通但PoE供电必然失败。遇到PoE设备Link灯和数据都正常但反复重启先怀疑网线。非标PoE更危险它的供电电压和极性如果和设备不匹配轻则无法启动重则烧毁整机。我自己的原则是除非厂家明确标明支持PoE供电否则一律单独接DC电源不给现场上非标PoE。5.5 IP冲突与地址管理设备在DHCP模式下自动获取IP有时会和局域网里其他设备冲突现象是时通时不通。在路由器后台“DHCP客户端列表”里能看到冲突报警。解决方法是全部设为静态IP并且做一个表登记设备名、MAC地址、IP地址、安装位置、负责人、配置日期。这一步看着很简单但在维护几十台传感器时能有条理得多。6. 工程部署中的几条个人建议最后分享几条我在实际项目中沉淀下来的经验希望能帮你少走弯路。第一条先直连再组网。拿到新传感器之后别急着接到业务网络里。先用一根网线把传感器和电脑直连电脑配网段里的一个IP浏览器确认能打开页面、能改配置再接入正式交换机。这个习惯能帮你把“设备配置问题”和“网络环境问题”隔离开排查效率翻倍。第二条配合交换机做端口规划。如果现场有多台传感器建议在交换机上把监控设备端口划分到一个独立VLAN这样可以避免广播风暴影响也能通过交换机端口状态快速判断哪台传感器掉线了。第三条不要把报警只依赖在设备页面里。设备自带的Web页面适合人工查看和配置但专业监控必须靠独立采集脚本或平台。我见过项目只靠传感器页面上的报警灯提醒后来设备被误碰断电半小时后才被发现。务必要让采集脚本具备心跳监测能力一旦拉不到数据就立刻通知。第四条定期备份配置和固件。很多传感器的Web页面支持导出配置文件一次安装几十台时每台都做配置很累。建议先配好一台作为模板导出配置再批量导入到其他设备。升级固件之前先确认兼容性和升级步骤别为了贪新功能把整个机房设备都搭进去。第五条注意探头安装位置与防护。温湿度探头怕结露、怕阳光直射、怕贴近热源。装空调出风口旁边测出来的温度一定偏低装服务器出风口旁边测出来的一定偏高。选点位时要多走两步看看周围有没有放电设备、门窗、外墙阴面这类环境影响比传感器本身精度误差大得多。我在实际工程中最大的感受是内置Web Server的以太网温湿度传感器最大的价值并不是“省了一根串口线”而是把一个原本封闭的硬件设备变成了一个标准的、开放的数据服务节点。浏览器只是入口背后的HTTP接口才是真正值得玩味的东西。当你习惯了用浏览器加HTTP的方式去看传感器你会自然而然地发现后续无论是接脚本、做可视化、还是对接平台思路全都被这条链路打通了。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进