news 2026/9/24 11:33:11

ESP8266+KiwisIoT车库监测系统实战:从硬件选型到云端可视化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ESP8266+KiwisIoT车库监测系统实战:从硬件选型到云端可视化

1. 从零搭建一个能用的车库监测系统,为什么我选了ESP8266加KiwisIoT

车库这个场景挺特殊的。它通常离主屋有一段距离,Wi-Fi信号到了那里往往只剩一两格,夏天闷热潮湿、冬天低温结霜,灰尘和震动更是家常便饭。我一开始想用有线方案,拉网线加PoE供电,但算了一下穿墙打孔加线材的成本,直接劝退。后来试过蓝牙方案,结果人站在客厅根本连不上,必须走到车库门口才行,体验极差。折腾了几轮之后,我把方案锁定在ESP8266配合KiwisIoT这个组合上,实测下来稳定跑了几个月,成本不到五十块,这里把完整的思路和踩过的坑都整理出来。

先说清楚这个项目到底做什么。核心功能其实就三件事:第一,实时监测车库门是开还是关;第二,监测车库内的温度和湿度,防止潮湿导致工具生锈或者温度过低冻裂水管;第三,把数据上传到云端,人在外面也能通过手机看到状态。ESP8266负责采集传感器数据并通过Wi-Fi上传,KiwisIoT作为物联网云平台负责数据存储和可视化展示。整套系统适合有一定动手能力的爱好者、想入门物联网的开发者,或者单纯想给自己车库加个监控的普通用户。不需要焊接基础也能做,面包板加杜邦线就能跑通原型。

为什么是ESP8266而不是别的?这个选择背后有几个很实际的考量。ESP8266这颗芯片从2014年发布到现在,社区生态已经非常成熟,你遇到的几乎所有问题都能在网上找到答案。它内置Wi-Fi功能,不需要额外加网络模块,一块NodeMCU开发板十几块钱就能搞定。GPIO数量虽然不多,但对于车库监测这种场景——一个门磁开关加一个温湿度传感器——完全够用。功耗方面,如果做电池供电需要深度睡眠,但车库一般有市电,直接USB供电就行,省去了电源管理的麻烦。

KiwisIoT这个平台的选择逻辑也类似。市面上物联网云平台不少,有面向企业级的、有面向教育市场的,KiwisIoT的定位偏向轻量级应用,注册就能用,免费额度对于个人车库监测这种低频数据传输场景绰绰有余。它的API设计比较直观,MQTT和HTTP两种接入方式都支持,文档虽然不算特别详细,但配合ESP8266的Arduino库,基本照着示例改改就能跑。最关键的是它的数据可视化面板可以直接拖拽配置,不需要自己写前端页面,省了大量时间。

注意:选择云平台时一定要确认它的免费额度策略。有些平台注册时免费,但设备数量或者消息条数一超就自动扣费。KiwisIoT目前的免费层对于个人项目是够用的,但如果你打算扩展到多个车库或者增加高频采集,建议先看清楚计费规则。

整个系统的架构可以这样理解:ESP8266相当于一个勤快的小工,每隔一段时间就去问一下传感器“门关了没”“温度多少”,然后把答案通过Wi-Fi送到KiwisIoT这个云端仓库。KiwisIoT收到数据后存起来,同时更新可视化面板。你在手机或电脑上打开KiwisIoT的页面,看到的就是最新的状态。如果门被打开了,还可以设置触发通知,比如发邮件或者推送消息。

这个架构的好处是解耦。传感器坏了换传感器,云平台换了改几行代码就行,两者之间通过标准的MQTT协议通信,不绑定。坏处是依赖网络,如果车库Wi-Fi断了,数据就传不上去。不过ESP8266可以在本地做一层缓存,网络恢复后补传,这个后面会详细讲。

2. 硬件选型与电路连接,别在第一步就翻车

2.1 核心器件清单与选型理由

先列一下我实际用的器件,以及为什么选它们。

