☰
从零搭建光照监测系统:ESP32与KiwisIoT实战指南
2026/10/12 6:35:01 网站建设 项目流程

1. 从零搭建一套光照监测系统:为什么我选了 KiwisIoT 这条路线

光照监测这件事,听起来简单,做起来坑不少。我最早接触这类需求,是帮一个做植物培育的朋友搭一套环境数据采集装置,当时想的就是一个光敏电阻加一块开发板,读个模拟值上传到云端就完事了。结果真正跑起来才发现,光照数据的采集远没有想象中那么"线性"——光敏电阻的阻值随光照变化是对数关系,不同批次的一致性差得离谱,室内荧光灯和自然光的频谱响应也完全不同,读出来的原始值根本没法直接用来做决策。

后来我陆续试过几种方案:纯本地的数据记录仪、基于通用物联网平台的采集节点、以及自己搭服务端做数据汇聚。每种方案都有各自的适用场景,但如果你的需求是"快速搭起一套能远程查看、能告警、能存历史曲线的光照监测系统",并且不想在服务端运维上花太多精力,那 KiwisIoT 这类物联网平台确实是一个值得认真考虑的选项。

这篇文章我会把整套系统的搭建过程拆开来讲——从传感器选型、硬件接线、固件编写,到数据上报、平台配置、告警规则设置,再到实际部署中遇到的各种坑。不管你是刚接触物联网开发的新手,还是已经用过其他平台想换个方案的老手,应该都能从中找到有用的东西。整套方案的核心思路是:用最少的硬件成本,换到最稳定可靠的光照数据采集与远程监控能力。

2. 光照监测到底在监测什么:传感器选型的底层逻辑

2.1 光敏电阻、光电二极管还是数字光照传感器

很多人上手光照监测,第一反应就是买光敏电阻(LDR),便宜、好用、接线简单。但如果你真的要把数据拿来做分析或者触发告警,光敏电阻的几个固有缺陷就会暴露出来。

首先是响应非线性。光敏电阻的电阻值与光照强度之间大致呈对数关系,这意味着你在低光照区域的灵敏度很高,但到了强光区域,阻值变化就非常平缓。如果你直接用 ADC 读分压后的电压值,得到的数值和实际光照强度(单位 lux)之间需要做复杂的曲线拟合才能对应上。

其次是光谱响应范围宽但不精准。光敏电阻对可见光整体都有响应,但它对红外线也敏感,这就导致在阳光直射和室内 LED 照明下,同样的 lux 值可能读出完全不同的电阻值。

第三是温漂和老化。光敏电阻的阻值会随温度变化,长期使用后材料特性也会漂移,对于需要长期稳定运行的监测系统来说,这是个大问题。

相比之下,数字光照传感器(比如基于 I2C 接口的 BH1750、TSL2561、VEML7700 等)直接输出经过校准的 lux 值,线性度好、一致性强、自带温度补偿,而且 I2C 接线只需要两根线,软件层面直接读寄存器就行。价格上,这类传感器模块通常也就几块到十几块钱,和光敏电阻方案的差距并不大。

我的建议很明确:如果你要做的是"监测"而不是"玩一玩",直接上数字光照传感器。光敏电阻适合做简单的"亮/暗"判断,比如天黑自动开灯,但要做数据记录和趋势分析,数字传感器是更靠谱的选择。

2.2 量程、精度与安装位置的实际考量

选定了传感器类型,接下来要确认的是量程和精度。以 BH1750 为例,它的测量范围是 1 到 65535 lux,分辨率在低量程下可以到 0.11 lux。这个范围对于室内环境监测、植物补光控制、仓库光照管理之类的场景是完全够用的。但如果你要监测的是户外直射阳光,正午时分光照强度可以轻松超过 100000 lux,这时候 BH1750 就会饱和,读出来的值会卡在最大值附近。

解决方式有两种:一是选用量程更大的传感器(比如 VEML7700 可以到 120k lux 左右),二是在传感器前面加装中性密度滤光片来衰减入射光。前者更省事,后者更灵活但需要做额外的校准。

安装位置同样关键。光照传感器最忌讳的就是被局部光源干扰——比如你把它装在靠近窗户的位置,白天阳光直射时读数飙升,但到了晚上室内灯光又会让它读到一个中等偏高的值,这样的数据拿来分析毫无意义。正确的做法是:把传感器安装在能代表目标区域整体光照水平的位置,避开直射光源、避开阴影遮挡、避开反光表面。如果是做植物光照监测,传感器应该放在植物冠层附近,和植物叶片处于同一水平面。