器件型号数量选型理由
主控板NodeMCU ESP8266 (CH340版)1自带USB转串口,直接插电脑就能烧录,不需要额外买下载器
温湿度传感器DHT22 (AM2302)1比DHT11精度高,温度±0.5°C,湿度±2%,车库场景够用
门磁开关常闭型干簧管门磁1便宜、可靠、无需供电,磁铁靠近时导通
供电5V 1A USB电源适配器1手机充电器就行,注意线材质量
连接线杜邦线若干1套母对母、公对母都备一些
外壳防水接线盒1车库灰尘大,建议加个盒子

NodeMCU有好几个版本,我建议买CH340串口芯片的,因为CP2102版本在部分Windows系统上驱动比较麻烦。CH340虽然便宜,但驱动成熟,插上就能识别。DHT22比DHT11贵几块钱,但精度和量程都好很多,DHT11湿度误差能到±5%,在车库里这种误差可能导致你误判是否需要开除湿机。

门磁开关我选的是常闭型,意思是门关着的时候电路是导通的,门打开时断开。这样有个好处:如果传感器坏了或者线断了,ESP8266读到的是“门开”状态,属于安全侧失效。如果用常开型,线断了会显示“门关”,你可能以为门关着其实开着,这就危险了。

2.2 接线图与引脚分配

ESP8266的GPIO编号和NodeMCU板子上的丝印编号不一样,这是新手最容易搞混的地方。NodeMCU板子上印的D0到D8对应的是ESP8266芯片内部的GPIO编号,具体对应关系如下:

NodeMCU丝印ESP8266 GPIO推荐用途
D0GPIO16深度睡眠唤醒(本项目中不用)
D1GPIO5I2C SCL(本项目用作DHT数据)
D2GPIO4I2C SDA(本项目用作门磁输入)
D3GPIO0烧录模式控制,慎用
D4GPIO2板载LED,慎用
D5GPIO14SPI CLK
D6GPIO12SPI MISO
D7GPIO13SPI MOSI
D8GPIO15SPI CS,启动时必须为低

我实际用的接线方案是:DHT22的数据脚接D2(GPIO4),门磁一端接D1(GPIO5)另一端接GND,DHT22的VCC接3.3V,GND接GND。门磁接GPIO5时需要启用内部上拉电阻,这样门关着(干簧管导通)时GPIO5被拉到GND,读到低电平;门打开时内部上拉拉高,读到高电平。

DHT22的接线要注意:它的数据脚和VCC之间需要接一个4.7k到10k的上拉电阻。有些DHT22模块自带上拉电阻,如果你买的是裸传感器就需要自己加。我一开始没加上拉电阻,读出来的数据全是NaN,排查了半天才发现这个问题。

提示:ESP8266的GPIO工作电压是3.3V,不是5V。DHT22可以工作在3.3V到5V,所以直接接3.3V没问题。但如果你要接其他5V传感器,一定要加电平转换模块,否则可能烧坏ESP8266的GPIO。

2.3 供电与稳定性注意事项

ESP8266在Wi-Fi发射瞬间的电流峰值能到300mA左右,如果电源质量不好,电压会瞬间跌落导致重启。我一开始用了一个杂牌的USB充电器,结果ESP8266每隔几分钟就重启一次,串口日志显示“rst cause:2, boot mode:(3,6)”,这是典型的电源问题。换了一个正规品牌的5V 1A充电器之后就没再出现过。

另外,杜邦线如果太长或者接触不良,也会导致类似问题。建议电源线用短一点的、线径粗一点的,信号线可以稍长但最好不要超过20厘米。如果车库环境震动大,建议把杜邦线换成焊接或者用热熔胶固定,否则跑几天可能就接触不良了。

3. 固件开发:从点灯到数据上云的完整流程

3.1 开发环境搭建与第一个程序

我用的是Arduino IDE来开发ESP8266,因为库生态最丰富。搭建步骤不复杂,但有几个坑要避开。

首先在Arduino IDE的“首选项”里添加ESP8266的板管理器网址,然后在“开发板管理器”里搜索“esp8266”并安装。安装完成后,在“工具”菜单里选择“NodeMCU 1.0 (ESP-12E Module)”。这里有个常见问题:如果你买的是ESP-01或者ESP-12F模组而不是NodeMCU开发板,板子型号要选对应的,否则烧录会失败。

烧录时如果遇到“a fatal esptool.py error occurred: failed to connect to esp8266: timed out waiting for packet header”这个错误,大概率是以下几个原因:一是USB线是纯充电线没有数据功能,换一根线试试;二是驱动没装好,设备管理器里看看有没有识别到串口;三是烧录时GPIO0没有拉低,NodeMCU开发板一般有自动烧录电路,但有些廉价板子需要手动按住FLASH按钮再点上传。

第一个测试程序建议先跑一个串口打印和板载LED闪烁,确认开发环境和烧录流程没问题。NodeMCU的板载LED接在GPIO2上,低电平点亮。代码很简单:

void setup() { Serial.begin(115200); pinMode(LED_BUILTIN, OUTPUT); Serial.println("ESP8266 booted"); } void loop() { digitalWrite(LED_BUILTIN, LOW); delay(500); digitalWrite(LED_BUILTIN, HIGH); delay(500); }

烧录成功后打开串口监视器,波特率选115200,应该能看到“ESP8266 booted”并且LED在闪烁。这一步确认了硬件和开发环境都没问题,再往下做传感器读取。

3.2 DHT22数据读取与门磁状态检测

DHT22的读取需要用到DHT库,在Arduino IDE的库管理器里搜索“DHT sensor library”安装即可。注意要装Adafruit的那个版本,其他版本兼容性参差不齐。

读取DHT22的代码不复杂,但有个关键点:DHT22的采样间隔不能低于2秒,否则会读失败。我一开始放在loop里不加延时,结果一半的读取都是NaN。后来改成每5秒读一次,就稳定了。

门磁的读取更简单,就是数字输入加内部上拉:

#include <DHT.h> #define DHTPIN 4 #define DHTTYPE DHT22 #define DOOR_PIN 5 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(115200); dht.begin(); pinMode(DOOR_PIN, INPUT_PULLUP); } void loop() { float humidity = dht.readHumidity(); float temperature = dht.readTemperature(); int doorState = digitalRead(DOOR_PIN); if (isnan(humidity) || isnan(temperature)) { Serial.println("DHT read failed"); } else { Serial.print("Temp: "); Serial.print(temperature); Serial.print(" C, Humidity: "); Serial.print(humidity); Serial.print(" %, Door: "); Serial.println(doorState == LOW ? "CLOSED" : "OPEN"); } delay(5000); }

这里门磁的逻辑是:门关着时干簧管导通,GPIO5被拉到GND,digitalRead返回LOW;门打开时干簧管断开,内部上拉拉高,返回HIGH。所以LOW对应CLOSED,HIGH对应OPEN。

注意:DHT22在刚上电后的第一秒内读数不稳定,建议在setup里加一个delay(2000)再开始读取。另外如果车库温度低于0°C,DHT22虽然标称能测到-40°C,但实际在低温下响应会变慢,读数刷新频率会下降。

3.3 连接KiwisIoT:MQTT协议接入详解

KiwisIoT支持MQTT和HTTP两种接入方式,我选MQTT因为它的开销小、实时性好,适合ESP8266这种资源有限的设备。MQTT的核心概念是“发布/订阅”:ESP8266把数据发布到一个主题(Topic),KiwisIoT订阅这个主题就能收到数据。

首先要在KiwisIoT平台上创建设备,拿到设备ID和认证令牌。然后在Arduino里安装PubSubClient库,这是ESP8266上最常用的MQTT客户端库。

连接Wi-Fi和MQTT的代码框架如下:

#include <ESP8266WiFi.h> #include <PubSubClient.h> const char* ssid = "你的WiFi名称"; const char* password = "你的WiFi密码"; const char* mqtt_server = "KiwisIoT的MQTT服务器地址"; const int mqtt_port = 1883; const char* mqtt_user = "你的设备ID"; const char* mqtt_password = "你的认证令牌"; const char* topic = "你的设备主题"; WiFiClient espClient; PubSubClient client(espClient); void setup_wifi() { delay(10); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("WiFi connected"); } void reconnect() { while (!client.connected()) { if (client.connect("ESP8266Garage", mqtt_user, mqtt_password)) { Serial.println("MQTT connected"); } else { Serial.print("MQTT failed, rc="); Serial.println(client.state()); delay(5000); } } } void setup() { Serial.begin(115200); setup_wifi(); client.setServer(mqtt_server, mqtt_port); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); // 读取传感器并发布 float t = dht.readTemperature(); float h = dht.readHumidity(); int door = digitalRead(DOOR_PIN); String payload = "{\"temp\":" + String(t) + ",\"hum\":" + String(h) + ",\"door\":" + String(door) + "}"; client.publish(topic, payload.c_str()); delay(10000); }

这里有几个关键点。第一,MQTT的认证信息一定要核对清楚,KiwisIoT的设备ID和令牌是区分大小写的,复制的时候别漏字符。第二,client.connect()的第一个参数是客户端ID,同一个 broker 上不能有重复的客户端ID,否则会互相踢下线。我一开始用了固定的“ESP8266”,结果测试时开了两个设备就冲突了,后来改成用芯片ID动态生成就没问题了。

第三,发布的数据格式我用了JSON,因为KiwisIoT的面板可以直接解析JSON字段。如果你用纯字符串,面板配置会麻烦一些。JSON的拼接在ESP8266上要注意内存,String操作多了容易碎片化,建议用snprintf写到字符数组里,更省内存。

3.4 断网缓存与重连机制

车库Wi-Fi不稳定是常态,如果ESP8266检测到MQTT断开就死等,数据就丢了。我的做法是加一个简单的本地缓存:用一个环形缓冲区存最近N条数据,网络恢复后补发。

具体实现上,我定义了一个结构体数组存数据,一个写指针和一个读指针。每次采集数据先写入缓冲区,然后尝试发布。如果发布成功,读指针前进;如果失败,数据留在缓冲区里,等下次重连后继续发。缓冲区大小设成50条,按10秒一条算能存大约8分钟的数据,对于家庭车库场景够用了。

重连机制也要注意:不要用死循环卡住,否则看门狗会复位。我的做法是在loop里检查连接状态,断开时记录时间戳,每隔5秒尝试重连一次,重连成功后再补发缓存数据。

struct SensorData { float temp; float hum; int door; bool valid; }; #define BUF_SIZE 50 SensorData buffer[BUF_SIZE]; int writeIdx = 0; int readIdx = 0; void loop() { if (!client.connected()) { unsigned long now = millis(); if (now - lastReconnectAttempt > 5000) { lastReconnectAttempt = now; if (client.connect("ESP8266Garage", mqtt_user, mqtt_password)) { // 重连成功,补发缓存 while (readIdx != writeIdx) { String payload = formatPayload(buffer[readIdx]); client.publish(topic, payload.c_str()); readIdx = (readIdx + 1) % BUF_SIZE; delay(100); } } } } else { client.loop(); } // 采集数据写入缓冲区 // ... }

这个缓存机制实测下来很管用。有一次车库路由器重启了大概三分钟,恢复后数据一条没丢,全部补传上去了。

4. KiwisIoT平台配置与可视化面板搭建

4.1 设备注册与数据流配置

在KiwisIoT平台上,第一步是创建一个“产品”或者“项目”,然后在里面添加设备。每个设备会分配一个唯一的设备ID和认证令牌,这两个信息要填到ESP8266的代码里。