2.3 为什么最终锁定 KiwisIoT 作为数据汇聚层

硬件选好之后,下一步就是数据往哪儿传、怎么存、怎么展示。自己搭一套完整的物联网后端,涉及消息队列、时序数据库、API 网关、前端可视化,工作量不小。用公有云 IoT 平台可以省掉这些运维成本,但不同平台的接入门槛、免费额度、API 友好度差异很大。

KiwisIoT 吸引我的点在于:它的设备接入协议足够简单,MQTT 和 HTTP 都支持,对于资源受限的嵌入式设备来说很友好;数据存储和可视化是内置的,不需要额外对接第三方服务;告警规则可以通过简单的条件表达式配置,不用写复杂的规则引擎脚本。另外它的设备管理界面比较直观,添加设备、查看数据、设置告警都在一个面板里完成,对于中小规模部署来说很省心。

当然,它也不是没有限制。比如免费额度下的数据保留时间有限,高频上报会产生额外费用,这些在后面讲数据上报策略的时候我会详细说。

3. 硬件搭建:从传感器到主控的完整接线与供电方案

3.1 主控选型:ESP32 还是 ESP8266

主控芯片的选择主要看你的具体需求。ESP8266 便宜、够用,单核 80MHz,内置 WiFi,对于只接一个 I2C 光照传感器、定时上报数据的场景来说完全足够。ESP32 则是双核、更多 GPIO、内置蓝牙、支持更多外设接口,如果你后续还想扩展温湿度、土壤湿度、CO2 等传感器,ESP32 的扩展性会更好。

我这次用的是 ESP32 开发板,原因很简单:手头正好有,而且它的 I2C 接口可以灵活映射到任意 GPIO,接线更方便。如果你要控制成本,ESP8266(比如 NodeMCU 或 Wemos D1 mini)也是完全可行的,代码层面只需要改一下 I2C 的引脚定义。

供电方面,ESP32 和 ESP8266 都支持 Micro USB 直接供电,调试阶段用电脑 USB 口就行。部署到现场时,可以用 5V USB 电源适配器,或者用锂电池加充电模块做便携方案。需要注意的是,WiFi 发射时的瞬时电流可以到 200mA 以上,如果供电不足会导致重启或连接不稳定,所以电源的额定电流最好在 1A 以上。

3.2 BH1750 与 ESP32 的 I2C 接线细节

BH1750 模块通常有四个引脚:VCC、GND、SCL、SDA。ESP32 的默认 I2C 引脚是 GPIO21(SDA)和 GPIO22(SCL),但这两个引脚可以重映射。接线很简单:

BH1750 引脚ESP32 引脚说明
VCC3.3V供电,不要接 5V
GNDGND共地
SCLGPIO22I2C 时钟线
SDAGPIO21I2C 数据线
ADDR悬空或接 GNDI2C 地址选择,悬空为 0x23,接 VCC 为 0x5C

这里有一个容易踩的坑:BH1750 的供电电压是 3.3V,不是 5V。虽然有些模块板上带了电平转换,但保险起见,直接接 3.3V 最稳妥。另外,I2C 总线上需要上拉电阻,大多数 BH1750 模块已经自带了 4.7k 或 10k 的上拉电阻,如果没有,需要在 SDA 和 SCL 上各接一个 4.7k 电阻到 3.3V。

接线完成后,可以用 I2C 扫描程序确认传感器是否被正确识别。ESP32 的 Arduino 环境下,运行一个简单的 I2C Scanner 就能看到设备地址。

3.3 外壳与安装:让传感器"看见"该看见的光

硬件裸板直接部署在现场,灰尘、湿气、意外碰撞都是风险。我一般会用 3D 打印一个简单的外壳,或者用现成的防水接线盒改造。关键点是:传感器的感光面必须暴露在外,但又不能直接被雨水或灰尘覆盖。

一个实用的做法是:在外壳上开一个孔,用透明的亚克力板或玻璃片封住,传感器贴在透明板内侧。这样既能保护传感器,又不会显著影响透光率。需要注意的是,亚克力板对紫外线的透过率较低,如果你要监测的是包含 UV 成分的光照,最好用石英玻璃。