数据流配置的关键是定义“数据点”或者“属性”。比如我定义了三个属性:temperature(浮点型)、humidity(浮点型)、door_status(布尔型或整型)。属性定义好之后,ESP8266发布的JSON里的字段名要和这些属性名对应上,否则平台解析不了。

KiwisIoT的数据解析规则一般是这样的:收到MQTT消息后,平台会尝试把payload解析成JSON,然后按字段名匹配属性。如果字段名不匹配,数据会被丢弃或者存到默认的原始数据区。我一开始字段名用了“t”和“h”,结果面板上一直显示无数据,改成“temperature”和“humidity”就正常了。

提示:不同云平台对数据格式的要求不一样。有些平台要求特定的Topic结构,比如“/device/{deviceId}/data”,有些平台可以自定义。KiwisIoT的Topic结构在设备详情页有说明,配置前先看一眼,别自己瞎猜。

4.2 可视化面板拖拽配置

KiwisIoT的面板配置是我用过的平台里比较直观的。登录后进入“仪表盘”或者“可视化”页面,新建一个面板,然后从左侧的组件库里拖组件到画布上。

对于车库监测,我建议至少放这几个组件:一个仪表盘显示温度,一个仪表盘显示湿度,一个状态指示灯显示门开关状态,再加一个折线图显示最近24小时的温湿度变化。

每个组件需要绑定数据源。在组件的配置面板里选择对应的设备和属性,然后设置刷新间隔。KiwisIoT的免费版刷新间隔最短好像是10秒,对于车库监测足够了。

门状态指示灯我配置了颜色映射:door_status为0(关门)时显示绿色,为1(开门)时显示红色。这样一眼就能看出门有没有关。

折线图的时间范围可以选最近1小时、6小时、24小时、7天。我一般看24小时的,能看出车库一天的温度波动规律。比如夏天下午两三点温度最高,如果超过35°C就要注意通风;冬天凌晨温度最低,如果低于0°C就要考虑防冻。

4.3 告警规则与通知设置

KiwisIoT支持配置告警规则,比如温度超过阈值、湿度超过阈值、门打开超过一定时间等。告警触发后可以发邮件或者站内通知。

我配置了两条告警规则。第一条是门打开超过10分钟,因为正常开关车库门不会超过几分钟,如果持续打开可能是忘了关。第二条是温度低于2°C,提醒我检查车库里的水管有没有冻裂风险。

告警的阈值设置要根据实际情况调整。比如门打开告警,如果你经常在车库里干活一待就是半小时,那10分钟阈值就会频繁误报。我后来改成了30分钟,就合理多了。

注意:告警通知依赖云平台的推送服务,如果平台的通知渠道有限(比如只支持邮件),建议在手机上设置邮件提醒规则,确保能及时看到。另外告警规则不要设太多,否则容易“狼来了”,真正重要的告警反而被忽略。

5. 常见问题排查与实战避坑经验

5.1 烧录与连接问题速查

问题现象可能原因解决方法
esptool.py连接超时USB线无数据功能换一根确认能传数据的线
烧录后串口无输出波特率不对确认串口监视器设为115200
频繁重启电源供电不足换5V 1A以上正规电源
Wi-Fi连不上SSID或密码错误检查是否含特殊字符,ESP8266对某些特殊字符支持不好
MQTT连接失败设备ID或令牌错误逐字符核对,注意大小写
DHT22读数NaN缺少上拉电阻数据脚和VCC之间加4.7k-10k电阻
门磁状态反了常开常闭搞混交换代码里的LOW/HIGH判断

这个表里的问题我基本都遇到过。最坑的是电源问题,因为现象是随机重启,一开始以为是代码bug,查了好久才发现是充电器的问题。所以如果你遇到莫名其妙的重启,第一件事就是换电源。

5.2 数据不上云的排查思路

数据不上云是最常见的问题,排查要按层次来。先看ESP8266的串口日志,确认Wi-Fi连上了没有、MQTT连上了没有、publish返回的是true还是false。如果Wi-Fi没连上,检查路由器的2.4GHz频段是否开启(ESP8266不支持5GHz);如果MQTT没连上,检查服务器地址和端口;如果publish返回false,检查Topic是否正确、payload是否过大。

KiwisIoT平台侧也要看。登录平台看设备是否在线,如果显示离线,说明MQTT连接没建立;如果在线但没数据,说明Topic或数据格式有问题。平台的“设备日志”或者“消息记录”功能可以看原始消息,对照一下你发的payload和平台期望的格式是否一致。

还有一个容易忽略的点:ESP8266的PubSubClient库默认的MQTT包大小限制是256字节,如果你的JSON payload超过这个大小,publish会失败。车库监测的数据量很小,一般不会超,但如果你加了其他传感器或者发了很长的字符串,就要改MQTT_MAX_PACKET_SIZE这个宏。

5.3 长期运行稳定性优化

原型跑通之后,要让它长期稳定运行还需要做一些优化。

第一,加看门狗。ESP8266内置硬件看门狗,但如果代码里有死循环或者长时间阻塞,看门狗会复位。可以在loop里加ESP.wdtFeed()喂狗,但更好的做法是避免阻塞式代码,用状态机或者定时器来组织逻辑。

第二,定期重启。ESP8266连续运行几周后可能会出现内存碎片或者Wi-Fi断连不恢复的情况。我加了一个每24小时自动重启的逻辑,用millis()计时,到点调用ESP.restart()。重启后MQTT重连、缓存补发都是自动的,不影响数据连续性。

第三,OTA升级。ESP8266支持空中升级,不用拆下来插电脑就能更新固件。Arduino IDE里有OTA的示例,配置好之后可以通过Wi-Fi推送新固件。这个功能在车库这种不方便拆装的环境里特别实用。

第四,外壳防护。车库灰尘大,建议用防水接线盒把ESP8266和传感器装起来。DHT22的探头可以露在外面,但电路部分要密封。如果车库温度极端,可以在盒子里放一小包干燥剂,防止凝露。

5.4 我踩过的几个典型坑

第一个坑是GPIO编号混淆。NodeMCU板子上印的D1、D2和代码里的GPIO编号不是一回事,我一开始按丝印写代码,结果门磁接在D2上但代码里写的是GPIO2,怎么读都不对。后来查了引脚映射表才搞明白。

第二个坑是DHT22的采样间隔。我一开始在loop里不加延时,DHT22读十次有五次是NaN。后来看数据手册才知道DHT22两次采样之间至少要间隔2秒,改成5秒后就稳定了。

第三个坑是MQTT客户端ID冲突。测试的时候同时开了两个ESP8266,用了同样的客户端ID,结果两个设备轮流掉线。后来改成用ESP.getChipId()生成唯一ID就解决了。

第四个坑是JSON拼接的内存问题。用String拼接JSON在ESP8266上跑久了会内存碎片化,表现为运行几天后开始随机崩溃。后来改用char数组加snprintf,内存占用稳定多了。

第五个坑是KiwisIoT的Topic大小写。平台的Topic是区分大小写的,我复制的时候把一个大写字母搞成了小写,结果数据发出去平台收不到,排查了半天。

6. 功能扩展与进阶玩法

6.1 增加车库门远程控制

监测做了之后自然会想控制。加一个继电器模块接在ESP8266的另一个GPIO上,就可以通过KiwisIoT下发指令来控制车库门电机的开关。不过这里要非常小心:车库门是机械设备,远程控制如果误触发或者网络延迟导致指令重复,可能会造成门体损坏或者安全事故。

我的做法是加双重确认:KiwisIoT面板上的控制按钮点击后,平台先下发一个“准备”指令,ESP8266收到后点亮一个LED并等待,用户在面板上再点一次“确认”才真正触发继电器。同时继电器输出加一个硬件延时电路,确保每次触发只给一个短脉冲,不会因为网络重发导致连续触发。