安装角度也有讲究。如果传感器是水平放置的,它接收到的主要是来自上方的光线;如果是垂直放置的,接收到的光线方向就完全不同。对于大多数环境监测场景,水平朝上安装是最通用的做法,这样读到的值最接近"环境光照水平"。

4. 固件开发:让 ESP32 稳定读取光照并上报数据

4.1 开发环境搭建与依赖库安装

我用的开发环境是 Arduino IDE,配合 ESP32 的板级支持包。安装步骤大致如下:

  1. 在 Arduino IDE 的"首选项"中,把 ESP32 的板管理器地址添加到"附加开发板管理器网址"。
  2. 打开"开发板管理器",搜索"esp32",安装对应的支持包。
  3. 在库管理器中搜索并安装 BH1750 的驱动库(比如BH1750by Christopher Laws)和 MQTT 客户端库(比如PubSubClientby Nick O'Leary)。
  4. 如果要用 HTTPS 上报,还需要安装WiFiClientSecure和ArduinoJson库。

这里有个小细节:不同版本的 ESP32 支持包对库的兼容性不一样,如果编译时报错,先检查库的版本是否匹配。我一般会锁定几个经过验证的版本组合,避免因为库更新导致代码跑不起来。

4.2 BH1750 数据读取的代码实现与常见问题

BH1750 的读取逻辑并不复杂,初始化之后,设置测量模式,然后周期性读取即可。下面是一个简化的代码框架:

#include <Wire.h> #include <BH1750.h> BH1750 lightMeter; void setup() { Serial.begin(115200); Wire.begin(21, 22); // SDA, SCL if (!lightMeter.begin(BH1750::CONTINUOUS_HIGH_RES_MODE)) { Serial.println("BH1750 初始化失败"); while (1); } } void loop() { float lux = lightMeter.readLightLevel(); if (isnan(lux)) { Serial.println("读取失败"); } else { Serial.print("光照: "); Serial.print(lux); Serial.println(" lx"); } delay(1000); }

这段代码看起来简单,但实际跑起来可能会遇到几个问题。第一个问题是 I2C 通信失败,表现为readLightLevel()返回 NaN。原因通常是接线松动、上拉电阻缺失、或者供电电压不对。排查时先用 I2C Scanner 确认设备地址能否被扫描到。

第二个问题是读数跳变严重。BH1750 在连续测量模式下,每次读取的是上一次转换的结果,如果读取频率高于转换时间(高分辨率模式下约 120ms),就会读到重复值或旧值。解决办法是控制读取间隔,或者在单次测量模式下,每次读取前等待足够的转换时间。

第三个问题是强光下的饱和。当光照超过 65535 lux 时,BH1750 会输出最大值,这时候数据就失去了区分度。如果你需要监测户外强光,要么换量程更大的传感器,要么加装衰减片。

4.3 MQTT 上报:连接、重连与数据格式设计

数据读出来之后,下一步是上报到 KiwisIoT 平台。KiwisIoT 支持 MQTT 协议接入,基本流程是:设备通过 MQTT 连接到平台指定的 Broker,然后向特定主题发布消息。

MQTT 连接的核心代码大致如下:

#include <WiFi.h> #include <PubSubClient.h> WiFiClient espClient; PubSubClient client(espClient); void reconnect() { while (!client.connected()) { String clientId = "esp32-light-"; clientId += String(random(0xffff), HEX); if (client.connect(clientId.c_str(), MQTT_USER, MQTT_PASS)) { Serial.println("MQTT 已连接"); } else { Serial.print("连接失败, rc="); Serial.print(client.state()); delay(5000); } } } void loop() { if (!client.connected()) { reconnect(); } client.loop(); float lux = lightMeter.readLightLevel(); char payload[64]; snprintf(payload, sizeof(payload), "{\"lux\":%.2f}", lux); client.publish("device/light/data", payload); delay(60000); // 每分钟上报一次 }

这里有几个经验点值得展开说。第一,clientId 必须唯一。如果两个设备用同一个 clientId 连接,平台会把前一个踢下线,导致设备反复重连。我一般会在 clientId 里加入芯片 ID 或随机数来保证唯一性。

第二,重连逻辑要健壮。WiFi 断线、MQTT Broker 重启、网络抖动都会导致连接断开,固件里必须有自动重连机制。上面的reconnect()函数是一个最简实现,实际使用中还可以加入指数退避策略,避免频繁重连被平台限流。

第三,数据格式要统一。我习惯用 JSON 格式上报,字段名尽量语义化,比如lux表示光照强度,ts表示时间戳(如果设备端有时间的话)。这样在平台侧做数据解析和展示时会更方便。

4.4 低功耗与上报频率的平衡策略

如果你的设备是电池供电的,功耗就是一个必须认真对待的问题。ESP32 在 WiFi 持续连接状态下,平均电流大约在 80-100mA,一块 2000mAh 的锂电池大概只能撑一天左右。要延长续航,核心思路是降低上报频率 + 使用深度睡眠。

具体做法是:设备唤醒后,连接 WiFi、读取传感器、上报数据,然后断开 WiFi 进入深度睡眠,定时器到期后再唤醒。这样平均电流可以降到几毫安甚至更低。代价是每次唤醒后重新连接 WiFi 需要几秒钟时间,而且深度睡眠期间无法接收下行命令。

上报频率的设定需要根据实际需求来权衡。对于光照监测,如果只是看趋势,每 5 分钟或 10 分钟上报一次就足够了;如果需要做实时告警(比如光照突然低于阈值),那上报间隔就要缩短到 30 秒或 1 分钟。但要注意,上报频率越高,平台侧的数据存储和流量消耗也越大,如果用的是按量计费的服务,成本会明显上升。

5. KiwisIoT 平台侧配置:设备接入、数据展示与告警规则

5.1 创建产品与设备:物模型的定义思路

在 KiwisIoT 平台上,接入设备的第一步是创建"产品"和"设备"。产品可以理解为一类设备的模板,定义了这类设备有哪些属性、支持哪些操作。设备则是产品的具体实例,每个设备有唯一的设备 ID 和密钥。

定义物模型时,我建议把光照强度作为一个"属性"来定义,数据类型选浮点数,单位标注为 lux。如果你后续还要接入温度、湿度等传感器,可以在同一个产品下继续添加属性。物模型定义得越清晰,后续的数据展示和规则配置就越省事。

设备创建完成后,平台会生成设备 ID 和密钥,这两个信息需要写入固件中,用于 MQTT 连接时的身份认证。密钥一定要妥善保管,不要直接硬编码在公开的代码仓库里。我一般会用单独的配置文件存放密钥,并且在版本控制中忽略这个文件。

5.2 数据上云后的可视化配置

数据成功上报后,KiwisIoT 平台会自动存储这些数据,并提供可视化面板。你可以创建一个仪表盘,把光照强度以折线图的形式展示出来,设置合适的时间范围(比如最近 24 小时、最近 7 天)。

可视化配置中有几个细节值得注意。第一是数据聚合方式。如果上报频率很高,原始数据点会非常密集,折线图看起来会很乱。平台通常支持按平均值、最大值、最小值等方式做聚合,对于光照监测,我一般用平均值来看趋势,用最大值来发现异常峰值。

第二是坐标轴范围。光照强度的动态范围可能很大,从夜晚的几 lux 到白天的几万 lux,如果坐标轴从 0 开始,低光照区域的细节就完全看不到了。可以考虑使用对数坐标轴,或者在面板上设置多个图表,分别展示不同量程的数据。

第三是单位换算。有些场景下,人们更习惯用"光照等级"而不是绝对 lux 值来描述光照条件。你可以在平台侧做一个简单的映射,比如 0-50 lux 为"昏暗",50-500 lux 为"一般",500-5000 lux 为"明亮",5000 lux 以上为"强光"。这样展示出来的数据更直观。

5.3 告警规则:什么时候该触发通知

光照监测的价值很大程度上体现在告警上。比如植物培育场景中,如果光照不足,植物生长会受影响;如果光照过强,叶片可能被灼伤。设置合理的告警规则,可以让你在问题发生时及时介入。

在 KiwisIoT 平台上配置告警规则,通常需要指定几个要素:触发条件(比如光照低于 100 lux 持续 5 分钟)、告警级别(警告、严重、紧急)、通知方式(邮件、短信、Webhook 推送)。

这里有一个容易忽略的点:告警去重和抑制。如果光照在阈值附近波动,可能会在短时间内触发大量重复告警,导致通知轰炸。好的做法是设置一个"静默期",比如同一类型的告警在 30 分钟内只通知一次。另外,可以设置告警的恢复条件,当光照恢复到正常范围后,自动解除告警状态。

5.4 数据导出与长期存储的注意事项

KiwisIoT 平台通常会提供数据导出功能,支持按时间段导出 CSV 或 JSON 格式的数据。对于需要长期保存数据的场景,我建议定期导出并归档到本地或对象存储中,避免因为平台的数据保留策略导致历史数据丢失。

导出数据时要注意时区问题。平台存储的时间戳通常是 UTC 时间,导出后需要根据本地时区做转换,否则在做数据分析时会出现时间偏移。另外,如果数据量很大,导出操作可能会比较耗时,建议分批次导出,避免超时。

6. 实测中踩过的坑与排查思路

6.1 数据跳变:从电源噪声到 I2C 干扰

系统跑起来之后,我遇到的最头疼的问题就是数据跳变。光照读数有时候会突然从几百 lux 跳到几万 lux,然后又跳回来,完全没有规律。一开始怀疑是传感器坏了,换了一个新的还是同样的问题。

排查过程是这样的:首先用万用表测量电源电压,发现 3.3V 输出上有明显的纹波,峰峰值大概在 100mV 左右。这个纹波来自 ESP32 的 WiFi 发射时的电流波动,通过电源线耦合到了传感器上。解决办法是在传感器的 VCC 和 GND 之间并联一个 100uF 的电解电容和一个 0.1uF 的陶瓷电容,纹波立刻降到了 20mV 以下,数据跳变也明显减少。

但问题没有完全消失。进一步排查发现,I2C 总线的走线太长(大概 30cm),而且和 WiFi 天线靠得很近,高频干扰通过 I2C 线耦合进来。把 I2C 线缩短到 10cm 以内,并且远离天线区域后,数据就稳定了。如果布线条件受限,可以考虑降低 I2C 的时钟频率(从 400kHz 降到 100kHz),或者在总线上加磁珠来抑制高频噪声。

6.2 MQTT 断连重连:那些让人抓狂的细节

MQTT 断连是另一个高频问题。表现是设备运行一段时间后,平台上就看不到数据了,重启设备又恢复正常。查看串口日志,发现是 MQTT 连接被断开,但重连逻辑没有正确触发。

深入排查后发现几个原因。第一是 keepalive 设置不合理。MQTT 协议有一个 keepalive 机制,设备需要定期发送 PING 包来维持连接。如果 keepalive 设置得太短,网络稍有波动就会触发断连;设置得太长,又无法及时发现连接已经失效。我一般设置为 60 秒,并且在client.loop()中确保 PING 包能正常发送。

第二是 WiFi 休眠导致连接中断。ESP32 默认开启了 WiFi 省电模式,在空闲时会降低射频活动,这可能导致 MQTT 连接超时。解决办法是调用WiFi.setSleep(false)关闭省电模式,代价是功耗会有所增加。

第三是重连时的 clientId 冲突。如果设备重启后用了相同的 clientId,而平台上旧连接还没有超时释放,新连接就会被拒绝。解决办法是在 clientId 中加入随机数或时间戳,确保每次连接都是唯一的。

6.3 平台侧数据延迟与丢失的排查路径

有时候设备端显示数据已经成功发布,但平台上就是看不到,或者延迟很大。这种情况的排查思路是自下而上逐层确认。

首先确认设备端的 MQTT 发布是否真的成功。client.publish()返回 true 只表示消息进入了发送缓冲区,并不代表已经到达 Broker。可以在发布后加一个短暂的延时,然后检查client.state()是否正常。

其次确认网络链路是否通畅。如果设备所在的网络有防火墙或代理,可能会拦截 MQTT 的 1883 端口。可以尝试用 8883 端口(MQTT over TLS)或者 WebSocket 方式接入。

最后确认平台侧的数据解析规则是否正确。如果上报的 JSON 格式和平台定义的物模型不匹配,数据可能会被丢弃。检查平台的数据日志,看看是否有解析失败的记录。

6.4 长期运行后的稳定性问题与固件看门狗

设备连续运行几天到几周后,可能会出现死机或重启。这类问题通常和内存泄漏、看门狗超时、或者堆栈溢出有关。ESP32 的 Arduino 框架默认开启了任务看门狗,如果某个任务长时间占用 CPU,看门狗会触发重启。

我在固件中加入了几个稳定性保障措施。第一是启用硬件看门狗,在setup()中调用esp_task_wdt_init()并设置超时时间,在loop()中定期调用esp_task_wdt_reset()来喂狗。第二是定期重启,比如每 24 小时主动重启一次,清理可能积累的内存碎片。第三是监控自由堆内存,如果发现堆内存持续下降,就说明有内存泄漏,需要检查代码中是否有未释放的动态分配。

另外,WiFi 和 MQTT 库在长时间运行后也可能出现状态异常,定期重连是一个简单有效的缓解手段。我一般会设置一个计数器,每成功上报 1000 次数据后,主动断开并重新连接一次 WiFi 和 MQTT。

7. 从单点监测到多点组网:系统扩展的几种思路

7.1 多设备接入时的设备管理策略

当监测点从一个扩展到多个时,设备管理就变得重要了。KiwisIoT 平台支持批量创建设备和分组管理,我一般会按照物理位置或功能区域来分组,比如"一号温室"、"二号温室"、"室外监测点"。

每个设备的命名要有规律,比如light-gh1-01、light-gh1-02,这样在平台上查找和筛选时一目了然。设备密钥也要有统一的保管方式,我习惯用一个加密的表格来管理,避免遗忘或混淆。

多设备接入后,数据上报的频率最好错开,避免所有设备在同一时刻集中上报造成网络拥塞。可以在固件中加入一个随机的初始延时,让各设备的上报时间自然分散。

7.2 边缘计算与本地缓存的取舍

网络不是永远可靠的。当 WiFi 断开或平台不可达时,如果设备只是简单地丢弃数据,就会造成数据缺口。一个更可靠的做法是在设备端加入本地缓存,当网络恢复后再补传。

ESP32 的 Flash 空间可以用来存储一定量的历史数据。简单的实现方式是:每次读取数据后,先写入本地环形缓冲区,上报成功后再标记为已发送。如果网络不可用,数据就暂存在缓冲区中,等网络恢复后按时间顺序补传。

当然,本地缓存也有代价:Flash 的写入寿命有限,频繁写入会加速老化。所以缓存策略要合理设计,比如只在网络不可用时才写入 Flash,正常运行时数据直接上报不落盘。

7.3 数据分析和趋势预测的延伸玩法

光照数据积累到一定量之后,就可以做一些有意思的分析了。比如计算每天的总光照积分(DLI,Daily Light Integral),这对于植物培育来说是一个关键指标。DLI 的计算方式是把一天中每秒的光照强度(单位 umol/m2/s)累加起来,对于用 lux 表示的数据,需要做一个转换系数(大致上,日光下 1 lux 约等于 0.0185 umol/m2/s,但这个系数随光源频谱变化)。

另一个玩法是做趋势预测。通过分析历史光照数据,可以发现一些规律,比如阴天时段的出现频率、季节性光照变化趋势等。这些分析可以帮助你优化补光策略或调整告警阈值。

如果平台侧支持 Webhook 或 API 回调,还可以把光照数据和其它系统联动起来。比如光照低于阈值时自动开启补光灯,光照过强时自动展开遮阳网。这就从单纯的"监测"升级到了"控制",系统的价值会更大。

8. 一些实操心得与后续优化方向

整套系统跑下来,我最深的体会是:光照监测的难点不在硬件,也不在软件,而在于对"光"本身的理解。不同光源的频谱特性、传感器的响应曲线、安装位置的环境干扰,这些因素叠加在一起,会让同样一套硬件在不同场景下表现出完全不同的数据质量。

如果你准备动手做类似的项目,我的建议是:先在桌面上把整套链路跑通,确认数据能从传感器一路到达平台并正确展示;然后再把设备部署到实际环境中,观察至少 24 小时的数据,看看有没有异常跳变或数据缺口;最后再根据实际数据调整上报频率、告警阈值和可视化配置。

后续如果要继续优化,我觉得有几个方向值得尝试。一是加入多传感器融合,比如同时测量温度和湿度,因为光照传感器的读数在一定程度上受温湿度影响,做数据校正后精度会更高。二是尝试用太阳能板加锂电池的供电方案,让设备完全脱离市电,部署位置更灵活。三是把数据对接到更专业的分析工具中,做更深入的趋势挖掘和预测。

这套方案的整体成本并不高,一个 ESP32 开发板加一个 BH1750 模块,硬件成本大概在几十块钱,平台侧如果用免费额度,基本可以零成本运行。对于个人项目或小规模部署来说,性价比是很不错的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询