6.2 接入其他传感器

ESP8266的GPIO虽然不多,但通过I2C总线可以挂多个传感器。比如加一个BH1750光照传感器监测车库亮度,加一个MQ-2烟雾传感器监测火灾风险,加一个水浸传感器监测地面是否积水。这些传感器大多支持I2C或单总线,接线不复杂。

不过要注意ESP8266的ADC只有一个引脚(A0),而且输入范围是0到1V,如果要接模拟输出的传感器,需要加分压电路。数字输出的传感器就没这个问题,直接接GPIO就行。

6.3 本地数据记录与备份

云平台虽然方便,但免费版一般有数据保留期限。如果要做长期趋势分析,建议在本地也存一份。最简单的方法是在车库放一个树莓派或者旧手机,跑一个MQTT订阅客户端,把数据存到本地数据库。这样即使云平台数据过期了,本地还有完整记录。

另一个方案是用ESP8266的SPIFFS文件系统存数据,但ESP8266的Flash容量有限,存不了太多。适合存最近几天的数据作为云端的补充。

6.4 低功耗改造思路

如果车库没有市电,需要用电池供电,那就要做低功耗改造。核心思路是让ESP8266大部分时间处于深度睡眠状态,每隔一段时间唤醒一次采集数据并上传,然后继续睡。

深度睡眠时ESP8266的电流可以降到20微安左右,但唤醒后连Wi-Fi和发数据需要几秒钟,这期间电流在70到300毫安之间。如果每5分钟唤醒一次,每次工作5秒,平均电流大约在1到2毫安,用2000mAh的电池能撑一个多月。

不过深度睡眠需要把GPIO16和RST引脚连起来,唤醒后程序从头开始跑,所有变量都会丢失。所以缓存数据要存到RTC内存或者Flash里,不能放在普通变量里。

7. 写在最后的一些个人体会

这个车库监测系统我从最初的面包板原型到现在稳定运行,前后折腾了大概两个月。中间换过传感器、换过电源、重写过好几次代码,但最终的效果是值得的。现在我不在家的时候也能随时看到车库门关没关、温度湿度多少,冬天再也不用担心水管冻裂了。

如果你也想做类似的项目,我的建议是先跑通最小可用版本:一块NodeMCU加一个DHT22,先把数据传到KiwisIoT上看到曲线,然后再加门磁、加告警、加外壳。不要一上来就追求功能齐全,那样容易在细节上卡住失去信心。

另外,车库环境比室内恶劣得多,所有接线和外壳都要考虑防尘防潮。我见过有人把ESP8266直接放在车库里,结果一个月后引脚氧化接触不良。花十几块钱买个防水盒,能省很多后续麻烦。

最后分享一个小技巧:在KiwisIoT的面板上加一个“最后更新时间”的文本组件,绑定设备的上报时间戳。这样你一眼就能看出数据是不是新鲜的。如果最后更新时间是几小时前,说明设备掉线了,需要检查。这个组件比看设备在线状态更直观,因为有时候设备显示在线但数据已经卡住了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 11:30:20

UE性能优化:GPU堆栈穿透与Texture Group分析实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 11:25:27

【Springboot毕设全套源码+文档】基于Java+spring boot的企业人事管理系统设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/9/24 11:21:00

STM32F103C8T6 寄存器流水灯实验报告

芯片&#xff1a;STM32F103C8T6 功能&#xff1a;GPIOA、GPIOB、GPIOC 三端口&#xff0c;4 个 LED&#xff08;3 个外接 LEDPC13 板载 LED&#xff09;轮流流水&#xff0c;间隔 1s&#xff0c;寄存器直接编程 一、实验目的 熟悉 STM32 GPIO 寄存器工作原理&#xff0c;掌握寄…

作者头像 李华
网站建设 2026/9/24 11:18:17

数据中心建设规划与设计:标准、面积、机柜部署全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华